【數(shù)據(jù)庫數(shù)據(jù)恢復】oracle數(shù)據(jù)庫誤truncate table的數(shù)據(jù)恢復案例

數(shù)據(jù)庫恢復環(huán)境:
操作系統(tǒng):windows server;
數(shù)據(jù)庫:win_oracle_x64。
數(shù)據(jù)庫故障&分析:
oracle數(shù)據(jù)庫誤truncate? table,備份無法使用。
oracle數(shù)據(jù)庫誤操作導致數(shù)據(jù)丟失是比較常見的一種故障,如果有備份只需要恢復備份數(shù)據(jù)即可,我們中心數(shù)據(jù)恢復工程師接到的case多是無備份或者備份無法使用、還原報錯等。
首先介紹下Truncate工作原理:正常情況下oracle會通過Segment Header及數(shù)據(jù)字典對表更新Data Object ID,實際上存儲數(shù)據(jù)部分的塊并未被修改,如果被truncate,那么oracle在讀取全表數(shù)據(jù)時會因為數(shù)據(jù)字典和Data Object ID與實際存儲的數(shù)據(jù)塊內(nèi)容不一致而不會讀取被truncate的內(nèi)容記錄。
數(shù)據(jù)庫數(shù)據(jù)恢復過程:
本次案例演示中,北亞數(shù)據(jù)恢復工程師構造了一個相同環(huán)境下的類似故障。
1、用Scott用戶創(chuàng)建表emp1,連續(xù)多次復制emp表,然后truncate表emp1。此時查詢該表,數(shù)據(jù)庫中該表的記錄為0條。

2、基于oracle數(shù)據(jù)庫文件底層分析system表空間文件,找到truncate表的原始數(shù)據(jù)所在的位置。

3、解析表所在的數(shù)據(jù)文件數(shù)據(jù)庫,找到truncate的數(shù)據(jù)并將truncate的數(shù)據(jù)插入到數(shù)據(jù)庫中。通過解析system01.dbf文件,找到truncate的數(shù)據(jù)所在的位置,繼而找到被刪除的數(shù)據(jù)。解析表所在的數(shù)據(jù)文件,然后將truncate的數(shù)據(jù)插入到數(shù)據(jù)庫中。
4、在數(shù)據(jù)庫中查找被truncate的數(shù)據(jù),結果發(fā)現(xiàn)被truncate的數(shù)據(jù)已經(jīng)恢復,備份數(shù)據(jù)。

5、Exp導出scott用戶。
