必须在备库以read only with apply模式执行backup as compressed backupset database,且rman连接目标必须是备库自身(target /);否则硬连主库、误用read only备库或忽略standby_file_management配置将导致备份失败或拖慢主库。

直接上结论:必须在备库以 READ ONLY WITH APPLY 模式执行 BACKUP AS COMPRESSED BACKUPSET DATABASE,且 RMAN 连接目标必须是备库自身(target /),不是主库别名或 catalog 中的主库记录。硬连主库、误用 READ ONLY 备库、忽略 STANDBY_FILE_MANAGEMENT 配置,这三类操作会直接导致备份失败或主库被拖慢。
为什么不能用主库做日常全量备份
主库跑核心交易,RMAN BACKUP DATABASE 会触发大量物理读、写 FRA、生成归档(尤其未关 ARCHIVELOG MODE 切换优化时)、争抢 buffer cache 和 I/O 调度队列。实测中,1TB 数据库全备常使主库 db file sequential read 平均等待时间翻 3 倍,部分 OLTP 事务超时率上升 12%~18%。
而备库在 READ ONLY WITH APPLY 下:
- 归档日志由 MRP 进程持续应用,不依赖主库发起切换
- BACKUP 不产生新归档、不触发日志切换、不写任何 online redo
- RMAN 读取的是已同步完成的数据块,无一致性读开销(不像主库要构造 CR block)
备库执行 RMAN 前必须验证的 4 项状态
以下 SQL 必须全部返回预期值,缺一不可:
-
SELECT open_mode, database_role FROM v$database→ 必须是READ ONLY WITH APPLY(不是READ ONLY或MOUNTED) -
SELECT recovery_mode FROM v$archive_dest_status WHERE dest_id = 2→ 必须含MANAGED REAL TIME APPLY -
SHOW PARAMETER STANDBY_FILE_MANAGEMENT→ 必须为AUTO(否则新增表空间/数据文件无法同步,后续备份报ORA-19625) -
SELECT name, space_limit, space_used FROM v$recovery_file_dest→space_used不能超space_limit * 0.8(RMAN backupset 默认写入db_recovery_file_dest,不是主库 FRA)
RMAN 连接方式与脚本关键点
错误做法:用 rman target sys/pwd@primary_db 连主库 alias,再 BACKUP DATABASE —— 这仍走主库实例。
正确做法:SSH 登备库服务器,用本地连接:rman target /,然后执行:
RUN {
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
BACKUP AS COMPRESSED BACKUPSET DATABASE
FORMAT '/u01/fast_recovery_area/%d_%T_%s_%p.bkp';
BACKUP CURRENT CONTROLFILE FORMAT '/u01/fast_recovery_area/%d_ctl_%s.bkp';
}
轮询脚本要点:
- 不写死 SID 或 IP,改用 SELECT db_unique_name FROM v$database 动态获取当前备库名
- 在 crontab 中每轮只调一个备库,失败时用 EXIT 0 跳过,避免阻塞后续节点
- 备份后立即检查 V$RMAN_BACKUP_JOB_DETAILS 中 STATUS = 'COMPLETED' 且 INPUT_BYTES > 0
容易被忽略的兼容性细节
Oracle 12c 及以上支持备库备份,但有隐性限制:
- 若使用 Recovery Catalog,REGISTER DATABASE 必须分别对每个备库单独执行(不能只注册主库),否则 LIST BACKUP 查不到备库产生的 backupset
- BACKUP ... PLUS ARCHIVELOG 在备库无效:备库没有自己的归档流,只能备份主库传来的 archived log,需改用 COPY ARCHIVELOG ALL 或跳过归档备份(归档已在主库备份)
- 如果备库开了 ADG 的实时查询(ALTER DATABASE OPEN READ ONLY 后再 RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT),RMAN 备份前必须确保 MRP 进程已启动(ps -ef | grep mrp),否则 OPEN_MODE 会降级为 READ ONLY,失去 WITH APPLY 能力











