在客户的数据库告警日志中发现这个错误。
错误信息如下:
Thu Sep 29 14:29:26 2011 ALTER DATABASE force logging Thu Sep 29 14:29:26 2011 ALTER DATABASE FORCE LOGGING command IS waiting FOR existingdirect writes TO finish. This may take a long TIME. Completed: ALTER DATABASE force logging LAST_CHECK Thu Sep 29 14:32:54 2011 ALTER SYSTEM SET log_archive_dest_2='service=dbnamepri lgwr async valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=dbnamepri' SCOPE=BOTH; Thu Sep 29 14:33:08 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_262532.trc: ORA-16057: DGID FROM server NOT IN DATA Guard configuration Thu Sep 29 14:33:08 2011 PING[ARC0]: Heartbeat failed TO CONNECT TO standby 'dbnamepri'. Error IS 16057. Thu Sep 29 14:34:01 2011 ALTER SYSTEM SET log_archive_config='DG_CONFIG=(dbnamedb,dbnamepri)' SCOPE=BOTH; Thu Sep 29 14:34:11 2011 ALTER SYSTEM SET fal_client='dbnamedb' SCOPE=BOTH; Thu Sep 29 14:34:12 2011 ALTER SYSTEM SET fal_server='dbnamepri' SCOPE=BOTH; Thu Sep 29 14:34:23 2011 ALTER SYSTEM SET standby_file_management='auto' SCOPE=BOTH; Thu Sep 29 14:34:33 2011 ARC0: STARTING ARCH PROCESSES Thu Sep 29 14:34:33 2011 ALTER SYSTEM SET log_archive_max_processes=3 SCOPE=BOTH; Thu Sep 29 14:34:33 2011 ALTER SYSTEM SET db_file_name_convert='/dev/','/dev/' SCOPE=SPFILE; ARC2: Archival started ARC0: STARTING ARCH PROCESSES COMPLETE ARC2 started WITH pid=83, OS id=1020046 Thu Sep 29 14:34:34 2011 ALTER SYSTEM SET log_file_name_convert='/dev/','/dev/' SCOPE=SPFILE; Thu Sep 29 14:37:28 2011 ALTER SYSTEM SET log_archive_dest_state_1='enable' SCOPE=BOTH; Thu Sep 29 14:37:29 2011 ALTER SYSTEM SET log_archive_dest_state_2='enable' SCOPE=BOTH; Thu Sep 29 14:38:16 2011 ARCH: Possible network disconnect WITH PRIMARY DATABASE LNS1 started WITH pid=133, OS id=745664 Thu Sep 29 15:12:11 2011 Thread 1 advanced TO log SEQUENCE 58300 CURRENT log# 2 seq# 58300 mem# 0: /dev/ryredodbs02 Thu Sep 29 15:12:12 2011 ****************************************************************** LGWR: Setting 'active' archival FOR destination LOG_ARCHIVE_DEST_2 ****************************************************************** LNS: Standby redo logfile selected FOR thread 1 SEQUENCE 58300 FOR destination LOG_ARCHIVE_DEST_2 Thu Sep 29 15:15:02 2011 Thread 1 advanced TO log SEQUENCE 58301 CURRENT log# 1 seq# 58301 mem# 0: /dev/ryredodbs01 Thu Sep 29 15:15:03 2011 LNS: Standby redo logfile selected FOR thread 1 SEQUENCE 58301 FOR destination LOG_ARCHIVE_DEST_2 Thu Sep 29 15:15:51 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_262532.trc: ORA-00600: internal error code, arguments: [kcrrupirfs.20], [3], [0], [], [], [], [], [] Thu Sep 29 15:15:53 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_262532.trc: ORA-00600: internal error code, arguments: [kcrrupirfs.20], [3], [0], [], [], [], [], [] Thu Sep 29 15:15:53 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_262532.trc: ORA-00600: internal error code, arguments: [kcrrupirfs.20], [3], [0], [], [], [], [], [] Thu Sep 29 15:15:53 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_262532.trc: ORA-00600: internal error code, arguments: [kcrrupirfs.20], [3], [0], [], [], [], [], [] Thu Sep 29 15:15:53 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_262532.trc: ORA-00600: internal error code, arguments: [kcrrupirfs.20], [3], [0], [], [], [], [], [] Thu Sep 29 15:15:53 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_262532.trc: ORA-00600: internal error code, arguments: [kcrrupirfs.20], [3], [0], [], [], [], [], [] Thu Sep 29 15:15:55 2011 ARCH: Detected ARCH process failure ARCH: STARTING ARCH PROCESSES ARC0: Archival started ARCH: STARTING ARCH PROCESSES COMPLETE ARC0 started WITH pid=112, OS id=1052728 ARC0: Becoming the heartbeat ARCH |
客户的10G DATA GUARD环境,在新增一个物理DATA GUARD配置的时候出现了ORA-600错误。
这个ORA-600[kcrrupirfs.20]的错误在metalink上的记录并不多,绝大部分都是和归档相关,不过具体分析对于当前错误的借鉴并不大。
不过仔细看了一下错误发生之前所进行的修改,就基本清楚导致问题的原因了。
客户在配置新的DATA GUARD的时候,先设置了LOG_ARCHIVE_DEST_N参数,然后才设置LOG_ARCHIVE_CONFIG参数。而Oracle会在配置LOG_ARCHIVE_DEST_N参数的时候,根据DB_UNIQUE_NAME的值到LOG_ARCHIVE_CONFIG的DG_CONFIG配置中寻找对应的值,如果没有找到,就会引发错误。而随后设置LOG_ARCHIVE_CONFIG参数的时候并不会引发LOG_ARCHIVE_DEST_N参数重新解析,所以这个问题一直没有解决。
以前这种错误碰到过很多次了,但是出现ORA-600错误的还是第一次。解决方法很简单,只需要设置LOG_ARCHIVE_DEST_STATE_N参数就可以使得LOG_ARCHIVE_DEST_N重新进行解析:
Thu Sep 29 15:44:24 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_803104.trc: ORA-00600: internal error code, arguments: [kcrrupirfs.20], [3], [0], [], [], [], [], [] Thu Sep 29 15:44:24 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_803104.trc: ORA-00600: internal error code, arguments: [kcrrupirfs.20], [3], [0], [], [], [], [], [] Thu Sep 29 15:44:25 2011 ARCH: Detected ARCH process failure ARCH: STARTING ARCH PROCESSES ARC0: Archival started ARCH: STARTING ARCH PROCESSES COMPLETE ARC0 started WITH pid=112, OS id=876882 ARC0: Becoming the heartbeat ARCH Thu Sep 29 15:44:25 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_876882.trc: ORA-00317: file TYPE 0 IN header IS NOT log file ORA-00334: archived log: '/arch/1_58212_665274343.dbf' Thu Sep 29 15:44:25 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_876882.trc: ORA-00317: file TYPE 0 IN header IS NOT log file ORA-00334: archived log: '/arch/1_58212_665274343.dbf' FAL[server, ARC0]: FAL archive failed, see trace file. Thu Sep 29 15:44:25 2011 Errors IN file /oracle/admin/dbnamedb/bdump/dbnamedb_arc0_876882.trc: ORA-16055: FAL request rejected ARCH: FAL archive failed. Archiver continuing Thu Sep 29 15:44:25 2011 ORACLE Instance dbnamedb - Archival Error. Archiver continuing. Thu Sep 29 15:44:39 2011 ALTER SYSTEM SET log_archive_dest_state_2='reset' SCOPE=BOTH; Thu Sep 29 15:44:45 2011 Errors IN file /oracle/admin/dbnamedb/udump/dbnamedb_fal_1024178.trc: ORA-00317: file TYPE 0 IN header IS NOT log file ORA-00334: archived log: '/arch/1_58212_665274343.dbf' Thu Sep 29 15:44:46 2011 FAL[server]: Fail TO queue the whole FAL gap GAP - thread 1 SEQUENCE 58212-58212 DBID 381481151 branch 665274343 Thu Sep 29 15:55:49 2011 ALTER SYSTEM SET log_archive_dest_state_2='enable' SCOPE=BOTH; Thu Sep 29 16:02:48 2011 Thread 1 advanced TO log SEQUENCE 58302 CURRENT log# 3 seq# 58302 mem# 0: /dev/ryredodbs03 Thu Sep 29 16:02:49 2011 ****************************************************************** LGWR: Setting 'active' archival FOR destination LOG_ARCHIVE_DEST_2 ****************************************************************** LNS: Standby redo logfile selected FOR thread 1 SEQUENCE 58302 FOR destination LOG_ARCHIVE_DEST_2 Thu Sep 29 16:17:06 2011 Thread 1 advanced TO log SEQUENCE 58303 CURRENT log# 2 seq# 58303 mem# 0: /dev/ryredodbs02 Thu Sep 29 16:17:07 2011 LNS: Standby redo logfile selected FOR thread 1 SEQUENCE 58303 FOR destination LOG_ARCHIVE_DEST_2 Thu Sep 29 16:47:40 2011 Thread 1 advanced TO log SEQUENCE 58304 CURRENT log# 1 seq# 58304 mem# 0: /dev/ryredodbs01 Thu Sep 29 16:47:41 2011 LNS: Standby redo logfile selected FOR thread 1 SEQUENCE 58304 FOR destination LOG_ARCHIVE_DEST_2 |
可以看到,设置LOG_ARCHIVE_DEST_STATE_2参数后,问题解决。
对于物理DATA GUARD在设置参数时,一定要注意顺序,LOG_ARCHIVE_CONFIG参数要在LOG_ARCHIVE_DEST_N之前进行设置。