FY_Recover_Data介紹
FY_Recover_Data是國內(nèi)OracleACE大佬黃瑋(個人網(wǎng)站:http://www.hellodba.com)
開發(fā)的一個package,該腳本專門用于對truncate的表進行恢復(fù)。
Fy_Recover_Data是利用Oracle表掃描機制、數(shù)據(jù)嫁接機制恢復(fù)TRUNCATE或者損壞數(shù)據(jù)
的工具包。由純PLSQL編寫。
FY_Recover_Data原理:
首先,我們分析一下TRUNCATE的過程。TRUNCATE不會逐個清除用戶數(shù)據(jù)塊上的數(shù)
據(jù),而僅僅重置數(shù)據(jù)字典和元數(shù)據(jù)塊上的元數(shù)據(jù)(如存儲段頭和擴展段圖)。也就是說,此
時,其基本數(shù)據(jù)并未被破壞,而是被系統(tǒng)回收、等待被重新分配————因此,要恢復(fù)被
TRUNCATE的數(shù)據(jù),需要及時備份其所在的數(shù)據(jù)文件。
然后,再分析一下表掃描的過程Oracle會讀取段頭的元數(shù)據(jù),獲得高水位線等信息,
然后讀取高水位線以下被格式化的數(shù)據(jù)塊。因此,理論上講,如果能夠?qū)⒈恢刂玫脑獢?shù)據(jù)和
元數(shù)據(jù)塊重新構(gòu)造出來,就能使數(shù)據(jù)能被重新讀取。然而,要完成這個任務(wù),難度相當(dāng)大
————要找出原有的所有元數(shù)據(jù)塊被保證其每個字節(jié)與被TRUANCATE之前完全相同
————看起來似乎是一個不可能完成的任務(wù)。
不過,我們可以換一角度來找方法————如果我們已經(jīng)有一套元數(shù)據(jù)及數(shù)據(jù)塊,然
后將被TRUNCATE的用戶數(shù)據(jù)塊的內(nèi)容取代其用戶數(shù)據(jù)塊的內(nèi)容,是否可以“騙”過
Oracle,讓它讀出這些數(shù)據(jù)呢?
回顧一下表掃描的過程,這個方法應(yīng)該是可行的。我們只要想辦法構(gòu)造出一個結(jié)構(gòu)相
同、且具有完整元數(shù)據(jù)信息和格式化了的用戶數(shù)據(jù)塊的傀儡表對象,然后將被TRUNCATE
的用戶數(shù)據(jù)塊找出,再將其數(shù)據(jù)內(nèi)容部分嫁接到傀儡對象的用戶數(shù)據(jù)塊,使Oracle以外這
是傀儡對象的數(shù)據(jù),就能讓Oracle掃描并讀出數(shù)據(jù)內(nèi)容。其原理用圖示描述如下:
1 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
2 |CopyOfDummyDataFile|
3 |(WithFormmatedBlocks)|
4 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
5 ||
6 \/
7 (BlcokHeader,BlockTail)
8 ||
9 \/
10 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐++‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+TableScan+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
11 |SourceDataFile|=>(DataBlockContent)=>|DummyTable|========
====>|RestoreTable|
12 |(WithoutMetaData)||(WithMetaData)|+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
文檔被以下合輯收錄
評論