可以,但必须当前为PHYSICAL STANDBY且MOUNT状态;RMAN需target / nocatalog连接本地实例;备份要SKIP INACCESSIBLE和SKIP READONLY,并显式指定归档路径;备份后须创建备用控制文件并验证备份集。
物理备库上能直接用RMAN备份吗?可以,但必须先确认角色和状态
能,但前提是当前数据库是 physical standby 且处于 mount 状态(不能是 open read only)。rman 不允许在只读打开的物理备库上执行备份——会报错 ora-19566: exceeded limit of 0 corrupt blocks for file ... 或更直接的 ora-01157: cannot identify/lock data file,本质是因为文件句柄被只读模式限制。实际操作前务必运行:
select database_role, open_mode from v$database;结果必须是
physical standby 和 mounted。
RMAN连接方式必须用TARGET / NOCATALOG,不能连主库控制文件
在备库主机上执行 RMAN,必须以 target / 方式连接本地实例,且不指定恢复目录(NOCATALOG 模式)。如果误连主库的 target sys/oracle@primary,RMAN 会尝试从主库控制文件读取数据文件路径,而这些路径在备库上通常不存在或不匹配,导致 ORA-19570: file 1 is not the same as in control file。正确做法是:
rman target / nocatalog然后立即执行
SHOW ALL 确认 CONTROLFILE AUTOBACKUP 已关闭(备库控制文件不应被自动覆盖)。
备份脚本要跳过临时文件、排除只读表空间、显式指定归档日志位置
物理备库的临时文件(tempfile)无法被 RMAN 备份;只读表空间(如主库中已置为 READ ONLY 的表空间)在备库上仍是只读,但 RMAN 默认会尝试备份它们,可能因权限或状态引发警告甚至中断。归档日志路径也常与主库不同,需显式指定。实操建议:
- 用
BACKUP AS COMPRESSED BACKUPSET DATABASE SKIP INACCESSIBLE跳过不可访问文件(含临时文件) - 对已知只读表空间,加
SKIP READONLY参数(如BACKUP DATABASE SKIP READONLY) - 归档日志必须用
ARCHIVELOG FROM TIME 'SYSDATE-1'或指定LIKE '/u01/arch/bkup_%',避免依赖LOG_ARCHIVE_DEST_1的动态值(该参数在备库上指向的是接收路径,非归档生成路径) - 备份后立即执行
DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-1'(注意:仅删除已应用且过期的归档,别删多了)
备份后的控制文件快照和验证容易被忽略
物理备库的控制文件是只读副本,RMAN BACKUP CURRENT CONTROLFILE 实际备份的是内存中当前状态的快照,不是磁盘文件本身。这个快照不含主库的 RESETLOGS 历史,恢复时可能不兼容。因此,每次备份后应额外执行:
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/standby_control.ctl';并手动拷贝该文件到安全位置。另外,备份完成不要只看 RMAN 输出 “Finished backup”,务必运行:
LIST BACKUP OF DATABASE SUMMARY;和
VALIDATE BACKUPSET <bs_key></bs_key>,否则可能发现备份集损坏却已删除了源归档。











