ORA-600(2662)錯誤的重現和解決(二)
前兩天同事在測試DATA GUARD的時候將主庫的ONLINE日誌意外覆蓋,造成資料庫無法開啟,採用隱含引數的方法開啟又碰到ORA-600錯誤,最後採用設定EVENTS的方式解決。
由於是在別人的機器上操作,而且很多操作都是摸索進行,因此沒有將操作記錄下來。現在打算重現一下問題並簡單記錄解決過程。
上篇已經描述了問題的產生步驟,下面描述解決這個問題的方法。
ORA-600(2662)錯誤的重現和解決(一):http://yangtingkun.itpub.net/post/468/464682
產生問題的根源在於啟動STANDBY資料庫的時候,覆蓋了PRIMARY資料庫的線上LOGFILE。
嘗試恢復資料庫:
SQL> CONN /@YTK AS SYSDBA
已連線到空閒例程。
SQL> STARTUP MOUNT
ORACLE 例程已經啟動。
Total System Global Area 251658240 bytes
Fixed Size 1290012 bytes
Variable Size 167772388 bytes
Database Buffers 75497472 bytes
Redo Buffers 7098368 bytes
資料庫裝載完畢。
SQL> RECOVER DATABASE UNTIL CANCEL;
ORA-00279: 更改 5706539056 (在 12/11/2007 15:49:26 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ORACLE\ORADATA\YTK\ARCHIVELOG\ARC01333_0577472831.001
ORA-00280: 更改 5706539056 (用於執行緒 1) 在序列 #1333 中
指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1:
'E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSTEM_1TDY2CXS_.DBF'
ORA-01112: 未啟動介質恢復
看來資料庫已經無法透過正常方式啟動了。這時候最好的辦法是透過資料庫的備份來進行恢復,透過不完全恢復來恢復資料庫。
但是同事當時沒有資料庫的備份,那麼就只能透過非常規的方式開啟了。
由於丟失線上日誌,所以只能透過新增隱含引數的方式:
SQL> ALTER SYSTEM SET "_allow_resetlogs_corruption" = TRUE SCOPE = SPFILE;
系統已更改。
SQL> SHUTDOWN IMMEDIATE
ORA-01109: 資料庫未開啟
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> STARTUP MOUNT
ORACLE 例程已經啟動。
Total System Global Area 251658240 bytes
Fixed Size 1290012 bytes
Variable Size 171966692 bytes
Database Buffers 71303168 bytes
Redo Buffers 7098368 bytes
資料庫裝載完畢。
SQL> RECOVER DATABASE UNTIL CANCEL
ORA-00279: 更改 5706539056 (在 12/11/2007 15:49:26 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ORACLE\ORADATA\YTK\ARCHIVELOG\ARC01333_0577472831.001
ORA-00280: 更改 5706539056 (用於執行緒 1) 在序列 #1333 中
指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1:
'E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSTEM_1TDY2CXS_.DBF'
ORA-01112: 未啟動介質恢復
SQL> ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
第 1 行出現錯誤:
ORA-01092: ORACLE 例項終止。強制斷開連線
檢查alert檔案:
ALTER DATABASE MOUNT
Tue Dec 11 17:16:19 2007
Setting recovery target incarnation to 1
Tue Dec 11 17:16:19 2007
Successful mount of redo thread 1, with mount id 160883103
Tue Dec 11 17:16:19 2007
Database mounted in Exclusive Mode
Completed: ALTER DATABASE MOUNT
Tue Dec 11 17:16:46 2007
ALTER DATABASE RECOVER DATABASE UNTIL CANCEL
Tue Dec 11 17:16:46 2007
Media Recovery Start
parallel recovery started with 2 processes
ORA-279 signalled during: ALTER DATABASE RECOVER DATABASE UNTIL CANCEL ...
Tue Dec 11 17:16:49 2007
ALTER DATABASE RECOVER CANCEL
ORA-1547 signalled during: ALTER DATABASE RECOVER CANCEL ...
Tue Dec 11 17:16:51 2007
ALTER DATABASE RECOVER CANCEL
ORA-1112 signalled during: ALTER DATABASE RECOVER CANCEL ...
Tue Dec 11 17:17:00 2007
ALTER DATABASE OPEN RESETLOGS
Tue Dec 11 17:17:01 2007
RESETLOGS is being done without consistancy checks. This may result
in a corrupted database. The database should be recreated.
Tue Dec 11 17:17:01 2007
Errors in file e:\oracle\admin\ytk\udump\ytk_ora_2412.trc:
ORA-00265: 要求例項恢復, 無法設定 ARCHIVELOG 模式
Archive all online redo logfiles failed:265
RESETLOGS after incomplete recovery UNTIL CHANGE 5706539056
Resetting resetlogs activation ID 97264511 (0x5cc237f)
Online log E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO01.LOG: Thread 1 Group 1 was previously cleared
Online log E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG: Thread 1 Group 2 was previously cleared
Online log E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO03.LOG: Thread 1 Group 3 was previously cleared
Tue Dec 11 17:17:01 2007
Setting recovery target incarnation to 2
Tue Dec 11 17:17:02 2007
Assigning activation ID 160883103 (0x996e19f)
LGWR: STARTING ARCH PROCESSES
ARC0 started with pid=18, OS id=2904
Tue Dec 11 17:17:02 2007
ARC0: Archival started
ARC1: Archival started
ARC1 started with pid=19, OS id=2584
Tue Dec 11 17:17:03 2007
LGWR: STARTING ARCH PROCESSES COMPLETE
LNS1 started with pid=20, OS id=3328
Tue Dec 11 17:17:06 2007
Thread 1 advanced to log sequence 2
Thread 1 opened at log sequence 2
Current log# 2 seq# 2 mem# 0: E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG
Successful open of redo thread 1
Tue Dec 11 17:17:06 2007
ARC1: Becoming the 'no FAL' ARCH
ARC1: Becoming the 'no SRL' ARCH
Tue Dec 11 17:17:06 2007
ARC0: Becoming the heartbeat ARCH
Tue Dec 11 17:17:06 2007
ARC1: LGWR is scheduled to archive destination LOG_ARCHIVE_DEST_2 after log switch
ARC1: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (270)
ARC1: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
Tue Dec 11 17:17:07 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc1_2584.trc:
ORA-00270: 建立歸檔日誌 時出錯
ARC1: Error 270 Closing archive log file 'ytks'
Tue Dec 11 17:17:07 2007
******************************************************************
LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2
******************************************************************
Tue Dec 11 17:17:07 2007
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Tue Dec 11 17:17:07 2007
SMON: enabling cache recovery
Tue Dec 11 17:17:08 2007
Errors in file e:\oracle\admin\ytk\udump\ytk_ora_2412.trc:
ORA-00600: 內部錯誤程式碼, 引數: [2662], [1], [1411571767], [1], [1411576360], [4194309], [], []
Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\udump\ytk_ora_2412.trc:
ORA-00600: 內部錯誤程式碼, 引數: [2662], [1], [1411571767], [1], [1411576360], [4194309], [], []
Tue Dec 11 17:17:11 2007
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600
Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_lns1_3328.trc:
ORA-00600: 內部錯誤程式碼, 引數: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_p001_1936.trc:
ORA-00600: 內部錯誤程式碼, 引數: [15784], [600], [], [], [], [], [], []
ORA-00600: 內部錯誤程式碼, 引數: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_p000_576.trc:
ORA-00600: 內部錯誤程式碼, 引數: [15784], [600], [], [], [], [], [], []
ORA-00600: 內部錯誤程式碼, 引數: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_pmon_3424.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_psp0_1720.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_mman_3256.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_lgwr_3528.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_ckpt_2696.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_dbw0_2148.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:14 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_reco_1928.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []
Tue Dec 11 17:17:14 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_smon_1940.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []
Instance terminated by USER, pid = 2412
ORA-1092 signalled during: ALTER DATABASE OPEN RESETLOGS...
現在出現了前文提到的ORA-600[2662]錯誤。
查詢metalink,Oracle給出了兩種解決方法,如果600的2662錯誤中第三個引數和第五個引數差別很小,那麼就可以透過多次開啟關閉資料庫例項的方式來增加SCN的值。
不過這種方式每次啟動只SCN只增加1,重啟三次系統:
ORA-00600: 內部錯誤程式碼, 引數: [2662], [1], [1411571770], [1], [1411576360], [4194309], [], []
而目前的SCN和期望的SCN還相差4000多,顯然透過重啟的方法不現實。
Oracle給出的第二種方式是透過設定EVENTS來提高Oracle的CURRENT SCN,這個方法的前提就是設定_allow_resetlogs_corruption隱含引數為true:
SQL> CONN /@YTK AS SYSDBA
已連線到空閒例程。
SQL> STARTUP MOUNT
ORACLE 例程已經啟動。
Total System Global Area 251658240 bytes
Fixed Size 1290012 bytes
Variable Size 209715428 bytes
Database Buffers 33554432 bytes
Redo Buffers 7098368 bytes
資料庫裝載完畢。
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';
會話已更改。
SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
第 1 行出現錯誤:
ORA-00314: 日誌 2 (用於執行緒 1) 要求的序號 2 與 0 不匹配
ORA-00312: 聯機日誌 2 執行緒 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG'
資料庫並沒有開啟,而是報錯ORA-314。這個錯誤倒是很容易理解,由於目前的日誌被STANDBY資料庫的重置歸檔所覆蓋,造成了這個期望的日誌和當前的不滿足。
下面將三個連線日誌改名,使PRIMARY資料庫找不到聯機日誌:
E:\>CD E:\ORACLE\ORADATA\YTK\ONLINELOG
E:\oracle\oradata\YTK\ONLINELOG>MOVE REDO01.LOG REDO01.LOG.BAK
E:\oracle\oradata\YTK\ONLINELOG>MOVE REDO02.LOG REDO02.LOG.BAK
E:\oracle\oradata\YTK\ONLINELOG>MOVE REDO03.LOG REDO03.LOG.BAK
再次嘗試開啟:
SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
第 1 行出現錯誤:
ORA-00313: 無法開啟日誌組 2 (用於執行緒 1) 的成員
ORA-00312: 聯機日誌 2 執行緒 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
報錯找不到檔案,透過RESETLOGS方式建立新的日誌:
SQL> RECOVER DATABASE UNTIL CANCEL
ORA-00279: 更改 5706539077 (在 12/12/2007 14:17:14 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ORACLE\ORADATA\YTK\ARCHIVELOG\ARC00002_0641139429.001
ORA-00280: 更改 5706539077 (用於執行緒 1) 在序列 #2 中
指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1:
'E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSTEM_1TDY2CXS_.DBF'
ORA-01112: 未啟動介質恢復
SQL> ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
第 1 行出現錯誤:
ORA-01092: ORACLE 例項終止。強制斷開連線
再次嘗試設定EVENTS:
SQL> CONN /@YTK AS SYSDBA
已連線到空閒例程。
SQL> STARTUP MOUNT
ORACLE 例程已經啟動。
Total System Global Area 251658240 bytes
Fixed Size 1290012 bytes
Variable Size 218104036 bytes
Database Buffers 25165824 bytes
Redo Buffers 7098368 bytes
資料庫裝載完畢。
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';
會話已更改。
SQL> ALTER DATABASE OPEN;
ERROR:
ORA-03113: 通訊通道的檔案結束
錯誤和剛才已經有區別了,看來有開啟的希望,檢查alert檔案發現:
ORA-00316: ?? 2 (???? 1) ?????? 0 ??????
ORA-00312: ???? 2 ?? 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG'
Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_lgwr_3712.trc:
ORA-00316: ?? 2 (???? 1) ?????? 0 ??????
ORA-00312: ???? 2 ?? 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG'
Wed Dec 12 14:45:55 2007
LGWR: terminating instance due to error 316
Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_lns1_3508.trc:
ORA-00316: 日誌 (用於執行緒 ) 頭部中的型別 不是日誌檔案
Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc1_536.trc:
ORA-00316: 日誌 (用於執行緒 ) 頭部中的型別 不是日誌檔案
Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc1_536.trc:
ORA-00316: 日誌 (用於執行緒 ) 頭部中的型別 不是日誌檔案
Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc1_536.trc:
ORA-00316: 日誌 (用於執行緒 ) 頭部中的型別 不是日誌檔案
Wed Dec 12 14:45:55 2007
Master background archival failure: 316
Wed Dec 12 14:45:56 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc0_3656.trc:
ORA-00316: 日誌 (用於執行緒 ) 頭部中的型別 不是日誌檔案
Wed Dec 12 14:45:56 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc0_3656.trc:
ORA-00316: 日誌 (用於執行緒 ) 頭部中的型別 不是日誌檔案
Wed Dec 12 14:45:56 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc0_3656.trc:
ORA-00316: 日誌 (用於執行緒 ) 頭部中的型別 不是日誌檔案
Wed Dec 12 14:45:56 2007
Master background archival failure: 316
Wed Dec 12 14:45:56 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_dbw0_3716.trc:
ORA-00316: ?? (???? ) ?????? ??????
Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_pmon_3608.trc:
ORA-00316: ?? (???? ) ?????? ??????
Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_psp0_1816.trc:
ORA-00316: ?? (???? ) ?????? ??????
Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_mman_2304.trc:
ORA-00316: ?? (???? ) ?????? ??????
Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_reco_3408.trc:
ORA-00316: ?? (???? ) ?????? ??????
Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_ckpt_2296.trc:
ORA-00316: ?? (???? ) ?????? ??????
Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_smon_3416.trc:
ORA-00316: ?? (???? ) ?????? ??????
Wed Dec 12 14:45:59 2007
Instance terminated by LGWR, pid = 3712
報了一堆的ORA-316和ORA-312錯誤。為了避免現在仍然啟動的STANDBY資料庫干擾,關閉STANDBY資料庫,再次嘗試以RESETLOGS方式開啟資料庫:
SQL> CONN /@YTKS AS SYSDBA
已連線。
SQL> SHUTDOWN IMMEDIATE
ORA-01109: 資料庫未開啟
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> CONN /@YTK AS SYSDBA
已連線到空閒例程。
SQL> STARTUP MOUNT
ORACLE 例程已經啟動。
Total System Global Area 251658240 bytes
Fixed Size 1290012 bytes
Variable Size 222298340 bytes
Database Buffers 20971520 bytes
Redo Buffers 7098368 bytes
資料庫裝載完畢。
SQL> RECOVER DATABASE UNTIL CANCEL
完成介質恢復。
SQL> ALTER DATABASE OPEN RESETLOGS;
資料庫已更改。
資料庫終於開啟。下面要做的就是去掉隱含引數,再次重啟,驗證是否可以啟動。
SQL> ALTER SYSTEM RESET "_allow_resetlogs_corruption" SCOPE = SPFILE SID = '*';
系統已更改。
SQL> SHUTDOWN IMMEDIATE
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> STARTUP
ORACLE 例程已經啟動。
Total System Global Area 251658240 bytes
Fixed Size 1290012 bytes
Variable Size 218104036 bytes
Database Buffers 25165824 bytes
Redo Buffers 7098368 bytes
資料庫裝載完畢。
資料庫已經開啟。
資料庫已經正常開啟,但是由於使用_allow_resetlogs_corruption方式開啟,會造成資料的丟失,且資料庫的狀態不一致。因此,這種情況下Oracle建議透過EXP方式匯出資料庫。重建新資料庫後,再匯入。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2142150/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORA-600(2662)錯誤的重現和解決(一)
- 深入分析ora-600 2662錯誤系列一
- 解決ORA-600(16164)錯誤的過程(二)
- 伺服器出現500錯誤的原因和解決辦法伺服器
- ORA-600 [2662]故障處理
- ORA-600(17069)錯誤的解決過程
- sql出現結果集錯誤以及出現ora-600或者ora-7445錯誤的解決方法思路SQL
- ORA-04031錯誤分析和解決
- ORA-600(kffmXpGet)錯誤
- ora-371錯誤的原因和解決方法
- 雲伺服器出現502錯誤的原因分析和解決方案伺服器
- 解決ORA-600(16164)錯誤的過程(一)
- 解決掉電導致的ORA-600(4194)錯誤
- 執行create table as 報ora-600的錯誤的解決方案
- 表空間正在熱備份時關閉例項重啟報錯的重現和解決
- php7 使用 phpunit 部分錯誤和解決方案PHP
- BlueHost SSH連線常見錯誤和解決方法
- SAXParseException的錯誤解決之二Exception
- ORA-600(kcbgcur_1)錯誤GC
- ORA-600 [ttcgcshnd-1 ]錯誤GC
- ORA-600(kclgclk_7)錯誤GC
- ORA-600(kcbnew_3)錯誤
- ORA-600(qersqCloseRem-2)錯誤REM
- ORA-600(qctopn1)錯誤
- ORA-600(kcblasm_1)錯誤ASM
- ORA-600(qkaffsindex5)錯誤Index
- ORA-600(kghuclientasp_03)錯誤client
- ORA-600(ttcgcshnd-2)錯誤GC
- ORA-600(kolaslGetLength-1)錯誤
- ORA-600(kghfremptyds)和ORA-600(kghasp1)錯誤REM
- ora-600內部錯誤的型別型別
- ORA-01502錯誤成因和解決方法
- Nginx502錯誤原因和解決方法總結Nginx
- 5個常見可用性錯誤和解決方案
- ORA-600[4000]/[4097]錯誤的處理
- ORA-600(kssadd: null parent)錯誤Null
- ORA-600(504)(row cache objects)錯誤Object
- ORA-600(ktrgcm_3)錯誤GC