9.3.3 设置归档位置
归档日志文件存储在数据库服务器的某个特定位置。在Oracle中,归档日志文件的存储位置和文件名称是由初始化参数指定的。由于归档日志文件的特殊重要性,在数据库服务器中可以对每个重做日志组同时产生多个归档日志文件,这些归档日志文件的内容完全相同。需要注意的是,为了防止磁盘损坏,同时为了缩短归档的时间,应该将这些归档日志文件存放在不同的磁盘上。
在数据库中,可以通过LOG_ARCHIVE_DEST参数和LOG_ARCHIVE_DUPLEX_DEST参数指定两个归档位置。
假设对这两个参数进行了如下设置,那么数据库服务器在对每个重做日志组进行归档时,将同时产生两个归档日志文件。
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST="/home/oracle/archive1";
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DUPLEX_DEST="/home/oracle/archive2";
在Oracle 11g的数据库中,可以通过另外一组初始化参数设置LOG_ARCHIVE_DEST_n(n为1~31)指定最多31个存储位置,这样在对每组重做日志文件进行归档时,将同时产生多个内容完全相同的归档日志文件。需要注意的时,这组初始化参数和前一组不能同时使用。
通过初始化参数LOG_ARCHIVE_DEST_n既可以指定本地目录,也可以指定一个ASM磁盘组,还可以指定网络上另一台数据库服务器中。本地目录的指定格式为“LOCATION=本地目录”,ASM磁盘组的指定各式为“LOCATION=磁盘组名称”,网络上另一台数据库服务器的指定格式为“SERVICE=网络服务”。例如,通过以下初始化参数为归档日志文件指定了5个存储位置:
LOG_ARCHIVE_DEST_1="location=/home/oracle/archive1"
LOG_ARCHIVE_DEST_2="location=/home/oracle/archive2"
LOG_ARCHIVE_DEST_3="location=/home/oracle/archive3"
LOG_ARCHIVE_DEST_4="location=/home/oracle/archive4"
LOG_ARCHIVE_DEST_5="service=backup"
在初始化参数LOG_ARCHIVE_DEST_n中还可以通过关键字MANDATORY指定归档位置为强制归档,或者通过关键字OPTIONAL指定为可选归档。如果一个归档位置为强制归档,那么数据库服务器将在这个位置产生一个归档日志文件,如果这个归档位置不可用,那么数据库服务器将停止运行。如果是可选归档,那么当这个归档位置不可用时,数据库服务器将忽略它。
如果没有通过上述两组初始化参数指定任何一个归档位置,那么归档日志文件将被存储在目录ORACLE_HOME/rdbms目录中,其中ORACLE_HOME代表Oracle软件的安装目录。
初始化参数LOG_ARCHIVE_FORMAT的作用是指定归档日志文件的名称。归档日志文件的名称应该是可变的,并且永远不会重复。因为数据库服务器循环地为每个重做日志组进行归档,如果归档日志文件的名称固定不变,那么后产生的归档日志文件将覆盖先产生的。因此,应该有一种机制保证归档日志文件的名称是唯一的。
在设置初始化参数LOG_ARCHIVE_FORMAT时可以使用以下格式符:
·%T:代表归档线程号,并且可以在左边填充0,补足三位。
·%S:代表被归档的重做日志文件的日志序列号,可以在左边填充0,补足五位。
·%t:代表归档线程号。
·%s:代表被归档的重做日志文件的日志序列号。
重做线程指的是一个数据库实例的重做日志,在单机版数据库中,因为只有一个实例,所以只有一个重做线程。而在RAC环境中,则有多个重做线程。
我们注意到,在一个数据库服务器中,重做线程号是唯一的,而日志序列号是递增的,并且永远不会重复。因此可以把%T、%t与%S、%s的组合作为归档文件名称的一部分,这样可以保证文件名称是唯一的。例如,以下设置指定归档日志文件的名称为arc%t_%s.log:
SQL>ALTER SYSTEM SET LOGARCHIVE_FORMAT=arc%t%s.log;
根据这个设置,数据库服务器将依次产生以下归档日志文件:
arc1_1.log
arc1_2.log
arc1_3.log
……
如果没有设置初始化参数LOG_ARCHIVE_FORMAT,那么数据库服务器将把arc%t.%s作为归档日志的默认文件名称。