一個系統崩潰造成Oracle數據庫無法啟動的恢復實例
筆者在打開Oracle數據庫準備做東西得時候,突然電腦藍屏,系統崩潰了。重啟后,啟動實例,準備連接Oracle數據庫繼續使用,卻發現無法連接,一直報:
- SQL> conn system/test@test
- ERROR:
- ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務
一開始以為數據庫還沒啟動完畢,于是重啟了數據庫服務,依然不能成功連接,當時沒有懷疑數據庫有問題,因為之前也遇到過多次在打開oracle數據庫的情況下系統崩潰的情況,重啟系統后還是能正常使用的。
多次連接不上之后,才想起來去看下alter文件,一看果然出現問題了:
- 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需要恢復。
這里,因為是新庫,沒什么重要數據,所以只要數據庫能恢復就OK了。采取以下措施:
刪掉這個文件,重啟打開數據庫:
- SQL> startup mount
- ORACLE 例程已經啟動。
- Total System Global Area 167772160 bytes
- Fixed Size 1247876 bytes
- Variable Size 71304572 bytes
- Database Buffers 88080384 bytes
- Redo Buffers 7139328 bytes
- 數據庫裝載完畢。
接著執行以下代碼:
- SQL> alter database open;
- alter database open
- *
- 第 1 行出現錯誤:
- ORA-00313: 無法打開日志組 2 (用于線程 1) 的成員
- ORA-00312: 聯機日志 2 線程 1:
- ‘D:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\TEST\REDO02.LOG’
- ORA-27041: 無法打開文件
- OSD-04002: 無法打開文件
- O/S-Error: (OS 2) 系統找不到指定的文件。
- SQL> select group#,sequence#,status from v$log;
- GROUP# SEQUENCE# STATUS
- ———- ———- —————-
- 1 2 INACTIVE
- 3 1 INACTIVE
- 2 3 CURRENT
因為剛剛我刪除了當前的日志文件,所以報錯無法自動恢復打開了。
- 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 行出現錯誤:
- ORA-00361: 無法刪除最后一個日志成員
- D:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\TEST\REDO02.LOG (組 2)
無法刪除,但又不想rename log,把剛剛刪除的REDO02.LOG恢復回去。
- SQL> alter database recover;
- 數據庫已更改。
- SQL> alter database open;
- 數據庫已更改。
- SQL> shutdown immediate;
- 數據庫已經關閉。
- 已經卸載數據庫。
- ORACLE 例程已經關閉。
- SQL> startup
- ORACLE 例程已經啟動。
- Total System Global Area 167772160 bytes
- Fixed Size 1247876 bytes
- Variable Size 71304572 bytes
- Database Buffers 88080384 bytes
- Redo Buffers 7139328 bytes
- 數據庫裝載完畢。
- 數據庫已經打開。
- SQL>
這樣Oracle數據庫又可以恢復使用了。
注意:上述方法只能適用于本機的測試環境或者不重要的測試環境,在對丟失數據沒有任何擔憂的情況,千萬不要對生產庫這么操作,以免造成數據的丟失。
【編輯推薦】