A-A+
参数log_archive_format引起的ORA-19563一则
该篇描述的是9i的库由于参数log_archive_format设置不正确导致备份归档日志时报错ORA-19563,解决倒是很容易,但是问题是:在正常业务期间,数据库发生检查点,切换日志,产生归档的日志只是对同一个归档日志的覆盖叠加的写,而且在alert中没有任何相关的报错。之前记得有一次对该参数进行修改重启数据库的时候,会报相关的错误,但是这次并没有相关错误抛出,只是对同一个归档日志的叠加写,然后是覆盖。
下边便是该问题的一个处理过程:
操作系统信息:
bash-2.03$ cat /etc/release Solaris 8 2/04 s28s_hw4wos_05a SPARC Copyright 2004 Sun Microsystems, Inc. All Rights Reserved. Assembled 08 January 2004
数据库版本:
SQL> select * from gv$version; INST_ID BANNER ---------- ---------------------------------------------------------------- 1 Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production 1 PL/SQL Release 9.2.0.4.0 - Production 1 CORE 9.2.0.3.0 Production 1 TNS for Solaris: Version 9.2.0.4.0 - Production 1 NLSRTL Version 9.2.0.4.0 - Production
数据库当前归档信息:
SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /opt/oracle/oradata/arch Oldest online log sequence 26 Next log sequence to archive 28 Current log sequence 28 SQL> !ls -latr /opt/oracle/oradata/arch total 6 drwxrwxr-x 5 oracle dba 512 May 20 22:23 .. -rw-r----- 1 oracle dba 1024 Sep 9 21:55 1_0.dbf drwxr-xr-x 2 oracle dba 512 Sep 9 21:55 .
人为产生检查点、切换日志、归档日志:
SQL> alter system checkpoint; System altered. SQL> alter system archive log current; System altered. SQL> alter system switch logfile; System altered. SQL> / System altered. SQL> / System altered. SQL> alter system switch logfile; System altered. SQL> / System altered. SQL> / System altered. SQL> !ls -latr /opt/oracle/oradata/arch total 8 drwxrwxr-x 5 oracle dba 512 May 20 22:23 .. -rw-r----- 1 oracle dba 1536 Sep 9 22:01 1_0.dbf drwxr-xr-x 2 oracle dba 512 Sep 9 22:01 .
此处发现,该归档日志1_0.dbf一致在增长,并没有在该目录下产生新的归档日志,而且在观察中还会发现,有覆盖写的情况出现(该处没有重现该现象)。
下边查看问题参数:
SQL> show parameter log NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_create_online_log_dest_1 string db_create_online_log_dest_2 string db_create_online_log_dest_3 string db_create_online_log_dest_4 string db_create_online_log_dest_5 string dblink_encrypt_login boolean FALSE log_archive_dest string log_archive_dest_1 string LOCATION=/opt/oracle/oradata/a rch log_archive_dest_10 string log_archive_dest_2 string NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_3 string log_archive_dest_4 string log_archive_dest_5 string log_archive_dest_6 string log_archive_dest_7 string log_archive_dest_8 string log_archive_dest_9 string log_archive_dest_state_1 string enable log_archive_dest_state_10 string enable log_archive_dest_state_2 string enable log_archive_dest_state_3 string enable NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_state_4 string enable log_archive_dest_state_5 string enable log_archive_dest_state_6 string enable log_archive_dest_state_7 string enable log_archive_dest_state_8 string enable log_archive_dest_state_9 string enable log_archive_duplex_dest string log_archive_format string %t_%U.dbf log_archive_max_processes integer 2 log_archive_min_succeed_dest integer 1 log_archive_start boolean TRUE NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_trace integer 0 log_buffer integer 524288 log_checkpoint_interval integer 0 log_checkpoint_timeout integer 1800 log_checkpoints_to_alert boolean FALSE log_file_name_convert string log_parallelism integer 1 logmnr_max_persistent_sessions integer 1 remote_login_passwordfile string EXCLUSIVE
此处,明显可以看到参数log_archive_format的值中的 %U 明显错误,该参数应该是rman中format的参数,估计是某位同事把二者混淆了。
下边是备份报的错误:
Starting backup at 09-SEP-13 current log archived released channel: c1 released channel: c2 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of backup command at 09/09/2013 21:39:10 ORA-19563: archived log header validation failed for file /opt/oracle/oradata/arch/1_0.dbf RMAN> Recovery Manager complete.
查看alert日志文件:
Mon Sep 9 21:50:01 2013 ARCH: Evaluating archive log 3 thread 1 sequence 21 ARCH: Beginning to archive log 3 thread 1 sequence 21 Creating archive destination LOG_ARCHIVE_DEST_1: '/opt/oracle/oradata/arch/1_0.dbf' Mon Sep 9 21:50:01 2013 ARC1: Evaluating archive log 3 thread 1 sequence 21 ARC1: Unable to archive log 3 thread 1 sequence 21 Log actively being archived by another process Mon Sep 9 21:50:01 2013 ARCH: Completed archiving log 3 thread 1 sequence 21 Mon Sep 9 21:50:16 2013 Thread 1 advanced to log sequence 23 Current log# 2 seq# 23 mem# 0: /opt/oracle/oradata/cakmcdb/redo02.log Mon Sep 9 21:50:16 2013 ARC1: Evaluating archive log 1 thread 1 sequence 22 ARC1: Beginning to archive log 1 thread 1 sequence 22 Creating archive destination LOG_ARCHIVE_DEST_1: '/opt/oracle/oradata/arch/1_0.dbf' ARC1: Completed archiving log 1 thread 1 sequence 22 Mon Sep 9 21:55:36 2013 Thread 1 advanced to log sequence 24 Current log# 3 seq# 24 mem# 0: /opt/oracle/oradata/cakmcdb/redo03.log Mon Sep 9 21:55:36 2013 ARC0: Evaluating archive log 2 thread 1 sequence 23 ARC0: Beginning to archive log 2 thread 1 sequence 23 Creating archive destination LOG_ARCHIVE_DEST_1: '/opt/oracle/oradata/arch/1_0.dbf' ARC0: Completed archiving log 2 thread 1 sequence 23 Mon Sep 9 21:55:37 2013 Thread 1 advanced to log sequence 25 Current log# 1 seq# 25 mem# 0: /opt/oracle/oradata/cakmcdb/redo01.log Mon Sep 9 21:55:37 2013 ARC1: Evaluating archive log 3 thread 1 sequence 24 ARC1: Beginning to archive log 3 thread 1 sequence 24 Creating archive destination LOG_ARCHIVE_DEST_1: '/opt/oracle/oradata/arch/1_0.dbf' ARC1: Completed archiving log 3 thread 1 sequence 24 Mon Sep 9 21:55:38 2013 Thread 1 advanced to log sequence 26 Current log# 2 seq# 26 mem# 0: /opt/oracle/oradata/cakmcdb/redo02.log Mon Sep 9 21:55:38 2013 ARC0: Evaluating archive log 1 thread 1 sequence 25 ARC0: Beginning to archive log 1 thread 1 sequence 25 Creating archive destination LOG_ARCHIVE_DEST_1: '/opt/oracle/oradata/arch/1_0.dbf' ARC0: Completed archiving log 1 thread 1 sequence 25 Mon Sep 9 21:55:39 2013 Thread 1 advanced to log sequence 27 Current log# 3 seq# 27 mem# 0: /opt/oracle/oradata/cakmcdb/redo03.log Mon Sep 9 21:55:39 2013 ARC1: Evaluating archive log 2 thread 1 sequence 26 ARC1: Beginning to archive log 2 thread 1 sequence 26 Creating archive destination LOG_ARCHIVE_DEST_1: '/opt/oracle/oradata/arch/1_0.dbf' ARC1: Completed archiving log 2 thread 1 sequence 26 Mon Sep 9 21:55:39 2013 Thread 1 advanced to log sequence 28 Current log# 1 seq# 28 mem# 0: /opt/oracle/oradata/cakmcdb/redo01.log Mon Sep 9 21:55:39 2013 ARC0: Evaluating archive log 3 thread 1 sequence 27 ARC0: Beginning to archive log 3 thread 1 sequence 27 Creating archive destination LOG_ARCHIVE_DEST_1: '/opt/oracle/oradata/arch/1_0.dbf' ARC0: Completed archiving log 3 thread 1 sequence 27 Mon Sep 9 22:00:59 2013 Thread 1 advanced to log sequence 29 Current log# 2 seq# 29 mem# 0: /opt/oracle/oradata/cakmcdb/redo02.log
此处,发现没有相关错误,只有之前做的切换日志等操作的记录,并且还可以看到,切换后的日志一直在给同一个归档文件/opt/oracle/oradata/arch/1_0.dbf写,这里应该抛出相关错误,估计和oracle的bug相关吧。
参数修改后,备份归档便恢复正常,如下:
SQL> show parameter log NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_create_online_log_dest_1 string db_create_online_log_dest_2 string db_create_online_log_dest_3 string db_create_online_log_dest_4 string db_create_online_log_dest_5 string dblink_encrypt_login boolean FALSE log_archive_dest string log_archive_dest_1 string LOCATION=/opt/oracle/oradata/a rch log_archive_dest_10 string log_archive_dest_2 string NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_3 string log_archive_dest_4 string log_archive_dest_5 string log_archive_dest_6 string log_archive_dest_7 string log_archive_dest_8 string log_archive_dest_9 string log_archive_dest_state_1 string enable log_archive_dest_state_10 string enable log_archive_dest_state_2 string enable log_archive_dest_state_3 string enable NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_state_4 string enable log_archive_dest_state_5 string enable log_archive_dest_state_6 string enable log_archive_dest_state_7 string enable log_archive_dest_state_8 string enable log_archive_dest_state_9 string enable log_archive_duplex_dest string log_archive_format string %t_%s.arc log_archive_max_processes integer 2 log_archive_min_succeed_dest integer 1 log_archive_start boolean TRUE NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_trace integer 0 log_buffer integer 524288 log_checkpoint_interval integer 0 log_checkpoint_timeout integer 1800 log_checkpoints_to_alert boolean FALSE log_file_name_convert string log_parallelism integer 1 logmnr_max_persistent_sessions integer 1 remote_login_passwordfile string EXCLUSIVE SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /opt/oracle/oradata/arch Oldest online log sequence 34 Next log sequence to archive 36 Current log sequence 36 SQL> ! bash-2.03$ cd /opt/oracle/oradata/arch bash-2.03$ ls -ltr total 204928 -rw-r----- 1 oracle dba 104857088 Sep 10 22:19 1_0.dbf bash-2.03$ exit exit SQL> alter system switch logfile; System altered. SQL> / System altered. SQL> ! bash-2.03$ pwd /opt/oracle bash-2.03$ cd /opt/oracle/oradata/arch bash-2.03$ ls -ltr total 293810 -rw-r----- 1 oracle dba 104857088 Sep 10 22:19 1_0.dbf -rw-r----- 1 oracle dba 1024 Sep 11 09:01 1_37.arc -rw-r----- 1 oracle dba 45468160 Sep 11 09:01 1_36.arc