不能直接在dg物理备库上用rman执行常规全库备份,因其控制文件不记录自身为可备份目标且rman默认拒绝非open状态下的全库备份;需先取消恢复、启为read only、配置db_recovery_file_dest等参数,并使用skip readonly选项方可执行。

不能直接在DG物理备库上用RMAN执行常规全库备份。 物理备库默认处于 READ ONLY WITH APPLY 或 MOUNT 状态,数据库实例不支持对数据文件发起写操作,而 RMAN 的 BACKUP DATABASE 会尝试读取并打包所有数据文件——这本身可行,但关键限制在于:**物理备库的控制文件不记录自身作为“可备份目标”的元数据,且 RMAN 默认拒绝在非 OPEN 状态下执行完整数据库备份(除非显式绕过)**。
RMAN 在物理备库报 ORA-19625 / ORA-19602 错误的原因
当你在已启动到 MOUNT 或 READ ONLY 状态的物理备库上运行 BACKUP DATABASE,常见错误是:
-
ORA-19625: error identifying file <datafile_path></datafile_path>—— RMAN 尝试访问数据文件时被底层只读挂载机制拦截 -
ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode—— 即使备库处于恢复中,其内部仍被视为“非归档模式上下文”,因控制文件未标记为可备份源
根本原因不是权限或路径问题,而是 Oracle 对物理备库的 RMAN 备份做了硬性限制:**仅允许备份归档日志(ARCHIVELOG),不允许备份数据文件或控制文件,除非启用特定参数并满足严格前提。**
启用物理备库 RMAN 全库备份的两个必要条件
想让物理备库真正支持 BACKUP DATABASE,必须同时满足:
- 数据库必须处于
READ ONLY状态(MOUNT不行;READ ONLY WITH APPLY也不行,需先ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL停止应用) - 必须在启动数据库前,设置初始化参数
STANDBY_BECOME_PRIMARY=FALSE(默认值),并**显式启用ENABLE_BLOCK_CHANGE_TRACKING = TRUE(非必需但强烈建议)和最关键的一条:DB_RECOVERY_FILE_DEST必须指向本地可写的有效路径,且该路径不能与主库共用 NFS 或共享存储(否则 RMAN 会拒绝)**
注意:DB_RECOVERY_FILE_DEST_SIZE 也必须足够大——它不仅存归档,还要容纳备份集。若未设或设为 0,BACKUP DATABASE 会直接失败并报 ORA-19802: cannot use DB_RECOVERY_FILE_DEST without DB_RECOVERY_FILE_DEST_SIZE。
实际可行的备库 RMAN 全库备份命令模板
确认满足上述条件后,按顺序执行:
1. 停止日志应用:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
2. 切换至只读(非只读恢复状态):ALTER DATABASE OPEN READ ONLY;
3. 启动 RMAN 并连接:rman target /
4. 执行带显式 FORMAT 和跳过只读检查的备份:BACKUP AS COMPRESSED BACKUPSET DATABASE FORMAT '/u01/backup/stby_%U' SKIP READONLY;
其中 SKIP READONLY 是关键开关——它告诉 RMAN 忽略数据文件头的只读标记,强制读取内容。没有它,即使数据库 OPEN READ ONLY,也会报 ORA-19602。
补充说明:
• SKIP READONLY 仅适用于物理备库,主库上无效
• 备份出的备份集**不能用于主库恢复**,只能用于该备库自身的快速重建或作为二级灾备副本
• 备份过程中,主库持续发送归档,但备库不再应用,需人工重新启停恢复流程
更推荐的生产实践:用主库备份 + 传输到备库归档目录
绝大多数企业环境并不真正在物理备库上跑全库备份,因为:
- 增加备库 I/O 压力,干扰日志应用延迟
- 备份元数据无法自动同步到主库 RMAN catalog(如果用了 recovery catalog)
- 备份集缺乏跨库一致性保障(比如某张表在主库刚提交,备库还没收到归档)
标准做法是:在主库执行 BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT,再将生成的备份集(及归档)通过 scp 或 NAS 同步到备库所在主机的本地磁盘,最后在备库上用 CATALOG START WITH '/path/to/copied/backups'; 手动注册。这样既复用主库资源,又保证备份可用性,还能用于备库故障后的快速重建。
真正需要在备库本地执行备份的场景极少,通常只出现在主库不可用、且你准备将该备库临时提升为主库(failover)前的最后一道本地快照动作——此时才值得启用 SKIP READONLY 并接受其副作用。











