备库rman备份必须mount且不能open,因standby控制文件只读,open后进入read only或adg模式导致rman无法获取数据文件排他锁;仅mount状态下才能基于主库scn做一致性备份。
不能直接在备库用 rman target / 备份,否则报 ora-19573: cannot obtain exclusive enqueue for datafile —— 根子在 standby 控制文件是只读的,rman 默认不认它为合法备份源。
为什么备库 RMAN 备份必须先 MOUNT 且不能 OPEN
备库的控制文件来自主库,是“standby controlfile”,不带写权限;一旦 ALTER DATABASE OPEN,数据库就进入 READ ONLY 模式(或 ACTIVE DATA GUARD 模式),RMAN 无法获取数据文件排他锁,BACKUP DATABASE 必然失败。只有在 MOUNT STANDBY DATABASE 状态下,RMAN 才能识别数据文件路径、校验块一致性,并按主库某 SCN 快照做一致性备份。
- 执行
STARTUP MOUNT会报错:必须先NOMOUNT,再RESTORE STANDBY CONTROLFILE,最后ALTER DATABASE MOUNT STANDBY DATABASE - 切忌在备库上执行
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT后立刻备份——此时 DB 是 mounted 但 recovery 进程占着资源,需先ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL - 若用 ASM,
v$datafile显示的是 +DATA/ORCL/DATAFILE/SYSTEM.256.123456789 这类系统名,RMAN 编目时不会自动识别,必须手动CATALOG START WITH '+DATA/ORCL/'
主库 RMAN 中必须配置 DB_UNIQUE_NAME 别名
备库不是独立注册进 RMAN catalog 的“数据库”,而是靠主库 RMAN 通过 CONNECTIDENTIFIER 主动发现。不配这个,RMAN 连 orcl_stdby 都找不到监听端口,更别说走 TNS 连过去执行备份。
- 在主库 RMAN 中运行:
CONFIGURE DB_UNIQUE_NAME 'orcl_stdby' CONNECTIDENTIFIER 'orcl_stdby'; - 确保备库
tnsnames.ora有对应条目,且监听已注册该 service_name(lsnrctl status能看到SERVICE_NAME=orcl_stdby) - 别名大小写敏感;若备库
DB_UNIQUE_NAME实际是ORCL_STDBY,配置里也得写全大写,否则连接失败
BACKUP DATABASE PLUS ARCHIVELOG 在备库的实际行为
它不备份“当前备库正在应用的日志”,而是备份“已应用到某个归档点的一致性数据库镜像 + 本地磁盘上已接收且未被删除的归档日志”。关键前提是:归档必须已在备库落盘。
- 主库归档必须发到备库本地路径(如
LOG_ARCHIVE_DEST_2 = 'SERVICE=orcl_stdby VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stdby') - 备库需启用
ARCHIVE_LAG_TARGET或配置LOG_ARCHIVE_DEST_n的DELAY=0,否则归档可能滞留在主库或传输队列中 - 推荐命令:
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;——DELETE INPUT只删已备份的归档,但前提是这些归档已被APPLIED ON STANDBY,否则受ARCHIVELOG DELETION POLICY限制 - 不加
PLUS ARCHIVELOG,只备份数据文件,恢复时若要 PITR,还得单独从主库拉归档,失去备库减压意义
卸载主库压力的关键盲区
最容易被忽略的不是命令怎么敲,而是归档日志的生命周期管理是否闭环:备库备份完不删归档 → 磁盘撑爆;删了但没确认是否已应用 → 主库归档被误删导致无法切换;RMAN catalog 没在备库注册 → REPORT OBSOLETE 无效,旧备份堆积。
真正在生产环境跑通,得同时盯住三件事:备库的 ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY 是否生效、V$ARCHIVED_LOG 里 APPLIED='YES' 的归档是否连续、以及每次 BACKUP ... DELETE INPUT 后检查 LIST BACKUP OF ARCHIVELOG ALL 输出是否清空。少盯一环,压力就悄悄回到主库。











