標籤:資料庫資料 oracle 修複
當我們在使用Oracle資料庫時,突然斷電,造成很多問題,致使舊資料丟失,影響了資料的正確性,破壞了資料庫。此時,使用者急切需求恢複資料。本文以此為例,講述資料庫資料恢複。
一、案例描述:
資料庫因突然斷電,資料庫啟庫報system01.dbf需要更多的恢複來保持一致性,資料庫無法開啟;資料庫沒有備份,歸檔日誌也不連續。客戶提供了資料庫的線上檔案,急需恢複zxfg使用者下的資料。
二、恢複流程:
1 資料庫的故障檢測
2 嘗試掛起資料庫並修複資料庫
3解析資料檔案
4 驗證資料
5匯出資料與交付資料(匯入)
三、恢複資料
1資料庫的故障檢測
利用DBV 命令檢測資料檔案的完整性
結果如下:
650) this.width=650;" title="1.png" src="http://s1.51cto.com/wyfs02/M01/7A/86/wKiom1arH8uRacvCAABA9IPe88E075.png" alt="wKiom1arH8uRacvCAABA9IPe88E075.png" />
分析結果發現SYSAUX01.DBF檔案資料區塊(Data)檢測失敗40頁,索引頁(Index)檢測失敗29頁,說明SYSAUX01.DBF存在壞塊。
結論:通過dbv對資料檔案的完整性檢驗,SYSAUX01.DBF存在壞塊,其他檢測的檔案完整。
2 用客戶的資料庫本地掛起資料庫,嘗試修複資料庫。
2.1 建立新的OS :windows server 2008 x86,安裝oracle 11.2.0.1.0 for 32-bit
版本資料庫,掛起資料庫
650) this.width=650;" title="2.png" src="http://s5.51cto.com/wyfs02/M02/7A/86/wKiom1arIAiyN0W1AABOkbNaO7k734.png" alt="wKiom1arIAiyN0W1AABOkbNaO7k734.png" />
起庫報ORA-01110錯誤,System01.dbf需要更多一致性恢複。使用recover database 命令,利用線上日誌做介質恢複。
650) this.width=650;" title="3.png" src="http://s1.51cto.com/wyfs02/M00/7A/86/wKiom1arIE7BIdf-AAAVUPNUF5s858.png" alt="wKiom1arIE7BIdf-AAAVUPNUF5s858.png" />
資料庫的控制檔案已被修改,需要使用控制檔案恢複資料庫
650) this.width=650;" title="4.png" src="http://s3.51cto.com/wyfs02/M01/7A/86/wKioL1arIQmyArwbAABmkOf0gMI745.png" alt="wKioL1arIQmyArwbAABmkOf0gMI745.png" />
恢複資料庫需要2016_01_19的11號歸檔日誌。由于歸檔日誌丟失,使用cancel參數進行不完全恢複。
650) this.width=650;" title="5.png" src="http://s2.51cto.com/wyfs02/M01/7A/86/wKiom1arIQuia0_-AAAtB_ydNBA317.png" alt="wKiom1arIQuia0_-AAAtB_ydNBA317.png" />
再次執行alter database open 命令,資料庫開啟。
650) this.width=650;" title="6_副本.png" src="http://s5.51cto.com/wyfs02/M02/7A/86/wKioL1arIYzDSd6sAAAglGjjqgk441.png" alt="wKioL1arIYzDSd6sAAAglGjjqgk441.png" />
2.2 查詢執行個體狀態,資料庫報ora_00600錯誤;進行其他查詢,其中一些查詢可以進行,一些查詢報錯,而且報錯都是ora_00600錯誤。
650) this.width=650;" title="7.png" src="http://s1.51cto.com/wyfs02/M00/7A/86/wKioL1arIbGBvUJNAAAeb3ITkwo168.png" alt="wKioL1arIbGBvUJNAAAeb3ITkwo168.png" />
2.4查看警告日誌 追蹤檔案查看內部錯誤碼;
警告日誌部分內容如下:
ORA-00600: internal error code, arguments: [13013], [5001], [267], [8456009], [5], [8456009], [17], [], [], [], [], []
Non-fatal internal error happenned while SMON was doing logging scn->time mapping.
進行各種嘗試 ,查閱大量資料。資料庫的這種內部錯誤,不能通過命令修複。嘗試匯出資料庫。
2.3 用expdp/exp工具匯出資料庫;
2.3.1使用expdp匯出資料庫
650) this.width=650;" title="8.png" src="http://s4.51cto.com/wyfs02/M02/7A/86/wKioL1arIfizlmDuAAAvlG_9Y64465.png" alt="wKioL1arIfizlmDuAAAvlG_9Y64465.png" />
expdp 匯出資料庫報錯,和上面查詢報同樣的錯誤。sysaux01.dbf檔案損壞導致expdp工具不可用,匯出資料庫失敗。嘗試使用exp匯出資料庫
2.3.2 使用exp匯出資料庫
exp匯出資料庫,和上面報同樣的錯誤。資料庫報嚴重的內部錯誤,導致匯出工具exp不能使用,甚至一些查詢都不能進行,匯出資料庫失敗。
3解析資料檔案,擷取使用者資料
由上可知,資料庫的恢複已不可能。底層解析,解析資料檔案,擷取使用者物件。
3.1 使用北亞自主研發DBF解析工具的,擷取資料。結果如下:
650) this.width=650;" style="width:670px;height:391px;" title="QQ圖片20160129151439.png" src="http://s1.51cto.com/wyfs02/M02/7A/86/wKioL1arIniBts5LAAF-PvzJcwI242.png" width="873" height="387" alt="wKioL1arIniBts5LAAF-PvzJcwI242.png" />
3.2 遷移對象到資料庫中
建立資料庫,在資料庫中建立使用者,為使用者指派資料表空間,解鎖使用者並授權。然後,通道資料的搭橋的方式,將解析到的使用者物件遷移到資料庫中。
四、驗證資料
使用toad for oracle工具驗證資料
650) this.width=650;" style="width:664px;height:397px;" title="10.png" src="http://s5.51cto.com/wyfs02/M01/7A/86/wKiom1arIo-BUD9VAAH6oMVxNWQ840.png" width="856" height="809" alt="wKiom1arIo-BUD9VAAH6oMVxNWQ840.png" />
五、匯出資料,交付使用者
5.1使用exp或者expdp匯出zxfg使用者下的所有對象,本例採用exp匯出資料
命令如下:
exp system/abc file=C:\test\dump\zxfg.dmp log=C:\test\dump\zxfg.log owner=zxfg
650) this.width=650;" title="13.png" src="http://s1.51cto.com/wyfs02/M01/7A/86/wKioL1arIxqDUy59AACuc4uSwMA616.png" alt="wKioL1arIxqDUy59AACuc4uSwMA616.png" />
650) this.width=650;" title="14.png" src="http://s5.51cto.com/wyfs02/M00/7A/86/wKiom1arIxWwzJ6LAAB2LkCSqIM765.png" alt="wKiom1arIxWwzJ6LAAB2LkCSqIM765.png" />
查看匯出資料庫的dmp檔案及匯出日誌,確保匯出檔案沒有問題。
5.2使用者匯入資料,查看匯入資料的完整性。
使用者驗證資料後,全部正確,並表示非常滿意
本文出自 “張宇(資料恢複)” 部落格,請務必保留此出處http://zhangyu.blog.51cto.com/197148/1739889
Oracle資料庫恢複案例