本文記錄一次真實的 Oracle 10g 災難恢復演練。環境為 AIX 5.2,採用典型的 OFA (Optimal Flexible Architecture) 佈局:
rootvg 卷組下的 /oracle 文件系統datavg 卷組下的 /oradata 文件系統(未受損)$ORACLE_HOME/dbs 一份,/oradata 兩份$ORACLE_HOME/dbs 與 /oradata 各一份,共三組spfile 備份文件rootvg 重建)。spfile 恢復至 $ORACLE_HOME/dbs/。嘗試 startup nomount 失敗,報錯 ORA-07446: sdnfy: bad value,提示目錄無效。檢查 spfile 參數發現缺少後台進程轉儲目錄與歸檔目錄:
*.background_dump_dest='/oracle/app/oracle/admin/hb052500/bdump'
*.log_archive_dest_1='LOCATION=/oracle/app/oracle/OraHome/dbs/archive'
依參數路徑手動創建缺失目錄:
mkdir -p $ORACLE_BASE/hb052500/bdump
mkdir -p $ORACLE_HOME/dbs/archive
再次 startup nomount,實例成功啟動。
alter database mount 報錯 ORA-01990 / ORA-27037:口令文件 orapw 缺失。使用 orapwd 工具重建:
orapwd file=$ORACLE_HOME/dbs/orapwd.ora password=oracle
再次 alter database mount 提示 ORA-01100: database already mounted,嘗試 alter database open 遇到 ORA-38760(閃回數據庫啟動失敗),關閉閃回後數據庫成功打開:
alter database flashback off;
alter database open;
執行 archive log list 確認歸檔模式正常,日誌序列銜接無誤,恢復宣告完成。
datavg 未受損直接決定了恢復的可能性與速度。bdump、udump、cdump、歸檔目錄是否存在,缺一不可。