游乐游手机版
首页/数据库/文章详情

Oracle DG独立于主库的备份保留策略配置

时间:2026-07-22 19:01
备库不可直接沿用主库备份保留策略,因RMAN不区分主备角色,备库时间感知滞后易误删主库恢复所需文件。应在备库单独设置更短保留窗口,执行归档删除策略为NONE,在run块内显式配置策略,使用notbackedup1times,并确保备份路径与主库隔离。

留个心眼:RMAN默认不区分主备角色

当您连接到备库执行RMAN时,它老老实实地读取的是控制文件中的主库配置,包括那个 `RETENTION POLICY`。问题在于,备库的归档日志应用进度与SCN总是落后于主库。举个例子,主库设置了 `RECOVERY WINDOW OF 5 DAYS`,但备库可能只应用到了6月20号的归档。RMAN呢?它自以为是地按6月25号来计算哪些备份已过期,结果就把6月20号之前的所有备份统统标记为 `OBSOLETE`。稍有不慎,`delete obsolete` 执行下去,主库恢复所必需的归档或数据文件备份,就真没了。 这里有几个关键点需要特别注意: * 在备库上执行 `REPORT OBSOLETE` 之前,必须先查询 `v$archived_log` 中 `APPLIED='YES'` 的最晚 `FIRST_TIME`,确认备库实际追到了哪个时间点。 * 备库的保留窗口应以它自身的应用能力为上限。建议设置 `RECOVERY WINDOW OF 2 DAYS` 或更短,避免它越俎代庖替主库做决定。 * **高危警告**:在主备共用备份目录的场景下,永远不要在备库上直接运行一个没有任何 `NOKEEP` 限制的 `DELETE OBSOLETE`。

备库的归档清理策略,必须“归零”

主库上,我们常常会设置 `CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY`,让RMAN在主库上自动删除那些已在所有备库上应用过的归档。这逻辑本身没问题。但在备库自己的独立备份场景下,如果这条策略被备库的RMAN捡起来执行,就会出乱子:备库自己可能主动删除那些还没来得及被备份脚本捕获的归档,或者主库尚未切换、留作回切使用的归档。 因此,必须要在备库上执行以下命令: `CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;` 如果您仍想保留“已应用且已备份”这个清理逻辑,那就别依赖全局配置了,改用脚本控制吧。比如:先执行 `CROSSCHECK ARCHIVELOG ALL`,再执行 `DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-2'`,同时配合备份完成的时间戳来确保万无一失。记住,这个配置是针对当前连接的数据库实例生效的,每个备库实例都要单独执行一遍。

写脚本,必须“显式表忠心”

最稳妥的做法,就是别指望全局配置。每次启动RMAN会话后,第一件事儿就是用 `run{}` 块把策略重新声明一遍。千万别犯低级错误:把 `configure retention policy...` 写在 `run{}` 块外面,那它不会对 `run` 块里的 `backup` 命令生效。 这里放一段典型的备库专用脚本,供参考: ```php run{ configure retention policy to recovery window of 2 days; configure controlfile autobackup on; configure controlfile autobackup format for device type disk to '/backup/standby/ctl_%F'; allocate channel c1 device type disk; backup as compressed backupset database format '/backup/standby/db_%U'; sql 'alter system archive log current'; backup archivelog all not backed up 1 times format '/backup/standby/arch_%U'; release channel c1; } ``` 几个关键点再强调下: * `configure` 命令必须写在 `run{}` 块内,并且放在所有 `backup` 命令之前。 * 这里使用了 `not backed up 1 times`,而不是常见的 `all delete input`。这样做更安全,能防止备份失败但归档却被删除的情况。 * 路径上,务必与主库物理隔离,避免因共用同一个挂载点,导致主备的RMAN扫描备份目录时发生冲突。 说到底,真正麻烦的不是配置命令本身怎么写。而是您必须时刻牢记:**备库的“时间感知”永远慢半拍**。所有基于时间的策略,都得牢牢贴紧它实际能应用到的那个日志时间点来折算,而不是看系统时钟。忽略这一点,`delete obsolete` 随时可能变成一个定时删库的“核武器”。
来源:https://www.php.cn/faq/2801887.html
上一篇Navicat 17 ER图中部分虚线连接为何无法转为实线连接? 下一篇SQL触发器在千万级数据处理中的优化策略与技巧
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
自增主键值从何而来?深入理解原理,告别只会auto_increment
数据库 · 2026-07-25

自增主键值从何而来?深入理解原理,告别只会auto_increment

KingbaseES推荐使用serial、bigserial、显式sequence或identity列实现自增主键。serial创建integer并关联序列,bigserial对应bigint;显式sequence可自定义起始值等参数;identity有generatedbydefault(允许指定值)与always(禁止)两种模式。

Linux下瀚高数据库授权文件过期及替换解决方案
数据库 · 2026-07-25

Linux下瀚高数据库授权文件过期及替换解决方案

在银河麒麟系统下,瀚高数据库hgdb-4 5试用授权20天到期后需替换正式授权文件。正确操作:停止服务,备份旧文件,将授权文件复制到 opt highgo hgdb-4 5 etc lic 并命名为hgdb lic,设置权限600和属主highgo:highgo,再启动服务。禁止直接修改data目录下的license info文件。

Oracle BLOB实时同步的5大技术挑战与难点解析
数据库 · 2026-07-25

Oracle BLOB实时同步的5大技术挑战与难点解析

OracleBLOB实时同步面临分片组装、多列隔离、长事务跨窗口、事务回滚及大对象资源控制等技术挑战,必须在日志中精确还原完整字段值,才能保证源端与目标端数据完全一致,这对同步系统的稳健性提出了高要求。

MySQL禁用redo日志导致全备失败
数据库 · 2026-07-25

MySQL禁用redo日志导致全备失败

MySQL全量备份失败是由于数据定义语言操作触发排序索引构建,禁用重做日志导致XtraBackup无法获取一致性备份。测试验证表明,优化表语句即使无数据也会触发该问题。根本原因在于排序索引构建过程跳过了重做日志记录,破坏了备份的一致性。

Kafka架构图优化与改进的全面详细步骤与实践指南
数据库 · 2026-07-25

Kafka架构图优化与改进的全面详细步骤与实践指南

Kafka作为实时数据流处理的核心中间件,其底层架构虽已相当成熟,但在实际生产环境中,要充分发挥其性能潜力,仍需落实到具体的调优与架构改造上。核心目标可归纳为三点:如何承载更高的吞吐量、如何保障数据不丢失、以及故障发生时如何快速恢复。本文将从这几个关键方向出发,深入探讨如何真正榨干Kafka集群的性