SWITCHOVER RAC資料庫出現ORA-600(kcctrdf_2)錯誤
Oracle10g RAC環境在執行SWITCHOVER操作過程中出現ORA-600(kcctrdf_2)錯誤。
將RAC環境資料庫執行ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL DATABASE操作後,試圖將當前的物理STANDBY資料庫切換為PRIMARY資料庫時,出現下面的錯誤:
SQL> CONN SYS/TEST@TESTRAC_STANDBY AS SYSDBA已連線。
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY
*第 1 行出現錯誤:
ORA-00600: 內部錯誤程式碼, 引數: [kcctrdf_2], [/export/home/oracle/oradata/testrac/group_1.259.6185911
[], [], []
從報錯的trace檔案中,可以看到下面的內容:
105E36DF0 5741524E 494E4721 20434C45 4152494E [WARNING! CLEARIN]
105E36E00 47205245 444F204C 4F472057 48494348 [G REDO LOG WHICH]
105E36E10 20484153 204E4F54 20424545 4E204152 [ HAS NOT BEEN AR]
105E36E20 43484956 45442E20 4241434B 55505320 [CHIVED. BACKUPS ]
105E36E30 54414B45 4E0A2020 20204245 464F5245 [TAKEN. BEFORE]
105E36E40 20257320 28434841 4E474520 25732920 [ %s (CHANGE %s) ]
105E36E50 43414E4E 4F542042 45205553 45442046 [CANNOT BE USED F]
105E36E60 4F522052 45434F56 4552592E 0A000000 [OR RECOVERY.....]
105E36E70 5741524E 494E4721 20434C45 4152494E [WARNING! CLEARIN]
105E36E80 47205245 444F204C 4F47204E 45454445 [G REDO LOG NEEDE]
105E36E90 4420464F 52205245 434F5645 5259204F [D FOR RECOVERY O]
105E36EA0 46205448 45204F46 464C494E 45204441 [F THE OFFLINE DA]
結合在metalink上查詢的資訊,基本上可以斷定問題是由於RECOVERY AREA造成的。關於metalink上面的bug描述,可以參考Bug No. 2848315。
Metalink雖然指出了問題和RECOVERY AREA有關,但是並沒有給出相應的解決方法,而且Oracle目前的版本還沒有fixed這個bug,目前也沒有任何補丁可以解決這個bug。看來一切都只能靠自己了。
既然錯誤是由於FLASHBACK RECOVERY AREA引起的,那麼嘗試將其DISABLE。在此之前,需要將主庫和從庫的狀態恢復:
SQL> CONN SYS/TEST@TESTRAC2 AS SYSDBA已連線。
SQL> SHUTDOWN IMMEDIATE
ORA-01507: 未裝載資料庫
ORACLE 例程已經關閉。
SQL> STARTUP MOUNT
ORACLE 例程已經啟動。
Total System Global Area 2147483648 bytes
Fixed Size 2031480 bytes
Variable Size 520093832 bytes
Database Buffers 1610612736 bytes
Redo Buffers 14745600 bytes資料庫裝載完畢。
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
資料庫已更改。
SQL> ALTER DATABASE OPEN;
資料庫已更改。
SQL> SELECT DATABASE_ROLE FROM V$DATABASE;
DATABASE_ROLE
----------------
PRIMARY
下面將從庫恢復:
SQL> CONN SYS/TEST@TESTRAC_STANDBY AS SYSDBA已連線。
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
RECOVERY NEEDED
SQL> SHUTDOWN IMMEDIATE
ORA-01109: 資料庫未開啟
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> STARTUP MOUNT
ORACLE 例程已經啟動。
Total System Global Area 2147483648 bytes
Fixed Size 2031480 bytes
Variable Size 520093832 bytes
Database Buffers 1610612736 bytes
Redo Buffers 14745600 bytes資料庫裝載完畢。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
資料庫已更改。
SQL> SELECT DATABASE_ROLE, SWITCHOVER_STATUS FROM V$DATABASE;
DATABASE_ROLE SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY SESSIONS ACTIVE
至此DATA GUARD環境恢復。
下面DISABLE主庫的RECOVERY AREA:
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '';
系統已更改。
SQL> SHOW PARAMETER DB_RECOVERY
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 5G
再次嘗試SWITCHOVER切換錯誤依舊。
仔細檢視從庫上的錯誤資訊,ORA-600錯誤的第一個引數是一個日誌檔名,而這個檔案正是RECOVERY AREA的日誌:
SQL> SELECT GROUP#, TYPE, IS_RECOVERY_DEST_FILE FROM V$LOGFILE
2 WHERE MEMBER LIKE '%259%';
GROUP# TYPE IS_
---------- ------- ---
1 ONLINE YES
看來解決問題的方向並沒有錯,現在需要做的是去掉這些日誌。
返回主庫,意外發現一個例項的RECOVERY AREA日誌已經去掉,而另一個例項的依然存在,這可能是由於修改了初始化引數後,重啟過一個例項造成的。
SQL> CONN SYS/TEST@TESTRAC2 AS SYSDBA已連線。
SQL> SELECT * FROM V$LOG;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 595 536870912 1 YES INACTIVE 5704643426 15-9月 -07
2 1 596 536870912 1 YES ACTIVE 5704643428 15-9月 -07
3 2 366 536870912 2 YES INACTIVE 5704637718 15-9月 -07
4 2 367 536870912 2 YES CLEARING_CURRENT 5704643430 15-9月 -07
SQL> COL MEMBER FORMAT A60
SQL> SELECT * FROM V$LOGFILE;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ------------------------------------------------------------ ---
1 ONLINE +DISK/testrac/onlinelog/group_1.258.633394455 NO
2 ONLINE +DISK/testrac/onlinelog/group_2.260.633394461 NO
3 ONLINE +DISK/testrac/onlinelog/group_3.269.633319259 NO
3 ONLINE +DISK/testrac/onlinelog/group_3.268.633319267 YES
4 ONLINE +DISK/testrac/onlinelog/group_4.271.633319273 NO
4 ONLINE +DISK/testrac/onlinelog/group_4.270.633319281 YES
已選擇6行。
於是重啟另外一個例項:
SQL> CONN SYS/TEST@TESTRAC2 AS SYSDBA已連線。
SQL> SHUTDOWN IMMEDIATE資料庫已經關閉。已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> STARTUP
ORACLE 例程已經啟動。
Total System Global Area 2147483648 bytes
Fixed Size 2031480 bytes
Variable Size 520093832 bytes
Database Buffers 1610612736 bytes
Redo Buffers 14745600 bytes資料庫裝載完畢。資料庫已經開啟。
SQL> SELECT * FROM V$LOGFILE;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
1 ONLINE +DISK/testrac/onlinelog/group_1.258.633398893 NO
2 ONLINE +DISK/testrac/onlinelog/group_2.260.633398899 NO
3 ONLINE +DISK/testrac/onlinelog/group_3.268.633398905 NO
4 ONLINE +DISK/testrac/onlinelog/group_4.270.633398913 NO
現在主庫的LOGFILE已經去掉了RECOVERY AREA部分,但是從庫仍然無法去掉,無論是透過切換日誌的方式,還是試圖在從庫直接刪除都行不通:
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
系統已更改。
SQL> CONN SYS/TEST@TESTRAC_STANDBY AS SYSDBA已連線。
SQL> SELECT * FROM V$LOG;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 599 536870912 2 YES CLEARING_CURRENT 5704644725 16-9月 -07
2 1 598 536870912 2 YES CLEARING 5704643891 16-9月 -07
3 2 371 536870912 2 YES CLEARING_CURRENT 5704644721 16-9月 -07
4 2 370 536870912 2 YES CLEARING 5704644494 16-9月 -07
SQL> COL MEMBER FORMAT A60
SQL> SELECT * FROM V$LOGFILE;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ------------------------------------------------------------ ---
1 ONLINE /export/home/oracle/oradata/testrac/group_1.258.618591139 NO
1 ONLINE /export/home/oracle/oradata/testrac//group_1.259.618591145 YES
2 ONLINE /export/home/oracle/oradata/testrac/group_2.260.618591151 NO
2 ONLINE /export/home/oracle/oradata/testrac//group_2.261.618591159 YES
3 ONLINE /export/home/oracle/oradata/testrac/group_3.268.618595573 NO
3 ONLINE /export/home/oracle/oradata/testrac//group_3.269.618595581 YES
4 ONLINE /export/home/oracle/oradata/testrac/group_4.270.618595587 NO
4 ONLINE /export/home/oracle/oradata/testrac//group_4.271.618595595 YES
已選擇8行。
SQL> ALTER DATABASE DROP LOGFILE
2 MEMBER '/export/home/oracle/oradata/testrac//group_1.259.618591145';
ALTER DATABASE DROP LOGFILE
*第 1 行出現錯誤:
ORA-01156: 進行中的恢復可能需要訪問檔案
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
資料庫已更改。
SQL> ALTER DATABASE DROP LOGFILE
2 MEMBER '/export/home/oracle/oradata/testrac//group_1.259.618591145';
ALTER DATABASE DROP LOGFILE
*第 1 行出現錯誤:
ORA-00360: 非日誌檔案成員: /export/home/oracle/oradata/testrac//group_1.259.618591145
現在的主要問題在於從庫的RECOVERY AREA日誌,雖然不需要日誌,但是還無法從系統中去除掉。
既然這個日誌是系統不需要的,準備嘗試透過重建從庫的控制檔案來去掉這些日誌:
首先備份當前的從庫的控制檔案:
SQL> SHOW PARAMETER CONTROL_FILES
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /export/home/oracle/oradata/te
strac/current.256.618591133, /
export/home/oracle/oradata/tes
trac/current.257.618591137
SQL> SHUTDOWN IMMEDIATE
ORA-01109: 資料庫未開啟
已經解除安裝資料庫。
ORACLE 例程已經關閉。
關閉資料庫在作業系統級備份這兩個檔案。
SQL> CONN SYS/TEST@TESTRAC2 AS SYSDBA已連線。
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE
2 AS '/export/home/oracle/controlfile.ctl';
資料庫已更改。
將這個控制檔案複製到從庫站點,並覆蓋從庫的控制檔案。然後重新啟動STANDBY資料庫:
SQL> CONN SYS/TEST@TESTRAC_STANDBY AS SYSDBA已連線到空閒例程。
SQL> STARTUP MOUNT
ORACLE 例程已經啟動。
Total System Global Area 2147483648 bytes
Fixed Size 2031480 bytes
Variable Size 520093832 bytes
Database Buffers 1610612736 bytes
Redo Buffers 14745600 bytes資料庫裝載完畢。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
資料庫已更改。
SQL> SELECT * FROM V$LOGFILE;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ------------------------------------------------------------ ---
1 ONLINE /export/home/oracle/oradata/testrac/group_1.258.633402209 NO
2 ONLINE /export/home/oracle/oradata/testrac/group_2.260.633402215 NO
3 ONLINE /export/home/oracle/oradata/testrac/group_3.268.633402223 NO
4 ONLINE /export/home/oracle/oradata/testrac/group_4.270.633402229 NO
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
問題終於解決,下面再次嘗試切換STANDBY資料庫,600錯誤消失。
SQL> CONN SYS/TEST@TESTRAC2 AS SYSDBA已連線。
SQL> SHUTDOWN IMMEDIATE資料庫已經關閉。已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> CONN SYS/TEST@TESTRAC1 AS SYSDBA已連線。
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
資料庫已更改。
SQL> SHUTDOWN IMMEDIATE
ORA-01507: 未裝載資料庫
ORACLE 例程已經關閉。
SQL> CONN SYS/TEST@TESTRAC_STANDBY AS SYSDBA已連線。
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
資料庫已更改。
SQL> ALTER DATABASE OPEN;
資料庫已更改。
SQL> CONN SYS/TEST@TESTRAC1 AS SYSDBA已連線到空閒例程。
SQL> STARTUP MOUNT
ORACLE 例程已經啟動。
Total System Global Area 2147483648 bytes
Fixed Size 2031480 bytes
Variable Size 956301448 bytes
Database Buffers 1174405120 bytes
Redo Buffers 14745600 bytes資料庫裝載完畢。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
資料庫已更改。
目前這個方法是這個bug的唯一解決方法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69516/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SWITCHOVER RAC資料庫出現ORA-1093資料庫
- 10205關閉資料庫出現ORA-600(kjccgmb:1)錯誤資料庫
- oracle 10g rac +aix 6.1+hacmp 5.5 建庫出現ORA-600錯誤Oracle 10gAIACM
- 資料泵匯入時出現ORA-600(klaprs_11)錯誤
- ORACLE 使用DBCA安裝資料庫出現錯誤Oracle資料庫
- 資料庫啟動出現ORA-27037錯誤資料庫
- 關閉資料庫出現ORA-21779錯誤資料庫
- solaris上建立oracle資料庫出現:out of memory 錯誤Oracle資料庫
- 啟動資料庫出現ORA-9925錯誤資料庫
- SQL Server資料庫出現邏輯錯誤的資料恢復SQLServer資料庫資料恢復
- 資料庫startup時發生ora-600錯誤的傻瓜手冊資料庫
- 9.2 STANDBY資料庫出現ORA-16009錯誤資料庫
- 10.2.0.1資料庫exp出現Ora-07445錯誤資料庫
- 啟動資料庫出現ORA-27123錯誤資料庫
- 資料庫啟動出現ORA-27102錯誤資料庫
- 資料泵匯出碰到ORA-600(kcbz_check_objd_typ_3)錯誤OBJ
- sql出現結果集錯誤以及出現ora-600或者ora-7445錯誤的解決方法思路SQL
- DBCA建庫導致已有資料庫出現ORA-27140錯誤資料庫
- Oracle9i mount資料庫出現ORA-32700錯誤Oracle資料庫
- AIX系統啟動資料庫出現ORA-27504錯誤AI資料庫
- sqlplus直連資料庫出現ORA-27504錯誤SQL資料庫
- 做standby 資料庫時,出現ORA-12560 錯誤:資料庫
- 資料庫啟動出現ORA-30036錯誤資料庫
- 訪問資料庫出現Object reference not set to an instance of an object錯誤資料庫Object
- ORA-600(kffmXpGet)錯誤
- Oracle資料庫關閉時,出現ORA-03113錯誤Oracle資料庫
- ASM上恢復STANDBY資料庫出現ORA-15173錯誤ASM資料庫
- 連線資料庫時出現ORA-12514錯誤資料庫
- DBCA建庫出現CHMOD NOT FOUND錯誤
- Linux上資料庫啟動出現ORA-27125錯誤Linux資料庫
- 客戶資料庫升級後出現ORA-30004錯誤資料庫
- STANDBY資料庫出ORA-1009錯誤資料庫
- 資料庫關閉Hang住,出現錯誤PMON failed to acquire latch, see PMON dump資料庫AIUI
- 出現ORA-01552錯誤別忘了查詢資料庫狀態資料庫
- ORA-600(kcbgcur_1)錯誤GC
- ORA-600 [ttcgcshnd-1 ]錯誤GC
- ORA-600(kclgclk_7)錯誤GC
- ORA-600(kcbnew_3)錯誤