服務(wù)器數(shù)據(jù)恢復(fù)故障
北京某公司的一臺(tái)服務(wù)器,上層數(shù)據(jù)類型為Oracle數(shù)據(jù)庫,由于服務(wù)器意外斷電,導(dǎo)致數(shù)據(jù)庫報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容為“system01.dbf需要更多的恢復(fù)來保持一致性”。由于客戶的數(shù)據(jù)庫并沒有備份,僅有一些斷斷續(xù)續(xù)的歸檔日志,現(xiàn)在只能通過數(shù)據(jù)恢復(fù)手段來修復(fù)Oracle數(shù)據(jù)庫。
數(shù)據(jù)恢復(fù)常規(guī)流程
1. 檢測數(shù)據(jù)庫故障情況;
2. 嘗試掛起并修復(fù)數(shù)據(jù)庫
3. 解析數(shù)據(jù)庫文件
4. 導(dǎo)出并驗(yàn)證恢復(fù)的數(shù)據(jù)庫文件
檢測服務(wù)器及數(shù)據(jù)庫情況
首先利用dbv命令檢測數(shù)據(jù)文件是否是完整的。見下圖所示:
通過上面的截圖我們可以看到,我們檢測的文件數(shù)據(jù)塊中有40頁的數(shù)據(jù)是檢測失敗的狀態(tài)。另外有29頁的索引數(shù)據(jù)也是失敗狀態(tài)。除此以外其他文件均為正常狀態(tài)。
掛起并修復(fù)數(shù)據(jù)庫
北亞數(shù)據(jù)恢復(fù)工程師在數(shù)據(jù)恢復(fù)專用服務(wù)器上搭建了一組windows server 2008 x86環(huán)境,并安裝了和客戶原服務(wù)器上相同的數(shù)據(jù)庫環(huán)境,嘗試將數(shù)據(jù)庫掛起來,查看數(shù)據(jù)庫的報(bào)錯(cuò)情況,請(qǐng)見下圖所示;
根據(jù)數(shù)據(jù)庫的報(bào)錯(cuò)情況,北亞數(shù)據(jù)恢復(fù)工程師采取了借助在線日志恢復(fù)數(shù)據(jù)的方法,使用recover database命令。
經(jīng)過一系列的修復(fù)發(fā)現(xiàn),由于歸檔日志不連續(xù),恢復(fù)數(shù)據(jù)庫所需時(shí)間段的歸檔日志缺失,只能使用cancel參數(shù)進(jìn)行不完全數(shù)據(jù)恢復(fù)。
數(shù)據(jù)恢復(fù)工程師再次執(zhí)行恢復(fù)命令,打開數(shù)據(jù)庫,查詢實(shí)例狀態(tài)有無報(bào)錯(cuò)。經(jīng)過查詢,仍有部分?jǐn)?shù)據(jù)報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容為“ora_00600”
通過上圖截圖內(nèi)容可見,這類數(shù)據(jù)庫內(nèi)部錯(cuò)誤是無法通過命令進(jìn)行修復(fù)的,北亞數(shù)據(jù)恢復(fù)中心工程師借助expdp/exp工具嘗試對(duì)數(shù)據(jù)庫進(jìn)行導(dǎo)出,但這兩個(gè)工具導(dǎo)出數(shù)據(jù)庫時(shí)依然有報(bào)錯(cuò),數(shù)據(jù)庫已經(jīng)不可能進(jìn)行修復(fù)。
解析數(shù)據(jù)庫文件獲取數(shù)據(jù)
使用北亞自主研發(fā)的一款dbf解析工具,獲取到客戶數(shù)據(jù)庫內(nèi)的數(shù)據(jù)。如下圖所示:
北亞數(shù)據(jù)恢復(fù)中心工程師獲取到數(shù)據(jù)庫數(shù)據(jù)后在數(shù)據(jù)恢復(fù)專用服務(wù)器內(nèi)搭建數(shù)據(jù)庫環(huán)境,創(chuàng)建數(shù)據(jù)庫、用戶、分配表空間等。將解析出來的數(shù)據(jù)庫數(shù)據(jù)遷移到新數(shù)據(jù)庫中。使用toad for oracle工具驗(yàn)證數(shù)據(jù)。見下圖所示;
導(dǎo)出數(shù)據(jù)庫數(shù)據(jù)并驗(yàn)證
數(shù)據(jù)恢復(fù)工程師再次使用exp工具將數(shù)據(jù)庫導(dǎo)出,導(dǎo)出命令:
exp system/abc file=C:testdumpzxfg.dmp log=C:testdumpzxfg.log owner=zxfg
本次導(dǎo)出正常,沒有任何報(bào)錯(cuò)。經(jīng)客戶驗(yàn)證,Oracle數(shù)據(jù)庫完整,本次數(shù)據(jù)恢復(fù)圓滿成功。