ORA-03113: 通訊通道的檔案結尾以及用備份的資料檔案恢復原資料庫的解決方案
環境:win 2003 + oracle 10g
情景: 2013年4月7號晚上20點30分左右,資料庫伺服器莫名down了,開發人員嘗試啟動instance,報錯ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist. 開發人員在不通知DBA的情況下把oracle解除安裝掉重灌成原來一樣的環境,啟動還是報一樣的錯。問題無法解決,於是求助資料庫管理人員。
解決步驟:
冷靜分析,之前開發人員已經重灌了oracle,但是資料檔案都事先備份(不幸中的萬幸),於是嘗試用舊的資料檔案代替新安裝好的生成的資料檔案來啟動資料庫(這一步的前提是例項名和資料庫安裝路徑、資料檔名、表空間名、計算機名、IP都一致的情況下)。先啟動instance,然後再mount,再open,發現數據庫爆出“ORA-03113: 通訊通道的檔案結尾”的錯誤。
分析可能由於資料庫立即關閉(當時伺服器突然崩潰無法啟動),檔案狀態可能不一致,因為正常關閉資料庫會同步校驗各檔案,使得重新啟動的時候檔案時間點一致,於是進行下面的恢復。
SQL> startup mount;
ORACLE 例程已經啟動。
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 637536288 bytes
Database Buffers 188743680 bytes
Redo Buffers 6606848 bytes
資料庫裝載完畢。
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-03113: 通訊通道的檔案結尾
SQL> conn ' / as sysdba'
已連線到空閒例程。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 637536288 bytes
Database Buffers 188743680 bytes
Redo Buffers 6606848 bytes
資料庫裝載完畢。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
---------------- ------------- -------------- ------------ --------------
1 1 97 52428800 512 1 NO
INACTIVE 12980317 07-4月 -13 12988303 07-4月 -13
3 1 99 52428800 512 1 NO
CURRENT 12991762 07-4月 -13 2.8147E+14
2 1 98 52428800 512 1 NO
INACTIVE 12988303 07-4月 -13 12991762 07-4月 -13
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01139: RESETLOGS 選項僅在不完全資料庫恢復後有效
SQL> recover database until time '2013-04-09 20:30:00';
完成介質恢復。
SQL> alter database open resetlogs;
資料庫已更改。
SQL> shutdown
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 637536288 bytes
Database Buffers 188743680 bytes
Redo Buffers 6606848 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL>
至此,資料庫恢復成功,正常執行。
注意:恢復的時間點需要仔細確認