一、归档重做日志介绍

Oracle数据库将已填充的重做日志文件组保存到一个或多个脱机目标,统称为归档重做日志。
只有在archivelog模式下才可以进行归档,归档方式分为自动和手动两种

存档的重做日志文件是重做日志组中已填充成员之一的副本。它包括重做日志组中相同成员的重做条目和唯一日志序列号。存档的重做日志包含自启用存档以来创建的每个组的副本。

当数据库在ARCHIVELOG模式下运行时,日志编写器进程(LGWR)无法重用并因此覆盖重做日志组,直到它被存档。启用自动存档时,后台进程ARCn会自动执行存档操作。数据库根据需要启动多个archiver进程,以确保已填充重做日志的归档不会落后。

归档日志文件的作用:
恢复数据库
更新备份数据库
使用LogMiner查看数据库历史记录的信息

二、选择归档模式

根据系统的可靠性和可用性来选择是否启用ARCHIVELOG模式,一般在开发环境对数据丢失不太重视可选择NOARCHIVELOG可以节省管理时间和空间。

1.非归档模式(NOARCHIVELOG)

数据库控制文件指示不需要归档已填充的redo 文件组。因此,当日志切换后填充的组变为非活动时,该组可供LGWR重用。

NOARCHIVELOG模式可以用于实例恢复,但不能用于介质恢复。当发生介质故障,数据只能恢复到最近一次全备份点。在这种模式下,无法执行在线表空间、redo 日志备份,所以必须经常进行全库备份。

2.归档模式(ARCHIVELOG)

数据库控制文件表明,LGWR无法重用一组已填充的重做日志文件,除非该组已存档。重做日志切换发生后,已填充的组立即可用于存档。

归档模式作用:
①数据库备份,通过在线日志和归档的重做日志文件,确保在操作系统或磁盘出现故障时恢复所有提交的事务。

②可以使用在数据库打开和正常系统使用时进行的备份。

③可以使备用数据库与其原始数据库保持最新状态。

、可以将实例配置为自动存档已填充的重做日志文件,也可以手动存档。为了方便和高效,自动归档通常是最好的。如图说明了archiver进程(本图中的ARC0)如何将填充的重做日志文件写入数据库存档的重做日志。

archive什么文件 archive file是什么文件_hive


在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’

archive什么文件 archive file是什么文件_archive什么文件_02

②更改最大归档进程数
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进程

archive什么文件 archive file是什么文件_数据库_03

四、指定归档目标
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

Ⅲ.设置多个归档目标

规则:

archive什么文件 archive file是什么文件_数据库_04


本地目标

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.
②查看设置

archive什么文件 archive file是什么文件_hive_05

五、管理归档失败
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