ORA-600(2662)錯誤的重現和解決(一)

路途中的人2012發表於2017-07-17

前兩天同事在測試DATA GUARD的時候將主庫的ONLINE日誌意外覆蓋,造成資料庫無法開啟,採用隱含引數的方法開啟又碰到ORA-600錯誤,最後採用設定EVENTS的方式解決。

由於是在別人的機器上操作,而且很多操作都是摸索進行,因此沒有將操作記錄下來。現在打算重現一下問題並簡單記錄解決過程。

這篇首先嚐試重現問題。

 

現有環境,Oracle10.2.0.3 for windows資料庫。為了完全模擬問題的方式情況,首先建立STANDBY資料庫。

在建立STANDBY資料庫之前,首先對資料庫進行備份。這樣一旦測試出現問題,導致被損壞的資料庫無法恢復,也可以透過這個備份來恢復資料庫。

下面為建立STANDBY資料庫進行準備,這裡只列出操作就不詳細描述了:

SQL> ALTER DATABASE FORCE LOGGING;

資料庫已更改。

SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ytk,ytks)';

系統已更改。

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=E:\oracle\oradata\YTK\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ytk';

系統已更改。

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=ytks LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ytks';

系統已更改。

SQL> ALTER SYSTEM SET FAL_SERVER=ytks;

系統已更改。

SQL> ALTER SYSTEM SET FAL_CLIENT=ytk;

系統已更改。

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

系統已更改。

建立PFILE

SQL> CREATE PFILE='E:\ORACLE\ORADATA\YTKS\INITYTKS.ORA' FROM SPFILE;

檔案已建立。

新增並修改下面的初始化引數:

*.audit_file_dest='E:\oracle\admin\ytks\adump'
*.background_dump_dest='E:\oracle\admin\ytks\bdump'
*.control_files='E:\ORACLE\ORADATA\YTK_S\CONTROLFILE\CONTROL01.CTL'
*.core_dump_dest='E:\oracle\admin\ytks\cdump'
*.user_dump_dest='E:\oracle\admin\ytks\udump'
*.fal_client='ytks'
*.fal_server='ytk'
*.log_archive_dest_1='LOCATION=E:\oracle\oradata\ytks\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ytks'
*.log_archive_dest_2='SERVICE=ytk LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ytk'
standby_archive_dest='LOCATION=E:\oracle\oradata\ytks\archivelog'
db_unique_name='ytks'
lock_name_space='ytks'
db_file_name_convert=('E:\oracle\oradata\ytk', 'E:\oracle\oradata\ytks')
log_file_name_convert=('E:\oradle\oradata\ytk', 'E:\oracle\oradata\ytks')

需要注意一點,LOG_FILE_NAME_CONVERT引數設定有誤,E:\oracle被寫成了E:\oraDle。這個錯誤意味著LOG_FILE_NAME_CONVERT引數失去了意義。且由於PRIMARY資料庫和STANDBY資料庫處於同一臺伺服器上,這樣STANDBY資料庫在啟動RESETLOG後,會將PRIMARY資料庫的LOGFILE清除掉。

關閉資料庫,採用冷備份的方式,將資料檔案複製到STANDBY資料庫的所在目錄:

SQL> SHUTDOWN IMMEDIATE
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。

E:\>COPY E:\ORACLE\ORADATA\YTK\DATAFILE\* E:\ORACLE\ORADATA\YTKS\DATAFILE
E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSAUX_1TDY3TRF_.DBF
E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSTEM_1TDY2CXS_.DBF
E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_TEMP_1TDY49L2_.TMP
E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_UNDOTBS1_1TDY3GNZ_.DBF
E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_USERS_1TDY4JMK_.DBF
E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_YANGTK_1THCKSRW_.DBF
E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_YANGTK_22MWCD5C_.DBF
E:\ORACLE\ORADATA\YTK\DATAFILE\TEST01.DBF
已複製         8 個檔案。

E:\>COPY E:\ORACLE\ORADATA\YTK\ONLINELOG\* E:\ORACLE\ORADATA\YTKS\ONLINELOG
E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO01.LOG
E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG
E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO03.LOG
已複製         3 個檔案。

啟動PRIMARY資料庫建立STANDBY CONTROLFILE

SQL> STARTUP
ORACLE
例程已經啟動。

Total System Global Area  251658240 bytes
Fixed Size                  1290012 bytes
Variable Size             163578084 bytes
Database Buffers           79691776 bytes
Redo Buffers                7098368 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'E:\ORACLE\ORADATA\YTKS\CONTROLFILE\CONTROL01.CTL';

資料庫已更改。

E:\>COPY E:\ORACLE\10.2\DATABASE\PWDYTK.ORA E:\ORACLE\10.2\DATABASE\PWDYTKS.ORA
已複製         1 個檔案。

複製資料庫密碼檔案後,下面建立ORACLE的服務:

E:\>ORADIM -NEW -SID YTKS -STARTMODE MANUAL
例項已建立。

編輯tnsnames.oralistener.ora檔案,新增STANDBY資料庫資訊,並重啟監聽。

下面啟動STANDBY資料庫到MOUNT狀態:

SQL> CONN /@YTKS AS SYSDBA
已連線到空閒例程。
SQL> CREATE SPFILE FROM PFILE='E:\ORACLE\ORADATA\YTKS\INITYTKS.ORA';

檔案已建立。

SQL> STARTUP MOUNT
ORACLE
例程已經啟動。

Total System Global Area  251658240 bytes
Fixed Size                  1290012 bytes
Variable Size              83886308 bytes
Database Buffers          159383552 bytes
Redo Buffers                7098368 bytes
資料庫裝載完畢。

由於引數LOG_FILE_NAME_CONVERT設定有誤,將STANDBY資料庫置於接受歸檔狀態時,後覆蓋PRIMARY資料庫的日誌,從而導致PRIMARY資料庫出現錯誤。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

資料庫已更改。

下面關閉PRIMARY資料庫就會出現錯誤:

SQL> CONN /@YTK AS SYSDBA
已連線。
SQL> SHUTDOWN IMMEDIATE
ORA-03113:
通訊通道的檔案結束

SQL> CONN /@YTK AS SYSDBA
已連線到空閒例程。
SQL> STARTUP
ORA-03113:
通訊通道的檔案結束

檢查alert檔案已經出現了錯誤:

Errors in file e:\oracle\admin\ytk\bdump\ytk_lgwr_3588.trc:
ORA-00314:
日誌 1 (用於執行緒 1) 要求的序號 1333 0 不匹配
ORA-00312:
聯機日誌 1 執行緒 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO01.LOG'

Tue Dec 11 16:14:05 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_lgwr_3588.trc:
ORA-00314:
日誌 1 (用於執行緒 1) 要求的序號 1333 0 不匹配
ORA-00312:
聯機日誌 1 執行緒 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO01.LOG'

Tue Dec 11 16:14:05 2007
LGWR: terminating instance due to error 314
Instance terminated by LGWR, pid = 3588

至此,資料庫問題已經模擬出來。下一篇會介紹問題的解決。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2142149/,如需轉載,請註明出處,否則將追究法律責任。

相關文章