RMAN归档删除策略是带保护条件的删除控制机制,仅在执行DELETE INPUT或显式DELETE ARCHIVELOG时按策略判断是否可删,不自动清理;configure archivelog deletion policy to applied on standby要求归档在备库应用后才允许删除,但需启用隐含参数并重启数据库才生效。
rman 的归档删除策略不是“自动清理”,而是带保护条件的删除控制机制——它不会主动扫描、定时删文件,只在你执行 backup archivelog ... delete input 或 delete archivelog 时,按策略判断能否删。真要“自动”,得靠外部调度(如 cron + 脚本),但策略本身是守门员。
configure archivelog deletion policy to applied on standby 是什么
这是 Oracle 10g+ 引入的 RMAN 级安全开关,作用是在主库执行归档删除操作前,强制检查该归档是否已在备库完成应用(APPLIED = 'YES')。
它不改变归档传输或应用行为,只干预删除动作。
- 仅对
DELETE INPUT和显式DELETE ARCHIVELOG生效 - 对操作系统级
rm、find -delete完全无效 - 不影响 RMAN 备份本身,只影响备份后要不要删源归档
常见错误现象:
- 配置后执行
BACKUP ARCHIVELOG ALL DELETE INPUT报错RMAN-08137: WARNING: archived log not deleted, needed for standby or upstream capture - 但
DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7'仍能成功(绕过策略)
为什么 configure archivelog deletion policy 常报 RMAN-08591
这个警告 RMAN-08591: WARNING: invalid archivelog deletion policy 出现,是因为底层依赖参数未启用。
Oracle 默认关闭了跨库状态校验能力,必须手动放开:
- 必须执行:
ALTER SYSTEM SET "_log_deletion_policy" = ALL SCOPE=SPFILE SID='*'; - 修改后需重启数据库(
SHUTDOWN IMMEDIATE+STARTUP),否则策略始终不生效 - 该隐含参数影响所有实例(RAC 要加
SID='*'),且仅在 Data Guard 环境有意义
容易踩的坑:
- 忘记重启 DB,导致配置看似成功,实则策略静默失效
- 在非 DG 环境(单机库)配置该策略,无实际意义,还可能干扰后续升级
- 使用
SCOPE=BOTH动态修改会失败,必须用SPFILE+ 重启
Maximum Protection 模式下要不要配 deletion policy
不用配,也不建议配。
-
MAXIMUM PROTECTION模式下,日志是同步写主+备,主库归档生成即代表备库已落盘 - 归档在主库可随时删,无需等待备库“应用”(因为 Redo Apply 是异步阶段,而写入已是强一致)
- 若强行配置
APPLIED ON STANDBY,反而可能因备库 MRP 进程延迟(比如维护窗口暂停)导致误拦删除
适用场景对比:
-
MAXIMUM AVAILABILITY / MAXIMUM PERFORMANCE→ 必须配APPLIED ON STANDBY,防误删 -
MAXIMUM PROTECTION→ 保持默认NONE,或直接不配
delete input 删除失败时怎么手动补救
当 RMAN-08137 报错卡住备份流程,又不能等备库追上(比如网络中断、GAP 积压),可临时绕过策略:
- 查当前未应用归档范围:
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; - 查备库最新应用序列:
SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED = 'YES'; - 主库手动删已确认安全的归档:
DELETE ARCHIVELOG FROM SEQUENCE 12345 UNTIL SEQUENCE 12350; - 删完立即验证备库状态,避免人为制造 GAP
关键点:
-
DELETE ARCHIVELOG不受 deletion policy 约束,是唯一“硬删”通道 - 但每次手动删都得人工核对,不可写进定时脚本长期使用
- 真正健壮的做法,是先修复传输/应用链路(查
V$ARCHIVE_DEST_STATUS、V$MANAGED_STANDBY),再让策略自然生效
归档清理最易被忽略的其实是备库自身——主库策略再严,备库归档若不清理,磁盘照样爆。而备库没有 RMAN deletion policy 支持,必须靠脚本定期 DELETE ARCHIVELOG 或 OS 清理,这点常被遗忘。


















