Oracle关于ARCHIVELOG DELETION POLICY的配置解释以及RMAN-08137/RMAN-08591的原因探究

 

Oracle关于ARCHIVELOG DELETION POLICY的配置解释以及RMAN-08137/RMAN-08591的原因探究

 

前言

关于ARCHIVELOG DELETION POLICY的配置和解释,百度答案存在很多的问题,大部分都描述不准确甚至是错误的。

于是花了将近3天在官网寻找答案并边做实验,整理如下的资料来说明归档删除策略。

整理By PiscesCanon,2021-03-01至2021-03-03。

 

几个RMAN的报错

  • RMAN-08137: WARNING: archived log not deleted, needed for standby or upstream capture process
  • RMAN-08137: WARNING: archive log not deleted as it is still needed

In newer versions, the error may be:
RMAN-08120:WARNING: archived log not deleted, not yet applied by standby

  • RMAN-08591: WARNING: invalid archivelog deletion policy

 

误区和感慨

以前一直以为归档删除策略就只是限制归档日志被误删除。

但是其实即便是设置TO NONE,那么如果归档日志没有被备份过且(且?)归档日志均已传输至所指定的所需远程目标LOG_ARCHIVE_DEST_n的话,那么也是没有办法被删除的。

以前还一直以为TO NONE就是随意删除归档日志。

另外归档删除策略对于BACKUP ... DELETE INPUTDELETE ARCHIVELOGDELETE OBSOLETE命令均生效。在10G中,如DELETE ARCHIVELOG或DELETE INPUT不遵守这个配置(参考文档 ID 1577382.1,文档描述不太明确,自己没验证)

另外,对于在FRA里边的归档日志,Oracle会根据策略自动删除。

总结就不总结了,详细看下边 。

 

归档删除策略的持久配置的描述

来源(有引用修改):RMAN CONFIGURE,11gR2。以下是谷歌浏览器右键翻译后如下。

特别需要注意有的字眼和前提条件。

语法元素 描述
ARCHIVELOG DELETION POLICY 确定何时可以删除已归档的重做日志文件。

归档的日志删除策略适用于所有日志归档目标,包括快速恢复区域该策略不适用于备份集中的归档重做日志文件。

数据库仅自动删除快速恢复区域中的已归档重做日志文件。您可以执行BACKUP ... DELETE INPUTDELETE ARCHIVELOGDELETE OBSOLETE命令从日志归档目标,包括恢复区手动删除日志。如果FORCE未在删除命令上指定,则这些删除命令将遵循已归档的日志删除策略。如果FORCE指定,则删除命令将忽略存档的日志删除策略。

在恢复区域中,数据库会尽可能长地保留符合删除条件的日志。需要磁盘空间时,数据库将首先删除最早的日志。当恢复区域处于磁盘压力下时,数据库可能会删除Oracle Streams所需的存档重做日志文件。

注意:删除策略不适用于外部归档的重做日志文件,这些文件是逻辑备用数据库为LogMiner会话接收的日志。 这些日志是从主数据库传输的,但是与普通的归档重做日志文件不同,它们具有不同的DBID。 无法在逻辑备用数据库上备份或还原外部归档的重做日志文件。

 

其他地方的说明:Configuring an Archived Redo Log Deletion Policy(11gR2)

TO APPLIED ON   [ALL] STANDBY 指定如果同时满足以下两个条件,则可以删除已归档的重做日志文件
  • 已将已归档的重做日志文件应用于所需的备用数据库。

  • BACKED UP ... TIMES TO DEVICE TYPE删除策略不需要日志如果BACKED UP未设置策略,则始终满足此条件。

考虑哪些远程目标取决于以下条件:

  • 如果未指定ALL,则在将归档的重做日志文件应用于所有mandatory远程目标之后,它们才有资格删除。

  • 如果指定ALL,则已归档的重做日志文件在所有远程目标(无论是否mandatory)上应用或消耗后才是具备条件的。

    例如,备用数据库sby1可能是唯一接收日志的远程目标,但是其他远程目标可以通过引用上的相同位置来应用日志sby1使用ALLsby1在不需要时立即将主数据库上的日志标记为已使用,但是直到该日志被引用相同位置的所有其他从属远程目标应用或使用后,才允许删除该日志。

注意:TO APPLIEDNONETO SHIPPED子句组合指定子句是无效

另请参见: Oracle Data Guard概念和管理以获取详细信息

TO NONE 禁用存档的日志删除策略。这是默认设置。

归档的重做日志文件可以位于快速恢复区域的内部或外部。可以通过手动命令删除任何位置的日志。数据库只能自动删除快速恢复区域中的日志。

如果将删除策略设置为NONE,则RMAN如果满足以下两个条件,则认为已归档的重做日志文件符合删除条件:

  • 归档的重做日志文件(无论是在Fast Recovery Area中还是在其外部)均已传输至所指定的所需远程目标LOG_ARCHIVE_DEST_n

  • Fast Recovery Area中的存档重做日志文件已至少备份一次到磁盘或SBT,或者根据备份保留策略,这些日志已过时。

    仅当guaranteed restore point不需要日志并且Flashback Database不需要日志时,备份保留策略才认为日志已过时。 如果日志创建时间晚于SYSDATE-'DB_FLASHBACK_RETENTION_TARGET',则Flashback Database需要已归档的重做日志文件。

例如,假设已将已归档的重做日志文件传输到所需的远程目标。 根据恢复窗口保留策略,日志已过时,但尚未备份。 在这种情况下,日志可以删除。 或者,假设日志已过时并且已备份到SBT,但尚未传输到所需的远程目标。 在这种情况下,日志不符合删除条件。

如果删除策略设置为NONE,并且对快速恢复区域之外的归档重做日志文件执行删除命令,则RMAN仅遵守在删除命令上指定的条件。

TO SHIPPED TO   [ALL] STANDBY 指定如果同时满足以下两个条件,则可以删除已归档的重做日志文件
  • 归档的重做日志文件已传输到所需的远程目标。

  • TO SHIPPED TO ... STANDBYTO APPLIED ON ... STANDBY删除策略不需要日志。 如果未设置任何备用删除策略,则始终满足此条件。

考虑哪些远程目标取决于以下条件:

  • 如果未指定ALL,则仅在传输到mandatory远程目标后才可以删除已归档的重做日志文件。

  • 如果指定ALL,则在转移到所有远程目标(无论是否mandatory)之后,都可以删除日志。

注意:TO SHIPPEDNONETO APPLIED子句组合指定子句是无效

另请参见: Oracle Data Guard概念和管理以获取详细信息

关于MANDATORY的含义,参考:Specifying Mandatory and Optional Destinations(11gR2)

 

在10gR2中关于归档日志删除策略的描述,貌似是在基于Fast Recovery Area的前提下来进行的。

语法:ARCHIVELOG DELETION POLICY TO ( APPLIED ON STANDBY | NONE | CLEAR )

FRA前提处:Flash Recovery Area中归档的重做日志文件的删除策略

PDF文档(引用如下):10g RMAN-Data Guard

The following CONFIGURE commands should be issued, after connecting to the primary database and recovery catalog:

  • CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY

By setting this configuration at the primary database, it will enable automatic deletion of archived logs on the primary database that have been applied to remote standby destinations. By default, this configuration requires that at least one remote destination is set to mandatory.

Note: Mandatory standby destination can impact the primary database if the standby destination cannot be reached. To enable this feature without using mandatory standby destination, refer to Metalink Note 331924.1 (RMAN backups in Max Performance/Max Availability Data Guard Environment).

 

The following commands should be issued, after connecting to the standby database server where backups are made, and the recovery catalog:

  • CONFIGURE ARCHIVELOG DELETION POLICY TO NONE

This will enable automatic deletion of archived logs on the standby database (where backups are being taken) that are outside of the retention period or have already been backed up to tape, if additional space is needed for new backups or archived logs.

 

The following commands should be issued, after connecting to each of the other standby database servers, and the recovery catalog:

  • CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY

By setting this configuration on each of the other standby databases (where backups are not being taken), it will enable automatic deletion of archived logs on this standby database that have been applied to all other remote standby destinations. By default, this configuration requires that at least one remote destination is set to mandatory.
Archived logs are deleted if space in the Flash Recovery Area needs to be reclaimed for new files.

Note: Mandatory standby destination can impact the primary database if the standby destination cannot be reached. To enable this feature without using mandatory standby destination, refer to Metalink Note 331924.1 (RMAN backups in Max Performance/Max Availability Data Guard Environment).

因此,若是手工删除,如果违反归档删除策略,就会报错RMAN-08137,更高版本为RMAN-08120(没有验证过)。

 

另外,对于子句TO APPLIED ON [ALL] STANDBY和子句TO SHIPPED TO [ALL] STANDBY在设置归档删除策略的时候,报错RMAN-08591: WARNING: invalid archivelog deletion policy

原因是因为默认情况下,归档删除策略是基于mandatory的,有隐含参数"_log_deletion_policy"控制。

SQL> create or replace view h$parameter as
  2  select a.ksppinm  name,
  3         a.ksppdesc description,
  4         b.ksppstvl session_value,
  5         c.ksppstvl system_value
  6    from x$ksppi a, x$ksppcv b, x$ksppsv c
  7   where a.indx = b.indx
  8     and a.indx = c.indx;

View created.

SQL> set line 500
SQL> col name for a25
SQL> col DESCRIPTION for a70
SQL> col SESSION_VALUE for a15
SQL> col SYSTEM_VALUE for a15
SQL> select * from h$parameter where name='_log_deletion_policy';

NAME                      DESCRIPTION                                                            SESSION_VALUE   SYSTEM_VALUE
------------------------- ---------------------------------------------------------------------- --------------- ---------------
_log_deletion_policy      archivelog deletion policy for mandatory/all destination               mandatory       mandatory

 

 

关于RMAN-08591,我测试了如下两条语句(测试版本为11.2.0.4.0):

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

 

前提条件log_archive_dest_Noptional,并且对应的log_archive_dest_state_N为enable。

如果不带'ALL',报错RMAN-08591。如果带'ALL',那就不会报错。

因为根据上边TO APPLIED ON[ALL] STANDBY的说明,带有'ALL'的时候,确定远程目标囊括了optionalmandatory。不带'ALL'则只包含mandatory

 

那么如何解决RMAN-08591

3种方法:

  1. 设置远程目标log_archive_dest_N的时候加上mandatory参数
  2. 使用如下语句来配置归档删除策略:
    CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
  3. 修改参数_log_deletion_policyALL文档 ID 1577382.1文档 ID 1602424.1表示修改此参数需要重启DB,但是实际可以动态修改并生效):
    alter system set "_log_deletion_policy"='ALL' scope=both;;

建议使用第2,3种方法,第1种在FRA空间紧张的时候会导致无法对redolog做归档。

 

参考

RMAN-08137 on Primary Database although Archive Destination to Standby is deferred (文档 ID 1380368.1)

RMAN-08137/RMAN-08120: Warning: Archive Log Not Deleted (文档 ID 374421.1)

V$ARCHIVED_LOG

配置RMAN清除已应用到备库的归档日志 (文档 ID 1577382.1)

最大性能/最大可用性 Data Guard 环境中的 RMAN 备份 (文档 ID 1602424.1)

RMAN "Applied On Standby" Throws RMAN-08591 And Archivelog Files Deleted Too Soon From Standby (文档 ID 1082886.1)

 

posted @ 2021-03-03 09:50  PiscesCanon  阅读(3595)  评论(0编辑  收藏  举报