暂无图片
暂无图片
14
暂无图片
暂无图片
暂无图片

Oracle之归档重做日志管理

原创 周波 云和恩墨 2023-01-16
2633

一、什么是归档重做日志

  Oracle数据库允许您将已填充的重做日志文件组保存到一个或多个脱机目的地,统称为归档重做日志
  将重做日志文件转换为归档重做日志文件的过程称为归档。只有当数据库以ARCHIVELOG模式运行时,才可能执行此过程。您可以选择自动归档或手动归档。
  归档重做日志文件是重做日志组中某个已填充的成员的一个副本。它包括重做条目和重做日志组中相同成员的唯一日志序列号。例如,如果对重做日志进行了多路复用,如果组1包含相同的成员文件a_log1和b_log1,那么归档进程(ARCn)将归档其中一个成员文件。如果a_log1被损坏,那么ARCn仍然可以归档相同的b_log1。归档重做日志包含自启用归档后创建的每个组的副本。
  当数据库以ARCHIVELOG 模式运行时,在重做日志组被归档之前,日志写进程 (LGWR) 无法重用并覆盖该重做日志组。启用自动归档功能后,后台进程ARCn会自动执行归档操作。数据库根据需要启动多个归档进程,以确保已填充的重做日志的归档不会落后。
  你可以使用归档重做日志文件:

  • 恢复数据库
  • 更新备用数据库
  • 使用LogMiner实用程序获取关于数据库历史的信息

二、在 NOARCHIVELOG 和 ARCHIVELOG 模式之间进行选择

  您必须选择以NOARCHIVELOG模式还是ARCHIVELOG模式运行数据库。
  是否启用对已填充的重做日志文件组的归档取决于运行在数据库上的应用程序对可用性和可靠性要求。如果您不能承受在磁盘故障时丢失数据库中的任何数据,则使用ARCHIVELOG模式。已填充的重做日志文件的归档可能需要执行额外的管理操作。

1.以NOARCHIVELOG模式运行数据库

  当您以NOARCHIVELOG模式运行数据库时,您将禁用重做日志的归档功能。
  数据库控制文件表明已填充的组不需要归档。因此,当一个已填充的组在日志切换后变为非活动时,该组可被LGWR重用。
  NOARCHIVELOG 模式可保护数据库免受实例故障的影响,但不能保护数据库免受介质故障的影响。只有存储在联机重做日志组中的对数据库的最新更改才可用于实例恢复。如果在数据库处于NOARCHIVELOG模式时发生介质故障,则只能将数据库恢复到最近的完全数据库备份点。无法恢复该备份之后的事务。
  在NOARCHIVELOG模式下,您不能执行联机表空间备份,也不能使用以前在数据库处于ARCHIVELOG模式时进行的联机表空间备份。要还原以NOARCHIVELOG模式运行的数据库,只能使用在数据库关闭时进行的整个数据库备份。因此,如果决定以NOARCHIVELOG模式操作数据库,请定期、频繁地对整个数据库进行备份。

2.以ARCHIVELOG模式运行数据库

  当以ARCHIVELOG模式运行数据库时,会启用重做日志的归档功能。
  数据库控制文件表明已填充的重做日志文件组在被归档之前不能被LGWR重用。重做日志切换发生后,已填充的组立即可用于归档。

  归档已填充的组有以下优点:

  • 数据库备份,以及联机重做日志文件和归档重做日志文件,可以保证在操作系统故障或磁盘故障时可以恢复所有已提交的事务。
  • 如果使存档日志保持可用,则可以使用在数据库打开和系统正常使用时创建的备份。
  • 通过将原始归档重做日志文件持续应用于备用数据库,可以使备用数据库与其原始数据库保持最新状态。

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

在这种情况下,只有一个归档进程(ARC0)和一个归档重做日志。它显示如下序列:

  • LGWR写入联机重做日志1 (Log0001)。
  • 当Log0001已满时,ARC0将其写入归档重做日志。
  • LGWR写入联机重做日志2 (Log0002)。
  • 当Log0002已满时,ARC0将其写入归档重做日志。
  • 写入联机重做日志文件3 (Log0003)。
  • 当Log0003已满时,ARC0将其写入归档重做日志。
  • LGWR写入联机重做日志4 (Log0004)。
  • 当Log0004已满时,ARC0将其写入归档重做日志。

三、控制归档

  您可以设置数据库的归档模式,并调整归档进程的数量。

1.设置最初的数据库归档模式

  你可以在CREATE database语句中设置初始归档模式作为数据库创建的一部分。
通常,您可以在数据库创建时使用默认的NOARCHIVELOG模式,因为不需要对该进程生成的重做信息进行存档。数据库创建完成后,需要确定是否更改初始归档模式。
  如果指定ARCHIVELOG模式,则必须设置初始化参数,以指定归档重做日志文件的目标

2.更改数据库的归档模式

  要更改数据库的存档模式,请使用带有ARCHIVELOG或NOARCHIVELOG子句的ALTER database语句。
  要更改归档模式,必须以管理员权限(AS SYSDBA)连接到数据库。

将数据库归档模式从NOARCHIVELOG切换为ARCHIVELOG:

# 1.设置归档相关的初始化参数
alter system set log_archive_dest_1 = "location=/u01/arch";
alter system set log_archive_format = '%t_%s_%r.dbf' scope=spfile;

# 2.关闭数据库实例
SYS@orcl> shutdown immediate;
## 在切换数据库归档模式之前,必须首先关闭打开的数据库并关闭所有相关实例。
## 如果有数据文件需要介质恢复,则不能将模式从ARCHIVELOG更改为NOARCHIVELOG。

# 3.启动数据库到挂载状态
startup mount;

# 4.修改数据库归档模式。然后打开数据库进行正常操作
SYS@orcl> alter database archivelog;
Database altered.

SYS@orcl> alter database open;
Database altered.

3.执行手动归档

  为了方便和高效,自动归档通常是最好的。但是,您可以将数据库配置为仅手动归档。
  当您在手动ARCHIVELOG模式下操作数据库时,您必须归档已填充的非活动重做日志文件组,否则您的数据库操作可能会暂时挂起。

在手动归档模式下操作数据库:

# 1.步骤和更改数据库的归档模式一样,归档相关的初始化参数已经配置
## 以具有管理员权限的用户连接到数据库,关闭数据库,然后启动数据库到挂载状态
sqlplus / as sysdba
SYS@orcl> shutdown immediate;
SYS@orcl> startup mount;

## 执行以下命令开启手动归档
SYS@orcl> alter database archivelog manual;
## 查看数据库归档状态
SYS@orcl> select log_mode from v$database;
LOG_MODE
------------
MANUAL

# 2.确保数据库已挂载或处于打开状态。
## 使用带有ARCHIVE LOG子句的ALTER SYSTEM语句手动归档已填充的重做日志文件。
## 打开数据库
SYS@orcl> alter database open;
Database altered.

## 如果当前没有需要归档的日志,然后手动归档报错,如下:
SYS@orcl> alter system archive log all;
alter system archive log all
*
ERROR at line 1:
ORA-00271: there are no logs that need archiving

## 强制切换日志,查看日志组状态
SYS@orcl> alter system switch logfile;
System altered.

SYS@orcl> select group#,sequence#,status,archived from v$log;
    GROUP#  SEQUENCE# STATUS	       ARC
---------- ---------- ---------------- ---
	 1	  109 ACTIVE	       NO
	 2	  110 CURRENT	       NO
	 3	  108 INACTIVE	       YES
	 4	  107 INACTIVE	       YES
  
## 此时存在未归档的日志,下面的语句将归档所有未归档的重做日志文件:
SYS@orcl> alter system archive log all;
System altered.

## 再次查看日志组状态发现刚才未归档的日志已经归档

  使用手动归档模式时,不能在归档目标中指定任何备用数据库。
  即使启用了自动归档,您也可以使用手动归档来执行以下操作,例如将已填充的非活动重做日志成员组重新归档到另一个位置。在这种情况下,实例有可能在您完成手动归档之前重用重做日志组,从而覆盖文件。如果发生这种情况,数据库将向警报日志写入错误消息。

4.调整归档进程数

  LOG_ARCHIVE_MAX_PROCESSES初始化参数指定数据库初始启动的ARCn进程的数量。默认为四个进程。
  为了避免启动额外的ARCn进程的运行时开销:

  • 设置LOG_ARCHIVE_MAX_PROCESSES初始化参数,以指定在实例启动时最多启动30个ARCn进程。

  LOG_ARCHIVE_MAX_PROCESSES参数是动态的,因此可以使用ALTER SYSTEM语句更改它。

# 下面的语句配置数据库在启动时启动6个ARCn进程:
SYS@orcl> alter system set log_archive_max_processes = 6;
System altered.

  该语句还对当前运行的实例立即生效。它将当前运行的ARCn进程的数量增加或减少到6个。

四、指定归档目标

  在可以归档重做日志之前,必须确定要归档到的目标,并熟悉各种目标状态。

1.设置归档目标的初始化参数

  您可以选择将重做日志归档到单个目标地或多个目标。
  目标可以是本地的——在本地文件系统或Oracle自动存储管理(ASM)磁盘组内——也可以是远程的(在备用数据库上)。当归档到多个目标时,每个已填充的重做日志文件的副本将被写入每个目标。这些冗余副本有助于确保归档日志在某个目标发生故障时始终可用。

只归档到一个目标:

  • 使用LOG_ARCHIVE_DEST初始化参数指定目标。

要归档到多个目标

  • 选择使用LOG_ARCHIVE_DEST_n初始化参数存档到两个或多个位置,或者使用LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST初始化参数仅归档到主要和次要目标。

  对于本地目标,除了本地文件系统或Oracle ASM磁盘组之外,还可以将其归档到快速恢复区域。数据库使用Fast Recovery Area存储与备份和恢复相关的各种文件并自动管理其磁盘空间。
  通常,在数据库规划期间确定归档日志目标,并在数据库安装期间为归档目标设置初始化参数。但是,您可以在数据库运行后使用ALTER SYSTEM命令动态添加或更改归档目标。您所做的任何目标更改都将在下一次日志切换(自动或手动)时生效。

下表总结了归档目标备选方案

方法 初始化参数 主机 例子
1 LOG_ARCHIVE_DEST_n
where:n 是 1 到 31 之间的整数。存档目标 1 到 10 可用于本地或远程位置。存档目标 11 到 31 仅适用于远程位置。
本地或远程 LOG_ARCHIVE_DEST_1 = 'LOCATION=/disk1/arc’
LOG_ARCHIVE_DEST_2 = 'LOCATION=/disk2/arc’
LOG_ARCHIVE_DEST_3 = ‘SERVICE=standby1’
2 LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST 仅本地 LOG_ARCHIVE_DEST = '/disk1/arc’
LOG_ARCHIVE_DUPLEX_DEST = ‘/disk2/arc’
(1)方法一:使用LOG_ARCHIVE_DEST_n参数

  您可以使用LOG_ARCHIVE_DEST_n初始化参数为归档日志指定不同的目标。
设置LOG_ARCHIVE_DEST_n初始化参数(n是从1到31的整数),从1到31指定。每个数字后缀的参数惟一地标识一个单独的目标。

关键字 含义 例子
LOCATION 本地文件系统位置或Oracle ASM磁盘组 LOG_ARCHIVE_DEST_n = 'LOCATION=/disk1/arc’
LOG_ARCHIVE_DEST_n = ‘LOCATION=+DGROUP1/orcl/arc_1’
LOCATION 快速恢复区域 LOG_ARCHIVE_DEST_n = ‘LOCATION=USE_DB_RECOVERY_FILE_DEST’
SERVICE 通过Oracle Net服务名远程存档。 LOG_ARCHIVE_DEST_n = ‘SERVICE=standby1’

如果使用LOCATION关键字,请指定以下之一:

  • 操作系统本地文件系统中的有效路径名
  • Oracle ASM磁盘组
  • 关键字USE_DB_RECOVERY_FILE_DEST表示快速恢复区

  如果指定SERVICE,则提供一个网络服务名称,Oracle net可以将其解析为备用数据库的连接描述符。连接描述符包含连接到远程数据库所需的信息。

# 1.设置LOG_ARCHIVE_DEST_n初始化参数,例如:
alter system set log_archive_dest_1 = "location=/u01/arch";

# 2.(可选)设置 LOG_ARCHIVE_FORMAT初始化参数
alter system set log_archive_format = '%t_%s_%r.dbf' scope=spfile;

  使用%t将线程号作为文件名的一部分,使用%s包括日志序列号,使用%r包括resetlogs ID(一个用ub4表示的时间戳值)。使用大写字母(%T、%S和%R)在文件名左侧填充零。
  相同的resetlogs ID表明这些文件都来自同一个数据库化身。

说明当您包含LOG_ARCHIVE_FORMAT参数时,数据库需要指定resetlogs ID (%r)。此参数的默认值依赖于操作系统。当您使用RESETLOGS选项打开数据库时,数据库的版本会发生变化。指定%r会使数据库捕获归档重做日志文件名中的resetlogs ID。

(2)方法二:使用LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST

  最多可以指定两个位置,使用LOG_ARCHIVE_DEST参数指定主要的归档目标,使用LOG_ARCHIVE_DUPLEX_DEST指定可选的次要归档目标。
  所有位置必须是本地的。每当数据库归档重做日志时,它都会将其归档到由任意一组参数指定的每个目标。

# 1.为LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST参数指定目标(也可以使用ALTER SYSTEM语句动态指定LOG_ARCHIVE_DUPLEX_DEST)。
## (1)创建本地归档目录
[oracle@oracle4 ~]$ mkdir /u01/arch/p_logs
[oracle@oracle4 ~]$ mkdir /u01/arch/s_logs
## (2)如果你设置了DB_RECOVERY_FILE_DEST参数,需要取消设置,否则会提示如下错:
SYS@orcl> alter system set log_archive_dest='location=/u01/arch/p_logs';
alter system set log_archive_dest='location=/u01/arch/p_logs'
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16018: cannot use LOG_ARCHIVE_DEST with LOG_ARCHIVE_DEST_n or DB_RECOVERY_FILE_DEST

SYS@orcl> show parameter db_recovery_file_dest;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest		     string	 /u01/app/oracle/recovery_area
db_recovery_file_dest_size	     big integer 8256M

### 取消db_recovery_file_dest的参数设置
SYS@orcl> alter system set db_recovery_file_dest = '';
System altered.

## (3)设置如下初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST
SYS@orcl> alter system set log_archive_dest='/u01/arch/p_logs';
System altered.
SYS@orcl> alter system set log_archive_duplex_dest='/u01/arch/s_logs';
System altered.

# 2.(可选)设置 LOG_ARCHIVE_FORMAT初始化参数
alter system set log_archive_format = '%t_%s_%r.dbf' scope=spfile;

# 3.如果运行的数据库已经开启的归档,那么强制进行日志切换,然后查看
SYS@orcl> alter system switch logfile;
System altered.
## 查看
[oracle@oracle4 /u01/arch]$ ll s_logs/
total 13900
-rw-r----- 1 oracle dba 14233600 Dec 11 20:08 1_119_1118265957.dbf
[oracle@oracle4 /u01/arch]$ ll p_logs/
total 13900
-rw-r----- 1 oracle dba 14233600 Dec 11 20:08 1_119_1118265957.dbf

说明如果配置了快速恢复区域(通过设置DB_RECOVERY_FILE_DEST和DB_RECOVERY_FILE_DEST_SIZE参数),并且不指定任何本地归档目标,数据库将自动选择快速恢复区域作为本地归档目标,并将LOG_ARCHIVE_DEST_1设置为USE_DB_RECOVERY_FILE_DEST。

警告您必须确保归档日志目标一直都有足够的磁盘空间。如果数据库在尝试归档日志文件时遇到磁盘已满错误,则会发生致命错误,数据库将停止响应。您可以在警报日志中查看磁盘已满消息。

2.使用日志归档目标组扩展备用目标

  您可以使用日志归档目标组来扩展备用归档目标的数量。、

(1)关于日志归档目标组

  一个日志归档目标组可以指定多个归档目标,组内的目标可以按优先级排列。您可以指定多个组来扩展数据库可能的归档目标数量。
  要指定日志归档目标组,请使用LOG_ARCHIVE_DEST_n初始化参数的group属性。一个组中最多可以包含30个日志归档目标。每个组中有一个成员是活动的,其他成员在活动目标发生故障时可用。如果活动的目标变成非活动的,那么只要组中有一个或多个可用,Oracle数据库就会切换到一个可用的目标。通过使用PRIORITY属性确定目标优先级,可以指示首先使用哪些目标。
  日志归档目标组由组号引用,组号是在创建组时指定的。最多可以有八组。要指定重做数据在组中的归档位置,所有日志归档目标必须指定SERVICE属性。若要对组中的目标进行优先级排序,请将目标的PRIORITY属性设置为1到8之间的整数。数字越小优先级越高。优先级决定当数据库被挂载或活动目标故障时,组中的哪个目标可以成为活动的。例如,PRIORITY值为2的优先级高于PRIORITY值为7的优先级。因此,如果组中当前PRIORITY值为1的活动目标变成非活动,则PRIORITY值为2的目标在PRIORITY值为7的目标之前使用。如果一个目标没有设置PRIORITY属性,则缺省值为1。
  当以前故障的目标可用时,也会考虑优先级。如果一个活动的目标失败,Oracle数据库会切换到一个优先级低的目标,当它再次可用时,Oracle数据库会切换回优先级高的目标。例如,如果优先级为1的活动目标变为不活动,而Oracle数据库切换到优先级为2的目标,那么当目标再次可用时,Oracle数据库切换回优先级为1的目标,即使优先级为2的目标没有失败。
  但是,分配给同一个组的多个目标可以具有相同的优先级。例如,可以有三个优先级为1的目标。在这样的组中,活动目标的故障将导致切换到具有相同优先级的另一个成员。在这种情况下,当原始目标再次可用时,不会切换回它,因为这两个目标具有相同的优先级。如果在第一个目标再次可用后第二个目标失败,则数据库将切换到第一个目标或组中具有相同优先级的另一个目标。

(2)指定日志归档目标组

  使用LOG_ARCHIVE_DEST_n初始化参数的GROUP属性指定日志归档目标组。
  您最多可以创建8个日志归档目标组,每个组最多可以指定30个目标。
  要指定日志归档目标组,数据库必须运行在ARCHIVELOG模式下。

# 1.指定2个日志归档目的组(1和2),每个组中指定2个日志归档目的。
## 这里只是给出了设置的例子,
LOG_ARCHIVE_DEST_1 = 'SERVICE=SITEa VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=1'
LOG_ARCHIVE_DEST_2 = 'SERVICE=SITEb VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=1'

LOG_ARCHIVE_DEST_4 = 'SERVICE=SITE1 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=2 PRIORITY=1'
LOG_ARCHIVE_DEST_5 = 'SERVICE=SITE2 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=2 PRIORITY=2'

3.了解归档目标状态

  有几个变量决定归档目标的状态。
每个归档目标具有以下变量特征,这些变量特征决定了它的状态:

  • Valid/Invalid:指示磁盘位置或服务名称信息是否已指定且有效
  • Enabled/Disabled:指示位置的可用性状态以及数据库是否可以使用目标
  • Active/Inactive:指示访问目标是否有问题

  这些特征的几种组合是可能的。查询V$ARCHIVE_DEST视图可以获得实例每个目标的当前状态和其他信息。
  LOG_ARCHIVE_DEST_STATE_n(其中n是1到31之间的整数)初始化参数允许您控制指定目标(n)的可用性状态。

  • ENABLE:表示数据库可以使用目标。
  • DEFER:指示暂时禁用该位置。
  • ALTERNATE:表示目标是备用的。备用目标的可用状态为DEFER。如果它的父目标失败,则备用目标的可用性状态变为ENABLE。不能为LOG_ARCHIVE_DEST_11到LOG_ARCHIVE_DEST_31指定ALTERNATE。

4.指定备用目标

  若要指定某个位置仅在另一个目标发生故障时才作为归档目标,可以将其设置为备用目标。本地和远程目标都可以作为备用。
  如下演示当一个备用目标的父目标出现故障时,将备用目标作为归档目标

# 1.下面的例子使LOG_ARCHIVE_DEST_2作为LOG_ARCHIVE_DEST_1的备用:
SYS@orcl> alter system set log_archive_dest_2 = 'location=/u01/arch/s_logs/';
System altered.
SYS@orcl> alter system set log_archive_dest_1 = 'location=/u01/arch/p_logs/ alternate=log_archive_dest_2 max_failure=1';
System altered.
SYS@orcl> alter system set log_archive_dest_state_2 = alternate;
System altered.

# 2.查看归档目标信息
SYS@orcl> select dest_name,status,destination from v$archive_dest;
DEST_NAME	     STATUS    DESTINATION
-------------------- --------- ------------------------------
LOG_ARCHIVE_DEST_1   VALID     /u01/arch/p_logs/
LOG_ARCHIVE_DEST_2   ALTERNATE /u01/arch/s_logs/


# 3.强制日志切换
SYS@orcl> alter system switch logfile;
System altered.

## 重做日志会归档到log_archive_dest_1指定的目录下:
[oracle@oracle4 /u01/arch]$ ll p_logs
total 780
-rw-r----- 1 oracle dba 275968 Dec 12 20:12 1_139_1118265957.dbf


# 4.模拟当log_archive_dest_1,不可用时
## 删除目录/u01/arch/p_logs
[oracle@oracle4 /u01/arch]$ rm -rf p_logs

## 再次进行日志切换,发现日志归档到了log_archive_dest_2指定的目录中
SYS@orcl> alter system switch logfile;
System altered.
[oracle@oracle4 /u01/arch]$ ll s_logs/
total 56
-rw-r----- 1 oracle dba 56320 Dec 12 20:13 1_140_1118265957.dbf
## 查看归档目标的状态信息
SYS@orcl> select dest_name,status,destination from v$archive_dest;

DEST_NAME	     STATUS    DESTINATION
-------------------- --------- ------------------------------
LOG_ARCHIVE_DEST_1   DEFERRED  /u01/arch/p_logs/
LOG_ARCHIVE_DEST_2   VALID     /u01/arch/s_logs/

# 5.当父目标恢复访问时,想要使用父目标作为归档目标
## 创建刚刚删除的目录
[oracle@oracle4 /u01/arch]$ mkdir p_logs

## 修改归档目标状态
alter system set log_archive_dest_state_1 = enable;
alter system set log_archive_dest_state_2 = alternate;  ## 如果不做这一步,将会有两个有效的归档目标,在日志切换时,会日志归档到这两个目录中。

## 强制日志切换
alter system switch logfile;

五、关于日志传输方式

  归档日志到目标的传输方式分为正常归档传输和备用传输两种。正常传输涉及将文件传输到本地磁盘。备用传输涉及通过网络将文件传输到本地或远程备用数据库。

1.正常传输模式

  在正常传输模式下,归档目标是数据库服务器的另一个磁盘驱动器。
  在这种配置中,归档不会与实例所需的其他文件竞争,并且可以更快地完成。使用LOG_ARCHIVE_DEST_n或LOG_ARCHIVE_DEST参数指定目标。

2.备用传输模式

  在备用传输模式下,归档目标是本地或远程备用数据库。
说明您可以在本地磁盘上维护备用数据库,但Oracle强烈建议您通过在远程站点上维护备用数据库来最大限度地避免灾难。

六、管理归档目标故障

  有时归档目标会失败,在自动归档模式下操作时会导致问题。Oracle数据库提供过程来帮助您最小化与目标失败相关的问题。

1.指定成功目标的最小数目

  可选的初始化参数LOG_ARCHIVE_MIN_SUCCEED_DEST=n决定了数据库在重用联机日志文件之前必须成功归档重做日志组的最少目标数量。缺省值为1。如果使用双工,n的有效值为1到2;如果使用多路复用,n的有效值为1到31。

(1)指定必选和可选目标

  LOG_ARCHIVE_DEST_n初始化参数允许您指定目标是OPTIONAL(默认值)还是MANDATORY。
  LOG_ARCHIVE_MIN_SUCCEED_DEST=n参数使用所有MANDATORY目标加上一些非备用OPTIONAL目标来确定LGWR是否可以覆盖联机日志。适用规则如下:

  • 省略目标的MANDATORY属性与指定OPTIONAL相同。
  • 必须至少有一个本地目标,可以将其声明为OPTIONAL或MANDATORY。
  • MANDATORY属性只能为LOG_ARCHIVE_DEST_1到LOG_ARCHIVE_DEST_10目标指定。
  • 当您为LOG_ARCHIVE_MIN_SUCCEED_DEST=n指定一个值时,Oracle数据库将把至少一个本地目标视为MANDATORY,因为LOG_ARCHIVE_MIN_SUCCEED_DEST的最小值为1。
  • LOG_ARCHIVE_MIN_SUCCEED_DEST值不能大于目标的数量,也不能大于MANDATORY目标的数量加上OPTIONAL本地目标的数量。
  • 如果您DEFER一个MANDATORY目标,并且数据库重写了联机日志,而没有将归档日志传输到备用站点,那么您必须手动将日志传输到备用站点。

  如果要重复归档日志,可以使用LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST参数来确定哪些目标强制的或可选的。适用规则如下:

  • 由LOG_ARCHIVE_DEST声明的任何目标都是必选的。
  • 如果LOG_ARCHIVE_MIN_SUCCEED_DEST = 1,那么由LOG_ARCHIVE_DUPLEX_DEST声明的任何目标都是可选的,如果LOG_ARCHIVE_MIN_SUCCEED_DEST = 2,则是必选的。
(2)根据不同的场景指定成功目标的数量

a,归档到可选的本地目标的场景
  在这个场景中,假设您将归档到三个本地目标,每个目标都声明为OPTIONAL。
下表给出了在本例中LOG_ARCHIVE_MIN_SUCCEED_DEST=n的可能值。

含义
1 只有当至少一个OPTIONAL目标成功时,数据库才能重用日志文件。
2 只有当至少两个OPTIONAL目标成功时,数据库才能重用日志文件。
3 只有当所有OPTIONAL目标都成功时,数据库才能重用日志文件。
4 or greater ERROR: 该值大于目标数目。

  这个场景表明,即使您没有使用LOG_ARCHIVE_DEST_n参数显式地将任何目标设置为MANDATORY,当LOG_ARCHIVE_MIN_SUCCEED_DEST设置为1、2或3时,数据库也必须成功地归档到这些位置中的一个或多个。

b、归档到必选和可选目标的场景
  在这个场景中,您将归档到MANDATORY和OPTIONAL本地目标。
考虑这样一个情况:

  • 你指定了两个MANDATORY目标。
  • 你指定了两个OPTIONAL目标
  • 没有目标是备用数据库

  LOG_ARCHIVE_MIN_SUCCEED_DEST=n的可能值如下表所示:
|值 |含义|
|1 |数据库将忽略该值,并使用MANDATORY目标的数量(在本例中为2)。|
|2 |即使没有OPTIONAL目标成功,数据库也可以重用日志文件。|
|3 |只有当至少一个OPTIONAL目标成功时,数据库才能重用日志。|
|4 |只有当两个OPTIONAL目标都成功时,数据库才能重用日志。|
|5 or greater |ERROR: 该值大于目标数目。|

  本例表明,无论您是否将LOG_ARCHIVE_MIN_SUCCEED_DEST设置为归档到较少数量的目标,数据库都必须归档到指定为MANDATORY的目标。

2.向失败的目标中进行重新归档

  使用LOG_ARCHIVE_DEST_n参数的REOPEN属性指定在发生错误后,ARCn是否以及何时尝试重新归档到失败的目标。REOPEN适用于所有错误,而不仅仅是OPEN错误。
  reopen =n设置ARCn尝试重新打开失败目标之前的最小秒数。n的缺省值是300秒。值为0等同于关闭reopen属性;当一个目标失败后,ARCn将不会尝试向其中归档日志。如果没有指定REOPEN关键字,则在一个目标出现错误后,ARCn将永远不会重新打开该目标。
不能使用REOPEN指定ARCn重新连接和传输归档日志的尝试次数。REOPEN尝试要么成功要么失败。
  当为OPTIONAL目标指定REOPEN时,如果出现错误,数据库可以重写联机日志。如果为MANDATORY目标指定reopen,则当生产数据库无法成功归档时,数据库将暂停生产数据库。在这种情况下,考虑以下选项:

  • 手动归档到失败的目标。
  • 通过延迟目标、将目标指定为可选的或更改服务来更改目标。
  • 删除目标

使用reopen关键字时,需要注意以下几点:

  • ARCn仅在从日志文件的开头开始归档操作时重新打开目标,而不会在当前操作期间重新打开目标。ARCn总是从头重试复制日志。
  • 如果指定了REOPEN(指定时间为默认值),ARCn将检查记录错误的时间加上REOPEN间隔是否小于当前时间。如果是,则ARCn重试日志复制。
  • REOPEN子句成功地影响了目标状态ACTIVE=TRUE。VALID和ENABLED状态不会改变。

七、控制归档日志进程生成的跟踪输出

  后台进程总是在适当的时候写入跟踪文件。对于archivelog进程,您可以控制生成到跟踪文件的输出。
  要控制归档日志进程生成到跟踪文件的输出,请执行以下操作:

  • 设置LOG_ARCHIVE_TRACE初始化参数以指定跟踪级别,例如0、1、2、4、8等等。

  您可以通过指定一个值来组合跟踪级别,该值等于您想要跟踪的各个级别的总和。例如,设置LOG_ARCHIVE_TRACE=12将生成跟踪级别8和4的输出。可以为主数据库和任何备用数据库设置不同的值。
  LOG_ARCHIVE_TRACE参数的默认值是0。在这个级别上,archivelog进程为错误条件生成适当的警报和跟踪条目。

# 可以使用ALTER SYSTEM语句动态更改此参数的值。例如:
SYS@orcl> alter system set log_archive_trace = 12;
System altered.

  以这种方式发起的更改将在下一个归档操作开始时生效。

八、归档重做日志文件视图

  您可以查询一组动态性能视图,以获取归档重做日志文件的相关信息。

动态性能视图 描述
V$DATABASE 显示数据库是ARCHIVELOG模式还是NOARCHIVELOG模式,以及是否指定了MANUAL(存档模式)。
V$ARCHIVED_LOG 显示控制文件中的历史归档日志信息。如果使用恢复目录,RC_ARCHIVED_LOG视图包含类似的信息。
V$ARCHIVE_DEST 描述当前实例、所有归档目标以及这些目标的当前值、模式和状态。
V$ARCHIVE_PROCESSES 显示关于实例的各种存档进程状态的信息。
V$BACKUP_REDOLOG 包含归档日志的任何备份的相关信息。如果使用恢复目录,RC_BACKUP_REDOLOG包含类似的信息。
V$LOG 显示数据库的所有重做日志组,并指示需要存档的重做日志组。
V$LOG_HISTORY 包含日志历史信息,例如哪些日志已存档,以及每个存档日志的SCN范围。
# 1.查询显示需要归档的重做日志组
SYS@orcl> select group#,archived from v$log;

    GROUP# ARC
---------- ---
	 1 YES
	 2 NO
	 3 YES
	 4 YES

# 2.查看当前的归档模式,查询V$DATABASE视图:
SYS@orcl> select log_mode from v$database;

LOG_MODE
------------
ARCHIVELOG

# 3.使用ARCHIVE LOG LIST命令:
SYS@orcl> archive log list;
Database log mode	       Archive Mode
Automatic archival	       Enabled
Archive destination	       /u01/arch/s_logs/
Oldest online log sequence     143
Next log sequence to archive   146
Current log sequence	       146

  这个显示告诉你所有关于当前实例的归档重做日志设置的必要信息:

  • 数据库当前运行在ARCHIVELOG模式下。
  • 启用了自动归档。
  • 归档重做日志目标为/u01/arch/s_logs/
  • 最旧的的已填充联机重做日志组的序列号为143。
  • 下一个要归档的已填充重做日志组的序列号为146。
  • 当前重做日志文件的序列号为146
最后修改时间:2023-01-16 18:50:31
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论