fy_recover_data介绍
fy_recover_data是国内oracleace大佬黄玮(个人网站:http://www.hellodba.com)
开发的一个package,该脚本专门用于对truncate的表进行恢复。
fy_recover_data是利用oracle表扫描机制、数据嫁接机制恢复truncate或者损坏数据
的工具包。由纯plsql编写。
fy_recover_data原理:
首先,我们分析一下truncate的过程。truncate不会逐个清除用户数据块上的数
据,而仅仅重置数据字典和元数据块上的元数据(如存储段头和扩展段图)。也就是说,此
时,其基本数据并未被破坏,而是被系统回收、等待被重新分配————因此,要恢复被
truncate的数据,需要及时备份其所在的数据文件。
然后,再分析一下表扫描的过程oracle会读取段头的元数据,获得高水位线等信息,
然后读取高水位线以下被格式化的数据块。因此,理论上讲,如果能够将被重置的元数据和
元数据块重新构造出来,就能使数据能被重新读取。然而,要完成这个任务,难度相当大
————要找出原有的所有元数据块被保证其每个字节与被truancate之前完全相同
————看起来似乎是一个不可能完成的任务。
不过,我们可以换一角度来找方法————如果我们已经有一套元数据及数据块,然
后将被truncate的用户数据块的内容取代其用户数据块的内容,是否可以“骗”过
oracle,让它读出这些数据呢?
回顾一下表扫描的过程,这个方法应该是可行的。我们只要想办法构造出一个结构相
同、且具有完整元数据信息和格式化了的用户数据块的傀儡表对象,然后将被truncate
的用户数据块找出,再将其数据内容部分嫁接到傀儡对象的用户数据块,使oracle以外这
是傀儡对象的数据,就能让oracle扫描并读出数据内容。其原理用图示描述如下:
1 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
2|copyofdummydatafile|
3|(withformmatedblocks)|
4 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
5||
6\/
7(blcokheader,blocktail)
8||
9\/
10 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ tablescan ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
11|sourcedatafile|=>(datablockcontent)=>|dummytable|========
====>|restoretable|
12|(withoutmetadata)||(withmetadata)| ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
文档被以下合辑收录
评论