一、归档重做日志介绍
Oracle数据库将已填充的重做日志文件组保存到一个或多个脱机目标,统称为归档重做日志。
只有在archivelog模式下才可以进行归档,归档方式分为自动和手动两种
存档的重做日志文件是重做日志组中已填充成员之一的副本。它包括重做日志组中相同成员的重做条目和唯一日志序列号。存档的重做日志包含自启用存档以来创建的每个组的副本。
当数据库在ARCHIVELOG模式下运行时,日志编写器进程(LGWR)无法重用并因此覆盖重做日志组,直到它被存档。启用自动存档时,后台进程ARCn会自动执行存档操作。数据库根据需要启动多个archiver进程,以确保已填充重做日志的归档不会落后。
归档日志文件的作用:
恢复数据库
更新备份数据库
使用LogMiner查看数据库历史记录的信息
二、选择归档模式
根据系统的可靠性和可用性来选择是否启用ARCHIVELOG模式,一般在开发环境对数据丢失不太重视可选择NOARCHIVELOG可以节省管理时间和空间。
1.非归档模式(NOARCHIVELOG)
数据库控制文件指示不需要归档已填充的redo 文件组。因此,当日志切换后填充的组变为非活动时,该组可供LGWR重用。
NOARCHIVELOG模式可以用于实例恢复,但不能用于介质恢复。当发生介质故障,数据只能恢复到最近一次全备份点。在这种模式下,无法执行在线表空间、redo 日志备份,所以必须经常进行全库备份。
2.归档模式(ARCHIVELOG)
数据库控制文件表明,LGWR无法重用一组已填充的重做日志文件,除非该组已存档。重做日志切换发生后,已填充的组立即可用于存档。
归档模式作用:
①数据库备份,通过在线日志和归档的重做日志文件,确保在操作系统或磁盘出现故障时恢复所有提交的事务。
②可以使用在数据库打开和正常系统使用时进行的备份。
③可以使备用数据库与其原始数据库保持最新状态。
、可以将实例配置为自动存档已填充的重做日志文件,也可以手动存档。为了方便和高效,自动归档通常是最好的。如图说明了archiver进程(本图中的ARC0)如何将填充的重做日志文件写入数据库存档的重做日志。
在RAC环境中必须设置所有实例为ARCHIVELOG模式,才能利用归档文件恢复数据库。
三、归档设置
1.将NOARCHIVELOG改为ARCHIVELOG模式(自动)
①关闭数据库
shutdown immediate
②装载数据库
startup mount
③更改归档模式,默认自动归档模式
alter database archivelog
④打开数据库
alter database open
⑤验证当前模式
SYS@cdb1> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/product/12.1.0.2/db_1/dbs/arch
Oldest online log sequence 13
Next log sequence to archive 16
2.手动归档
在手动归档模式下操作数据库时,必须归档已填充重做日志文件的非活动组,否则数据库操作可能会暂时挂起。
① 语法
alter database archivelog manual
②查看归档方式
select log_mode from v$database;
LOG_MODE
------------
MANUAL
③手动归档
alter system archive log all
使用手动存档模式时,不能在存档目标中指定任何备用数据库。
即使启用了自动归档,也可以使用手动归档来执行以下操作:将已填充的重做日志成员的非活动组重新归档到另一个位置。在这种情况下,实例可以在您完成手动归档之前重用重做日志组,从而覆盖文件。如果发生这种情况,数据库会将错误消息写入警报日志。
3.设置归档进程数
①查看当前ARCn
SYS@cdb1> show parameter log_archive_max_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes integer 4
ps axu|grep 'ora_arc’
②更改最大归档进程数
SYS@cdb1> alter system set log_archive_max_processes=6 scope=both;
System altered.
SYS@cdb1> show parameter log_archive_max_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes integer 6
查看实时ARCn进程
四、指定归档目标
1.设置归档目标初始参数
目标可以是本地文件系统或Oracle自动存储管理(Oracle ASM)磁盘组中的本地目标,也可以是远程目标(在备用数据库上)。当归档到多个目标时,每个已填充重做日志文件的副本将写入每个目标。这些冗余拷贝有助于确保归档日志在某个目标发生故障时始终可用。
①单一归档目标设置
参数:log_archive_dest
SYS@cdb1> alter system set log_archive_dest='/u01/app/oracle/oradata/CDB1/archlog/arch01' scope=both;
System altered.
②设置多个归档目标
Ⅰ.主从备份
参数:log_archive_duplex_dest
SYS@cdb1> alter system set log_archive_duplex_dest='/u01/app/oracle/oradata/CDB1/archlog/arch01du';
System altered.
Ⅱ.多个归档目标,先取消参数log_archive_dest和log_archive_duplex_dest
SYS@cdb1> alter system reset log_archive_dest;
System altered.
SYS@cdb1> alter system reset log_archive_duplex_dest;
System altered.
--重启数据库才生效
SYS@cdb1> select name,value from v$parameter where name in('log_archive_dest','log_archive_duplex_dest');
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
log_archive_dest
log_archive_duplex_dest
Ⅲ.设置多个归档目标
规则:
本地目标
SYS@cdb1> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/oradata/CDB1/archlog/arch01n';
System altered.
快速恢复区(闪回区)
SYS@cdb1> alter system set log_archive_dest_2='LOCATION=USE_DB_RECOVER_FILE_DEST';
System altered.
远程服务器
SYS@cdb1> alter system set log_archive_dest_21='SERVICE=demo';
System altered.
Ⅳ设置归档文件名格式
设置LOG_ARCHIVE_FORMAT初始化参数,使用%t将线程号作为文件名的一部分,使用%s包括日志序列号,使用%r包括resetlogs ID(ub4中表示的时间戳值)。使用大写字母(%T、%S和%R)将文件名左侧填充为零。
LOG_ARCHIVE_FORMAT = arch_%t_%s_%r.arc
2.归档目标的状态
①状态分类
每个归档目标都具有以下可变特征,这些特征决定了其状态:
Valid/Invalid:指示磁盘位置或服务名称信息是否已指定且有效
Enabled/Disabled:指示位置的可用性状态以及数据库是否可以使用目标
Active/Inactive:指示访问目标是否有问题
②查看状态(v$archive_dest)
SYS@cdb1> select dest_name ,status,target from v$archive_dest;
DEST_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
STATUS TARGET
--------- ----------------
LOG_ARCHIVE_DEST_1
VALID PRIMARY
LOG_ARCHIVE_DEST_2
VALID PRIMARY
LOG_ARCHIVE_DEST_3
INACTIVE PRIMARY
③调整归档目标状态
LOG_ARCHIVE_DEST_STATE_n值说明:
ENABLE表示数据库可以使用目标。
DEFER表示该位置被临时禁用。
ALTERNATE表示目标是备用的。备用目标的可用性状态为“延迟”
RESET表示重置为DEFER
SYS@cdb1> alter system set log_archive_dest_state_1=alternate;
System altered.
SYS@cdb1> select dest_name ,status,target from v$archive_dest;
DEST_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
STATUS TARGET
--------- ----------------
LOG_ARCHIVE_DEST_1
ALTERNATE PRIMARY
LOG_ARCHIVE_DEST_2
VALID PRIMARY
LOG_ARCHIVE_DEST_3
INACTIVE PRIMARY
3.设置备用归档目标
①设置log_archive_dest_8作为log_archive_dest_9的备用归档目标
SYS@cdb1> alter system set log_archive_dest_8='LOCATION=/u01/app/oracle/oradata/CDB1/archlog/arch08n';
System altered.
SYS@cdb1> alter system set log_archive_dest_9='LOCATION=/u01/app/oracle/oradata/CDB1/archlog/arch09n MAX_FAILURE=1 ALTERNATE=LOG_ARCHIVE_DEST_8';
System altered.
SYS@cdb1> alter system set log_archive_dest_state_8=alternate;
System altered.
②查看设置
五、管理归档失败
1.设置成功目标最小数目
参数:LOG_ARCHIVE_MIN_SUCCEED_DEST
确定了数据库在重新使用联机日志文件之前必须成功将重做日志组存档到的最小目标数。默认值为1。值的范围为归档目标的数目
SYS@cdb1> show parameter log_archive_min
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_min_succeed_dest integer 1
2.重新归档失败的归档文件(reopen)
当不能成功归档,数据库会停止,有三种方式处理这种情况:
①设置log_archive_dest_n的reopen属性
reopen表示在失败后n秒重新尝试归档
SYS@cdb1> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/oradata/CDB1/archlog/arch01n reopen=200';
System altered.
SYS@cdb1> select dest_name,destination,reopen_secs from v$archive_dest where lower(dest_name)='log_archive_dest_1';
DEST_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DESTINATION
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REOPEN_SECS
-----------
LOG_ARCHIVE_DEST_1
/u01/app/oracle/oradata/CDB1/archlog/arch01n
200
②手工归档
alter database archivelog manual
③删除这个归档目的(reset参数方式)
alter system reset log_archive_dest_8
六、设置归档进程的跟踪输出
1.设置参数LOG_ARCHIVE_TRACE
ARCn进程会将一些信息写到跟踪文件,可以通过设置参数LOG_ARCHIVE_TRACE指定跟踪级别
跟踪级别对应的含义:
跟踪级别 | 含义 |
0 | 停用归档日志跟踪,这是缺省值 |
1 | 跟踪日志文件归档 |
2 | 跟踪每个归档日志目的地状态 |
4 | 跟踪归档的操作阶段 |
8 | 跟踪归档日志目的地活动 |
16 | 跟踪归档日志目的地地详细活动 |
32 | 跟踪归档日志目的地地参数修正 |
64 | 跟踪ARCn进程状态活动 |
128 | 跟踪FAL(Fetch Archived Log) 服务器的活动 |
256 | 支持将来版本 |
512 | 跟踪异步日志活动 |
1024 | RFS物理客户跟踪 |
2048 | ARCn/RFS跟踪 |
4096 | 跟踪实时应用 |
通过指定一个等于要跟踪的各个级别总和的值,可以组合跟踪级别。例如,设置LOG_ARCHIVE_TRACE=12将生成跟踪级别8和4的输出。可以为主数据库和任何备用数据库设置不同的值
SYS@cdb1> show parameter log_archive_trace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_trace integer 0
SYS@cdb1> alter system set log_archive_trace=12;
System altered.
SYS@cdb1> show parameter log_archive_trace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_trace integer 12
七、相关视图
1.视图描述
视图 | 含义 |
V$DATABASE | 显示数据库是否处于ARCHIVELOG或NOARCHIVELOG模式,以及是否已指定手动(归档模式) |
V$ARCHIVED_LOG | 显示控制文件中的历史存档日志信息。如果使用恢复目录,则RC_ARCHIVED_LOG视图包含类似的信息 |
V$ARCHIVE_DEST | 描述当前实例、所有存档目标以及这些目标的当前值、模式和状态 |
V$ARCHIVE_PROCESSES | 显示有关实例的各种存档进程状态的信息 |
V$BACKUP_REDOLOG | 包含有关存档日志的任何备份的信息。如果使用恢复目录,RC_BACKUP_REDOLOG将包含类似的信息 |
V$LOG | 显示数据库的所有重做日志组,并指示哪些需要存档 |
V$LOG_HISTORY | 包含日志历史记录信息,例如哪些日志已存档以及每个已存档日志的SCN范围 |
2.archive log list命名
SYS@cdb1> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/oradata/CDB1/archlog/arch09n
Oldest online log sequence 22
Next log sequence to archive 25
Current log sequence 25