一個系統(tǒng)崩潰造成Oracle數(shù)據(jù)庫無法啟動的恢復(fù)實例
筆者在打開Oracle數(shù)據(jù)庫準(zhǔn)備做東西得時候,突然電腦藍(lán)屏,系統(tǒng)崩潰了。重啟后,啟動實例,準(zhǔn)備連接Oracle數(shù)據(jù)庫繼續(xù)使用,卻發(fā)現(xiàn)無法連接,一直報:
- SQL> conn system/test@test
- ERROR:
- ORA-12514: TNS: 監(jiān)聽程序當(dāng)前無法識別連接描述符中請求的服務(wù)
一開始以為數(shù)據(jù)庫還沒啟動完畢,于是重啟了數(shù)據(jù)庫服務(wù),依然不能成功連接,當(dāng)時沒有懷疑數(shù)據(jù)庫有問題,因為之前也遇到過多次在打開oracle數(shù)據(jù)庫的情況下系統(tǒng)崩潰的情況,重啟系統(tǒng)后還是能正常使用的。
多次連接不上之后,才想起來去看下alter文件,一看果然出現(xiàn)問題了:
- Sun Jul 17 13:26:15 2011
- Recovery of Online Redo Log: Thread 1 Group 2 Seq 3 Reading mem 0
- Mem# 0 errs 0: D:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\TEST\REDO02.LOG
- Sun Jul 17 13:26:15 2011
- Errors in file d:\oracle\product\10.2.0\db_1\admin\test\bdump\test_dbw0_2904.trc:
- ORA-07445: exception encountered: core dump [ACCESS_VIOLATION] [_kcbzdh+583] [PC:0x4A41AF] [ADDR:0xECDC0214] [UNABLE_TO_READ] []
在這個地方看到重做日志文件Group 2的REDO02.LOG需要恢復(fù)。
這里,因為是新庫,沒什么重要數(shù)據(jù),所以只要數(shù)據(jù)庫能恢復(fù)就OK了。采取以下措施:
刪掉這個文件,重啟打開數(shù)據(jù)庫:
- SQL> startup mount
- ORACLE 例程已經(jīng)啟動。
- Total System Global Area 167772160 bytes
- Fixed Size 1247876 bytes
- Variable Size 71304572 bytes
- Database Buffers 88080384 bytes
- Redo Buffers 7139328 bytes
- 數(shù)據(jù)庫裝載完畢。
接著執(zhí)行以下代碼:
- SQL> alter database open;
- alter database open
- *
- 第 1 行出現(xiàn)錯誤:
- ORA-00313: 無法打開日志組 2 (用于線程 1) 的成員
- ORA-00312: 聯(lián)機日志 2 線程 1:
- ‘D:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\TEST\REDO02.LOG’
- ORA-27041: 無法打開文件
- OSD-04002: 無法打開文件
- O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。
- SQL> select group#,sequence#,status from v$log;
- GROUP# SEQUENCE# STATUS
- ———- ———- —————-
- 1 2 INACTIVE
- 3 1 INACTIVE
- 2 3 CURRENT
因為剛剛我刪除了當(dāng)前的日志文件,所以報錯無法自動恢復(fù)打開了。
- SQL> alter database drop logfile member ‘D:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\T
- EST\REDO02.LOG’;
- alter database drop logfile member ‘D:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\TEST\R
- EDO02.LOG’
- *
- 第 1 行出現(xiàn)錯誤:
- ORA-00361: 無法刪除最后一個日志成員
- D:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\TEST\REDO02.LOG (組 2)
無法刪除,但又不想rename log,把剛剛刪除的REDO02.LOG恢復(fù)回去。
- SQL> alter database recover;
- 數(shù)據(jù)庫已更改。
- SQL> alter database open;
- 數(shù)據(jù)庫已更改。
- SQL> shutdown immediate;
- 數(shù)據(jù)庫已經(jīng)關(guān)閉。
- 已經(jīng)卸載數(shù)據(jù)庫。
- ORACLE 例程已經(jīng)關(guān)閉。
- SQL> startup
- ORACLE 例程已經(jīng)啟動。
- Total System Global Area 167772160 bytes
- Fixed Size 1247876 bytes
- Variable Size 71304572 bytes
- Database Buffers 88080384 bytes
- Redo Buffers 7139328 bytes
- 數(shù)據(jù)庫裝載完畢。
- 數(shù)據(jù)庫已經(jīng)打開。
- SQL>
這樣Oracle數(shù)據(jù)庫又可以恢復(fù)使用了。
注意:上述方法只能適用于本機的測試環(huán)境或者不重要的測試環(huán)境,在對丟失數(shù)據(jù)沒有任何擔(dān)憂的情況,千萬不要對生產(chǎn)庫這么操作,以免造成數(shù)據(jù)的丟失。
【編輯推薦】