1. 程式人生 > >Oracle 資料庫誤truncate table恢復過程

Oracle 資料庫誤truncate table恢復過程

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

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

  Truncate資料的機理是,ORACLE會在資料字典和Segment Header中更新表的Data Object ID,而實際資料部分的塊則不會做修改。由於資料字典與段頭的DATA_OBJECT_ID與後續的資料塊中的並不一致,所以ORACLE服務程序在讀取全表資料時不會讀取到已經被TRUNCATE的記錄,但是實際仍未被覆蓋的資料。

  恢復過程

  為保護使用者資料,本文件構造與客戶相同的故障。Scott使用者建立表emp1,複製emp表,連續複製多次,總記錄數為:7340032條。truncate表emp1,之後沒有進行任何操作。查詢該表,資料庫中該表的記錄為0條。

d7fa023ca1a744cdaeab0327bf2fd6dc_th.jpg

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

  1 對system表空間檔案進行分析,找到truncate表的原始資料所在的位置

6a6e3a29083b48e0abe86981d02a479a_th.jpg

  2 解析表所在的資料檔案資料庫,找到truncate的資料3 將truncate的資料庫插入到資料庫中結果

  通過解析system01.dbf檔案,找到truncate的資料所在的位置,找到被刪除的資料。解析表所在的資料檔案,將truncate的資料插入到資料庫中。

  在資料庫中,查詢被truncate,發現數據回來了,直接備份資料。

73f357a2cab54262a4155d3eb5c461b8_th.jpg

  Exp匯出scott使用者;

d7531cc2b9c4452ca644621ac4d0efcb_th.jpg