RMAN DUPLICATE FROM ACTIVE DATABASE 卡在“copying standby control file”主因是源库未开归档或LOG_ARCHIVE_DEST_n路径不可写,导致归档链路中断;需确认ARCHIVE LOG LIST显示Archive Mode且至少一归档目标状态为VALID。
为什么 RMAN DUPLICATE FROM ACTIVE DATABASE 总卡在“copying standby control file”
因为源库没开归档,或者 log_archive_dest_1 指向不可写路径,rman 在尝试生成备用控制文件时会静默等待归档日志写入完成。这不是网络慢,是归档链路断了。
- 执行前必须确认:
ARCHIVE LOG LIST显示Database log mode: Archive Mode,且至少一个LOG_ARCHIVE_DEST_n状态为VALID - 备库主机上提前创建好
$ORACLE_HOME/dbs目录,并确保 Oracle 用户对该目录有读写权限(否则duplicate会在最后一步报ORA-17628) - 如果用
NOFILENAMECHECK,源库和备库的DB_CREATE_FILE_DEST路径不能相同,否则 RMAN 会跳过数据文件复制,直接报错ORA-19505
DUPLICATE FROM ACTIVE DATABASE 必须关闭源库吗
不用关,但源库必须处于 OPEN 状态,且所有表空间在线、可读写。RMAN 会通过 BACKUP AS COPY 方式直接从内存映像读取数据块,不是停库冷拷贝。
- 唯一例外:如果源库启用了加密表空间(
ENCRYPTION WALLET),需先在备库启动时打开 wallet,否则duplicate会卡在restoring datafile并报ORA-28365 - 源库的
COMPATIBLE参数必须 ≥ 备库的值,否则 RMAN 会在解析控制文件时失败,错误信息是ORA-01503: CREATE CONTROLFILE failed - 不建议在高并发 DML 场景下跑 duplicate;RMAN 会频繁触发检查点,可能引发源库
log file sync等待飙升
如何让 RMAN DUPLICATE 自动创建备库监听和密码文件
它不会自动创建。RMAN 只负责数据库实例级复制,监听配置、密码文件、tnsnames.ora 都得人工补全,否则 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE 会连不上主库。
- 备库密码文件必须包含
SYS用户且与主库一致,用orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=xxx force=y重建 - 监听名(
LISTENER)和数据库服务名(SERVICE_NAME)必须和init.ora中的DB_UNIQUE_NAME匹配,否则 DG Broker 无法识别 - 主库
LOG_ARCHIVE_DEST_2的service值要指向备库的监听地址,例如SERVICE=stbydb1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
同步延迟大,APPLY LAG 一直涨,怎么定位
不是网络带宽问题,大概率是备库归档应用线程被阻塞,或主库归档未及时传到备库。先查 V$ARCHIVE_DEST_STATUS,再看 V$MANAGED_STANDBY。
- 如果
STATUS是ERROR,重点看ERROR列内容,常见是ORA-16057: DGID not set—— 表示主备DB_UNIQUE_NAME不一致 - 如果
PROCESS是MRP0但STATUS是WAIT_FOR_LOG,说明归档还没传过来,去主库查V$ARCHIVE_DEST的TRANSMIT_MODE和DELAY_MINS - 备库开启
REDO APPLY后,别手动删archivelog;RMAN 不会自动清理已应用的归档,要靠DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1'
最常被忽略的是主库的 LOG_ARCHIVE_CONFIG 没加备库的 DB_UNIQUE_NAME,比如只写了 'DG_CONFIG=(orcl)',漏了 stbydb1,整个 DG 配置就形同虚设。










