Oracle可以将联机日志保存在多个不同位置,将联机日志转化为归档日志的过程叫做归档,相应的日志被称为归档日志。通过使用归档日志,可以保留所有重做历史记录,在数据库处于归档模式下进行日志切换时,后台ARCH进程会将重做日志内容保存到归档日志中。当数据库出现介质失败后,使用数据文件备份、归档日志和重做日志可以完全恢复数据库。
一、归档日志
是联机重做日志的一个副本
包含redo记录以及一个唯一的 log sequence number
对日志组的一个日志文件进行归档,如果该组其中一个日志文件损坏,则另一个可用日志将会被归档
对于归档模式的日志切换,当日志归档完成后,下一个日志才能被覆盖或者重新使用
自动归档如开启,则后台ARCH进程在日志切换时自动完成归档,否则需要手动归档
归档日志的作用
恢复数据库
更新standby数据库
使用LogMiner提取历史日志的相关信息
二、日志的两种模式
1、非归档模式NOARCHIVELOG
不适用于生产数据库
创建数据库时,缺省的日志管理模式是非归档模式
当日志切换,检查点产生后,联机重做日志文件即可被重新使用
联机日志被覆盖后,介质恢复仅仅支持到最近的完整备份
不支持联机备份表空间,一个表空间损坏将导致整个数据库不可用,需要删除掉损坏的表空间或从备份中恢复
对于操作系统级别的数据库备份需要将数据库一致性关闭
应当备份所有的数据文件、控制文件、参数文件、密码文件、联机日志文件(可选)
2、归档模式ARCHIVELOG
能够对联机日志文件进行归档,生产数据库强烈建议归档
在日志切换时,下一个即将被写入日志组必须归档完成之后,日志组才可以使用
归档日志的log sequence number信息会记录在控制文件中
必须有足够的磁盘空间用于存放归档日志
9i需要设置参数log_archive_start=true才能够进行自动归档
备份与恢复
支持热备份,且当某个非系统表空间损坏,数据库仍然处于可用状态,且支持在线恢复
使用归档日志能够实现联机与脱机时点恢复(恢复到指定时间点、指定的归档日志或者指定SCN)
三、日志模式切换及手段归档
1、非归档到归档
a、SQL>shutdown immediate --一致性关闭数据库
b、SQL>startup mount --启动到mount阶段
c、SQL>alter database archivelog [manual]
d、SQL>alter database open --打开数据库
e、完成备份数据库 --之前数据库备份文件将失效
SQL>
archive log list; --查看数据库是否处于归档模式
Database log mode
No Archive Mode
Automatic archival
Disabled
Archive destination
USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Current log sequence
17
SQL>
select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
确定归档日志的路径,可以生成多份一样的日志,保存在多个位置
SQL>
alter system set log_archive_dest_1='location=/opt/oradate/log/archive_log';
SQL>
alter system set log_archive_dest_2='location=/opt/oradate/log2/archive_log';
SQL>
shutdown immediate
SQL>
startup mount
SQL>
alter database archivelog; 切换到自动归档模式
Database altered
SQL>
alter database open;
SQL>
archive log list --查看数据库是否处于归档模式
Database log mode
Archive Mode
Automatic archival
Enabled --自动归档
Archive destination
USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Next log sequence to archive 17
Current log sequence
17
SQL>
select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
2、归档到非归档
a、SQL>shutdown immediate --一致性关闭数据库
b、SQL>startup mount --启动到mount阶段
c、SQL>alter databse fashback off; --若闪回数据库不关闭时,关闭归档日志时会出现ORA-38774错误
d、SQL>
alter database noarchivelog;
e、SQL>alter database open; --打开数据库
f、完成备份数据库 --之前数据库备份文件将失效
3、手动归档
手动归档需要将日志切换为
alter database archivelog manual
在使用alter system archive log current|all 实现归档
注意
手动归档模式不支持standby数据库
在alter database archivelog 模式下也可实现对日志手工归档
在手工归档模式,若未执行手工归档命令,则日志组的原有内容将不能被覆盖
standby_archive_dest
string
?/dbs/arch
SQL>
alter system archive log current;
System altered.
SQL>
alter system archive log all;
alter system archive log all
*
ERROR at line 1:
ORA-00271: there are no logs that need archiving
4、归档进程的调整
通过设置log_archive_max_processes可以指定数据库规定的所需初始化的进程数,缺省进程数为2
一般情况下不需要修改该参数,Oracle会根据归档情况自动启动额外的归档进程
SQL>
alter syetem set log_archive_max_processes=3; --动态修改
四、配置归档
a、归档到本地且少于等于两个归档位置
设置log_archive_dest和log_archive_duplex_dest参数
SQL>
alter system set log_archive_dest='/opt/oradata/orcl/log1' scope=spfile;
SQL>
alter system set log_archive_deplex_dest='/opt/oradata/orcl/log2' scope=spfile;
b、归档到本地和远程主机
设置log_archive_dest_n参数,n最大值为10
SQL>
alter system set log_archive_dest_1='location=/opt/oradata/orcl/log1'
SQL>
alter system set log_archive_dest_2='service=standby1';
对于远程归档位置,service选项需要指定远程数据库的网络服务名(tnsnames.ora文件配置)
log_archive_dest_n的两个常用选项
MANDATORY | OPTIONAL;
MANDATORY表示归档必须成功复制到目的路径后,联机重做日志才能被复用,OPTIONAL正好相反
REOPEN
指定归档失败后指定间隔多少时间重试归档,缺省为300秒
示例:
SQL>
alter system set log_archive_dest_1='location=/opt/oradata/orcl/log1 mandatory reopen=600'
SQL>
alter system set log_archive_dest_2='service=standby1 mandatory reopen';
c、两种归档方式异同
两者都可以归档到本地,后者可以归档到远程主机,前者不支持该功能
前者最多配置两个归档位置,后者可以配置10个归档位置
两者不兼容,要么使用前者,要么使用后者
SQL> alter system set log_archive_dest='/opt/oradata mandatory reopen';
--ORA-16018: cannot use LOG_ARCHIVE_DEST with LOG_ARCHIVE_DEST_n or DB_RECOVERY_FILE_DEST
使用后者备份到本地时需要增加location选项,备份到远程主机需要使用service选项
当上述两种方式未指定路径时,归档日志位于db_recovery_file_dest 缺省值为$ORACLE_BASE/flash_recovery_area
d、归档日志命名格式
设置log_archive_format参数,10g中缺省设置为log_archive_format=%t_%s_%r.dbf
%s:日志序列号
%S:日志序列号(带有前导)
%t:重做线程编号
%T:重做线程编号(带有前导)
%a:活动ID号
%d:数据库ID号
%r:resetlogs的ID值
10g开始配置归档文件格式必须带有%s,%t和%r匹配符,配置之后必须重启数据库
SQL>
alter system set log_archive_format = '%a_%s.arc' scope=spfile;
System altered.
SQL> shutdown immediate;
SQL> startup
ORA-19905: log_archive_format must contain %s, %t and %r
SQL>
alter sytem set log_archive_format='arch_%t_%s_%r.arc';
e、归档位置状态
Valid/Invalid --磁盘位置及服务名等是否有效
Enable/Disable --磁盘位置的可用状态及数据库能否使用该归档位置
Active/Inactive --访问归档目的地是否有异常
f、归档成功的最小个数
SQL>
alter system set log_archive_min_succeed_dest = 2; --默认为1
联机重做日志能够被覆盖的前提
所有强制路径归档位置成功实现归档
归档目的地的成功归档个数大于或等于上述参数设置的值
当强制个数大于该参数设置的个数,则以强制个数为准
当强制个数小于该参数设置的个数,则可选的成功归档路径加上强制的归档路径个数至少等于该参数设定值
g、控制归档的可用性
SQL>
alter system set log_archive_dest_stat_1 = enable | defer;
enable:缺省状态,可以再该归档位置进行归档
defer:禁用该归档位置
h、查看归档信息
SQL>
host ps -ef |grep ora_arc; --查看归档进程是否已经启动
oracle 4679 1 0 06:45 ? 00:00:00 ora_arc0_oral
oracle 4681 1 0 06:45 ? 00:00:00 ora_arc1_oral
oracle 4683 1 0 06:45 ? 00:00:00 ora_arc2_oral
SQL>
show parameter archive;
NAME
TYPE
VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target
integer
0
log_archive_config
string
log_archive_dest
string
log_archive_dest_1
string
log_archive_dest_10
string
log_archive_dest_2
string
log_archive_dest_3
string
log_archive_dest_4
string
log_archive_dest_5
string
log_archive_dest_6
string
log_archive_dest_7
string
log_archive_dest_8
string
log_archive_dest_9
string
log_archive_dest_state_1
string
enable
log_archive_dest_state_10
string
enable
log_archive_dest_state_2
string
enable
log_archive_dest_state_3
string
enable
log_archive_dest_state_4
string
enable
log_archive_dest_state_5
string
enable
log_archive_dest_state_6
string
enable
log_archive_dest_state_7
string
enable
log_archive_dest_state_8
string
enable
log_archive_dest_state_9
string
enable
log_archive_duplex_dest
string
log_archive_format
string
%t_%s_%r.dbf
log_archive_local_first
boolean
TRUE
log_archive_max_processes
integer
2
log_archive_min_succeed_dest
integer
1
log_archive_start
boolean
FALSE
log_archive_trace
integer
0
remote_archive_enable
string
true
standby_archive_dest
string
?/dbs/arch
更改log_archive_dest与log_archive_duplex为log_archive_dest_1步骤
SQL>alter system set log_archive_dest = ''; --先将一种归档方式路径置空
SQL>alter system set log_archive_duplex = '';
SQL>alter system set log_archive_dest_1 = 'location /opt/oradata/orcl';
SQL> select dest_name,status,archiver,destination,log_sequence,reopen_secs,
transmit_mode,process from v$archive_dest; --查看归档目的地相关参数
SQL>
alter system set log_archive_dest_state_3 = defer; --停用
SQL> show parameter log_archive_dest_state;
NAME
TYPE
VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_1
string
enable
log_archive_dest_state_10
string
enable
log_archive_dest_state_2
string
enable
log_archive_dest_state_3 string DEFER
log_archive_dest_state_4
string
enable
log_archive_dest_state_5
string
enable
log_archive_dest_state_6
string
enable
log_archive_dest_state_7
string
enable
log_archive_dest_state_8
string
enable
log_archive_dest_state_9
string
enable
五、归档相关视图
v$archived_log -->从控制文件中获取
v$archive_dest -->归档路径及状态
v$log_history -->控制文件中日志的信息
v$database -->查看数据库归档状态
v$archive_processes -->归档相关的后台信息
SQL> select name,sequence#,registrar,standby_dest,archived,status from v$archived_log;
NAME SEQUENCE# REGISTR STA ARC S
--------------------------------------------------------------------------- ----------- ------- --- --- -
/opt/oradata/orcl/1_18_814865186.dbf 18 FGRD NO YES A
/opt/oracle/product/10.2.0/db_1/dbs/db_recovery_file_dest1_18_814865186.dbf 18 FGRD NO YES A
/opt/oradata/orcl/1_19_814865186.dbf 19 FGRD NO YES A
/opt/oracle/product/10.2.0/db_1/dbs/db_recovery_file_dest1_19_814865186.dbf 19 FGRD NO YES A