oracle truncate可以恢复吗,恢复truncate表

发布于:2023-07-27 ⋅ 阅读:(94) ⋅ 点赞:(0)

如果数据库是非归档模式且没有备份,此时如果drop掉一张表,有办法可以恢复吗?当然可以,而且是完全恢复:http://blog.sina.com.cn/s/blog_61cd89f60102ed97.html ,但是truncate掉的一张表,数据还可以恢复吗?也是可以的,如果恢复及时也可以做到100%完全恢复,具体方法如下:

恢复原理:

首先,我们分析一下TRUNCATE的过程。TRUNCATE不会逐个清除用户数据块上的数据,而仅仅重置数据字典和元数据块上的元数据(如存储段头和扩展段图)。也就是说,此时,其基本数据并未被破坏,而是被系统回收、等待被重新分配,因此,要恢复被TRUNCATE的数据,但是要快要数据库被重写前快速实施恢复,这样我们可以做到100%完全恢复,其原理要跟据表扫描的过程,Oracle会读取段头的元数据,获得高水位线等信息,然后读取高水位线以下被格式化的数据块。因此,理论上讲,如果能够将被重置的元数据和元数据块重新构造出来,就能使数据能被重新读取。然而,要完成这个任务,难度相当大,要找出原有的所有元数据块被保证其每个字节与被TRUANCATE之前完全相同,看起来似乎是一个不可能完成的任务。不过,我们可以换一角度来找方法,如果我们已经有一套元数据及数据块,然后将被TRUNCATE的用户数据块的内容取代其用户数据块的内容,是否可以“骗”过Oracle,让它读出这些数据呢?回顾一下表扫描的过程,这个方法应该是可行的。我们只要想办法构造出一个结构相同、且具有完整元数据信息和格式化了的用户数据块的傀儡表对象ÿ


网站公告


今日签到

点亮在社区的每一天
去签到