truncate table操做後數據恢復方法探究

概述:北京某國企客戶 Oracle 11g R2 數據庫誤truncate table CM_CHECK_ITEM_HIS,表數據丟失,業務查詢到該表時報錯,此時發現數據庫的備份不能用,表數據沒法查詢。數據庫

客戶Oracle 11g R2 數據庫誤truncate table CM_CHECK_ITEM_HIS,表數據丟失,業務查詢到該表時報錯,此時發現數據庫的備份不能用,表數據沒法查詢。oracle

Truncate數據的機理是,ORACLE會在數據字典和Segment Header中更新表的Data Object ID,而實際數據部分的塊則不會作修改。因爲數據字典與段頭的DATA_OBJECT_ID與後續的數據塊中的並不一致,因此ORACLE服務進程在讀取全表數據時不會讀取到已經被TRUNCATE的記錄,可是實際仍未被覆蓋的數據。spa

數據恢復過程

爲保護用戶數據,本文檔構造與客戶相同的故障。Scott用戶建立表emp1,複製emp表,連續複製屢次,總記錄數爲:7340032條。truncate表emp1,以後沒有進行任何操做。查詢該表,數據庫中該表的記錄爲0條。
圖一:

注: Os:win server 2008R2。數據庫版本:win_oracle_11.2.0.1_x64;server

1 對system表空間文件進行分析,找到truncate表的原始數據所在的位置blog

圖二:進程

2 解析表所在的數據文件數據庫,找到truncate的數據
3 將truncate的數據庫插入到數據庫中文檔

數據恢復結果  

經過解析system01.dbf文件,找到truncate的數據所在的位置,找到被刪除的數據。解析表所在的數據文件,將truncate的數據插入到數據庫中。
在數據庫中,查找被truncate,發現數據回來了,直接備份數據。
圖三:

Exp導出scott用戶;
圖四:
table

相關文章
相關標籤/搜索