在默认情况下,数据库实在非归档日志模式下创建的,这意味着日志切换在没有先进行复制的情况下会重写联机重做日志文件。此时数据库仍然不会受损,但是如果数据文件因为介质失败被损坏,那么会丢失数据。在数据库被转换至归档模式时,如果从最近一次数据库备份开始生成的所有归档日志文件都可用,那么不会丢失数据。所以所有的生产库都应该以归档模式运行。下面是将数据库转换为归档日志模式的步骤:
- 在操作系统上创建归档的目标位置。
$mkdir /oracle/archive1
$mkdir /oracle/archive2
- 以SYSTEM权限的SYS用户身份连接SQL*Plus。
SQL> conn / as sysdba
- 设置归档参数为第一步创建的两个目标目录,并控制归档日志文件名。注意,必须在目录名上包括正斜杠(在Windows中是反斜杠)。
SQL> alter system set log_archive_dest_1='location=/oracle/archive1' scope=spfile;
SQL> alter system set log_archive_dest_2='location=/oracle/archive2' scope=spfile;
SQL> alter system set log_archive_format='arch_%d_%t_%r_%s.log' scope=spfile;
其中归档日志文件名中各变量含义如下:
%d:唯一的数据库标识符,如果将多个数据库归档到同一目录,这是必需的。
%t:线程号,显示为v$instance视图的THREAD#列,除了在RAC数据库中使用之外,这个变量没有任何意义。
%r:场景(incarnation)号。如果进行了不完全恢复,这个变量就十分重要。
%s:日志切换序列号。这个变量能够保证任何一个数据库中的归档日志都不会彼此重写。
- 干净地关闭数据库:
SQL> shutdown immediate;
- 以加载模式启动:
SQL> startup mount;
- 将数据库转换成归档日志模式:
SQL> alter database archivelog;
- 打开数据库:
SQL> alter database open;
- 确认数据库已经运行在归档日志模式:
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
SQL> select archiver from v$instance;
ARCHIVE
-------
STARTED