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 INPUT
,DELETE
ARCHIVELOG
或DELETE OBSOLETE
命令均生效。在10G中,如DELETE ARCHIVELOG或DELETE INPUT不遵守这个配置(参考文档 ID 1577382.1,文档描述不太明确,自己没验证)
另外,对于在FRA里边的归档日志,Oracle会根据策略自动删除。
总结就不总结了,详细看下边 。
归档删除策略的持久配置的描述
来源(有引用修改):RMAN CONFIGURE,11gR2。以下是谷歌浏览器右键翻译后如下。
特别需要注意有的字眼和前提条件。
语法元素 | 描述 |
ARCHIVELOG DELETION POLICY | 确定何时可以删除已归档的重做日志文件。
归档的日志删除策略适用于所有日志归档目标,包括快速恢复区域。该策略不适用于备份集中的归档重做日志文件。 数据库仅自动删除快速恢复区域中的已归档重做日志文件。您可以执行 在恢复区域中,数据库会尽可能长地保留符合删除条件的日志。需要磁盘空间时,数据库将首先删除最早的日志。当恢复区域处于磁盘压力下时,数据库可能会删除Oracle Streams所需的存档重做日志文件。 注意:删除策略不适用于外部归档的重做日志文件,这些文件是逻辑备用数据库为LogMiner会话接收的日志。 这些日志是从主数据库传输的,但是与普通的归档重做日志文件不同,它们具有不同的DBID。 无法在逻辑备用数据库上备份或还原外部归档的重做日志文件。 其他地方的说明:Configuring an Archived Redo Log Deletion Policy(11gR2) |
TO APPLIED ON [ALL] STANDBY |
指定如果同时满足以下两个条件,则可以删除已归档的重做日志文件:
考虑哪些远程目标取决于以下条件:
注意: 另请参见: Oracle Data Guard概念和管理以获取详细信息 |
TO NONE |
禁用存档的日志删除策略。这是默认设置。
归档的重做日志文件可以位于快速恢复区域的内部或外部。可以通过手动命令删除任何位置的日志。数据库只能自动删除快速恢复区域中的日志。 如果将删除策略设置为
例如,假设已将已归档的重做日志文件传输到所需的远程目标。 根据恢复窗口保留策略,日志已过时,但尚未备份。 在这种情况下,日志可以删除。 或者,假设日志已过时并且已备份到SBT,但尚未传输到所需的远程目标。 在这种情况下,日志不符合删除条件。 如果删除策略设置为 |
|
指定如果同时满足以下两个条件,则可以删除已归档的重做日志文件:
考虑哪些远程目标取决于以下条件:
注意: 另请参见: 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_N为optional,并且对应的log_archive_dest_state_N为enable。
如果不带'ALL',报错RMAN-08591。如果带'ALL',那就不会报错。
因为根据上边TO APPLIED ON
[ALL] STANDBY
的说明,带有'ALL'的时候,确定远程目标囊括了optional和mandatory。不带'ALL'则只包含mandatory。
那么如何解决RMAN-08591?
3种方法:
- 设置远程目标log_archive_dest_N的时候加上mandatory参数
- 使用如下语句来配置归档删除策略:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
- 修改参数_log_deletion_policy为ALL(文档 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)
配置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)