当对数据库中的数据进行修改后,重做数据会写出到联机重做日志文件中。指定系统在给定时间写入到的文件。当此文件写满后,归档进程(ARCn) 会将该联机日志文件复制到其它位置,作为该文件的归档,保留时间由用户决定。这便提供了更多的恢复机会,因为可以保存、备份和还原生成的所有归档重做日志。
因为系统以循环方式重用联机重做日志文件,所以有一个协议用于控制何时可以重用文件。
在ARCHIVELOG模式下,数据库只在联机重做日志文件归档后向其写入数据。这样可确保每个重做日志文件都有机会得以归档。
要将数据库置于ARCHIVELOG模式,请执行下列步骤:
• 使用Oracle Enterprise Manager
– 选中“ARCHIVELOG Mode(ARCHIVELOG 模式)”复选框。
– 单击“Apply(应用)”。
只有处于MOUNT状态时才能将数据库设置为ARCHIVELOG。
– 系统询问是否重新启动数据库时,请单击“Yes(是)”。
• 使用SQL 命令
– 装载数据库。
– 发出ALTER DATABASE ARCHIVELOG命令。
– 打开数据库。
配置ARCHIVELOG模式
将数据库置于ARCHIVELOG模式可防止重做日志在归档之前被覆盖。
在Oracle Enterprise Manager 中,通过导航到“Availability > Recovery Settings(可用性> 恢复设置)”并选中“ARCHIVELOG Mode(ARCHIVELOG 模式)”复选框可实现上述目的。在进行此更改后,必须重新启动数据库。
要发出SQL 命令将数据库置于ARCHIVELOG模式,数据库必须处于MOUNT模式。如果数据库当前处于打开状态,必须将其完全关闭(不是中止),然后进行装载。
下面显示的命令可以关闭打开的数据库,将其置于ARCHIVELOG模式,然后再将其打开:
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP MOUNT
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
数据库处于NOARCHIVELOG模式(默认模式)时,只能恢复到最后一次备份时的状态。在该备份之后执行的所有事务处理都会丢失。
在ARCHIVELOG模式下,可一直恢复到最后一次提交时的状态。多数生产数据库都在ARCHIVELOG模式下运行。
注:在
切换到ARCHIVELOG模式后备份数据库,原因是数据库只能从在该模式下执行的第一次备份进行恢复。
最佳做法提示:
应该创建多个归档日志目标位置,因为如果只有一个目标且将填满,则数据库将停止。
本地目标和远程目标:通过设置LOG_ARCHIVE_DEST_n初始化参数的集合指定本地目标和远程目标。共有十个初始化参数,因此n可以是1 到10。
• 为了指定本地存储位置,应为其中一个变量的值提供本地目录名称,即提供“LOCATION=”字符串。例如,要指定/disk3/arch目录,
按以下方式设置其中一个变量:
LOG_ARCHIVE_DEST_1 = 'LOCATION=/disk3/arch'
• 如果要为备用数据库指定远程位置,在值中使用SERVICE关键字,如下例所示,
其中standyby1是备用数据库实例的网络服务名:
LOG_ARCHIVE_DEST_2 = 'SERVICE=standby1'.
仅本地目标:使用标准版的Oracle DB,可以将LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST参数设置为本地磁盘目录。
因此,最多可以有两个归档日志文件位置。例如:
LOG_ARCHIVE_DEST = '/disk1/arch'
LOG_ARCHIVE_DUPLEX_DEST = '/disk2/arch'
如果适用,Oracle 建议使用LOG_ARCHIVE_DEST_n方法,因为此方法在目标类型和目标数量方面具有最大的灵活度。
如果为归档日志文件指定了多个目标,则应指定至少有多少个目标获得成功才认为归档是成功的。可使用LOG_ARCHIVE_MIN_SUCCEED_DEST初始化参数执行此操作。将其设置为必须成功接收归档日志文件的目标数量。
只有满足此数量,才可以重用联机日志文件。
上图示例中,有三个指定的目标:两个是本地目标,一个是远程目标。
LOG_ARCHIVE_MIN_SUCCEED_DEST设置为2,表示只要至少有两个目标成功,即可覆盖联机重做日志文件。该示例显示目标1 已失败。这并不会使数据库停止,因为其中两个已成功。
如果在LOG_ARCHIVE_DEST_n模型中使用此参数,则此参数的值可以介于1 到10 之间。
如果在LOG_ARCHIVE_DEST模型中使用此参数,则值可以为1 或2,因为在这种情况下只能指定两个目标。
指定MANDATORY和OPTIONAL
定义某个目标时,可以指定该目标为必需目标。在指定位置后,通过指定MANDATORY或OPTIONAL关键字可实现上述目的。
下面是一个示例:
LOG_ARCHIVE_DEST_1 = 'LOCATION=/disk3/arch MANDATORY'
默认值为OPTIONAL。
系统尤为关注必需目标。如果任一必需目标失败,则Oracle DB 认为日志归档尚未成功,不允许覆盖联机重做日志文件。
在此情况下,它将忽略LOG_ARCHIVE_MIN_SUCCEED_DEST参数。
LOG_ARCHIVE_DEST指定的任何目标都是必需的。
如果LOG_ARCHIVE_MIN_SUCCEED_DEST= 1,则LOG_ARCHIVE_DUPLEX_DEST声明的所
有目标都是可选的,如果LOG_ARCHIVE_MIN_SUCCEED_DEST= 2,则目标都是必需的。
以下来配置archivelog模式:
1、确定当前数据库以哪种归档模式运行。
sys@TESTDB> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 5
Current log sequence 7
2、由于只有在mount状态下才可以更改archive模式,所以先关闭数据库。
sys@TESTDB> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
3、启动数据库到mount状态。
sys@TESTDB> startup mount;
ORACLE instance started.
Total System Global Area 2505338880 bytes
Fixed Size 2230952 bytes
Variable Size 553649496 bytes
Database Buffers 1929379840 bytes
Redo Buffers 20078592 bytes
Database mounted.
4、将数据库更改为使用archivelog模式
sys@TESTDB> alter database archivelog;
Database altered.
5、打开数据库。
sys@TESTDB> alter database open;
Database altered.
6、查看是否成功配置归档模式
sys@TESTDB> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 5
Next log sequence to archive 7
Current log sequence 7