Oracle可以设置备用归档路径,如果首要归档路径不可用,可以自动切换到备用路径,而平时备用路径不启用,这在一些对高可用要求比较高的环境中还是有实用价值,无法正确归档将会导致数据库挂起。启用该特性需要配置的参数如下:
log_archive_dest_1='location=/arc/archive/test alternate=log_archive_dest_2 noreopen' log_archive_dest_2='location=/arc1/archive/test' log_archive_dest_state_1=enable log_archive_dest_state_2=alternate
log_archive_dest_1需要设置noeopen或者reopen=0属性,否则无法迅速切换到备用路径,可能导致数据库无法归档。
此时归档路径状态如下:
SQL> select dest_name,destination,status,error from v$archive_dest; DEST_NAME DESTINATION STATUS ERROR -------------------- ------------------ ---------- --------------------- LOG_ARCHIVE_DEST_1 /arc/archive/test VALID LOG_ARCHIVE_DEST_2 /arc1/archive/test ALTERNATE LOG_ARCHIVE_DEST_3 standby VALID LOG_ARCHIVE_DEST_4 INACTIVE LOG_ARCHIVE_DEST_5 INACTIVE LOG_ARCHIVE_DEST_6 INACTIVE LOG_ARCHIVE_DEST_7 INACTIVE LOG_ARCHIVE_DEST_8 INACTIVE LOG_ARCHIVE_DEST_9 INACTIVE LOG_ARCHIVE_DEST_10 INACTIVE
正常情况下,数据库会归档到/arc/archive/test目录下,如果/arc/archive/test目录不可用,则归档会报一次错,然后会切换到第二个备用路径/arc1/archive/test。
SQL> alter system archive log current; alter system archive log current * ERROR at line 1: ORA-16038: log 5 sequence# 2496 cannot be archived ORA-19504: failed to create file "" ORA-00312: online log 5 thread 1: '/u01/oracle/oradata/ningoo/redo05_01.dbf' ORA-00312: online log 5 thread 1: '/u01/oracle/oradata/ningoo/redo05_02.dbf' SQL> alter system archive log current; System altered.
此时再看归档目标的状态,可以发现oracle自动做了修改,第一个失效路径被diable,而第二个备用路径被enable:
SQL> select dest_name,destination,status,error from v$archive_dest; DEST_NAME DESTINATION STATUS ERROR ------------------- ------------------- ---------- ------------------------------------- LOG_ARCHIVE_DEST_1 /arc/archive/test DISABLED ORA-19504: failed to create file "" LOG_ARCHIVE_DEST_2 /arc1/archive/test VALID LOG_ARCHIVE_DEST_3 standby VALID LOG_ARCHIVE_DEST_4 INACTIVE LOG_ARCHIVE_DEST_5 INACTIVE LOG_ARCHIVE_DEST_6 INACTIVE LOG_ARCHIVE_DEST_7 INACTIVE LOG_ARCHIVE_DEST_8 INACTIVE LOG_ARCHIVE_DEST_9 INACTIVE LOG_ARCHIVE_DEST_10 INACTIVE
注意,即使现在第一个归档路径恢复正常,也不会再自动切换回去,需要手工重新修改路径状态参数
log_archive_dest_state_1=enable log_archive_dest_state_2=alternate
如果第一个主要归档目的地是NFS,则NFS主机down或者网络down的时候,在os上ls或者df都会hang住,但Oracle依然可以实现切换到备用归档路径,只是需要的时间稍长,在我的测试中大概花了10s左右才成功归档,并且alert会报错:
Errors in file /u01/oracle/admin/test/udump/test_ora_192654.trc: ORA-07286: sksagdi: cannot obtain device information. IBM AIX RISC System/6000 Error: 78: Connection timed out
切换成功后查看归档路径的状态如下:
SQL>select dest_name,destination,status,error from v$archive_dest; DEST_NAME DESTINATION STATUS ERROR -------------------- --------------------- ---------- ----------------------------------- LOG_ARCHIVE_DEST_1 /arc/test/test DISABLED ORA-16032: parameter destination string cannot be translated LOG_ARCHIVE_DEST_2 /arc1/archive/test VALID LOG_ARCHIVE_DEST_3 standby VALID LOG_ARCHIVE_DEST_4 INACTIVE LOG_ARCHIVE_DEST_5 INACTIVE LOG_ARCHIVE_DEST_6 INACTIVE LOG_ARCHIVE_DEST_7 INACTIVE LOG_ARCHIVE_DEST_8 INACTIVE LOG_ARCHIVE_DEST_9 INACTIVE LOG_ARCHIVE_DEST_10 INACTIVE
另外,设置归档路径到NFS,AIX会报错:
ORA-27054: NFS file system where the file is created or resides is not mounted with correct options
这是bug,设置event=’10298 trace name context forever, level 32′可以绕过NFS的mount选项检查。Note:420582.1上说将mount信息写到/etc/filesystems可以避过,但在我的测试中无效。