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需要设置noreopen或者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可以避过,但在我的测试中无效。