RMAN DUPLICATE FROM ACTIVE DATABASE要求主库开启ARCHIVELOG和FORCE LOGGING、辅助实例NOMOUNT且密码文件同步、DB_UNIQUE_NAME不同但DB_NAME可相同、显式配置PATH CONVERT和SPFILE、NOFILENAMECHECK参数,以及主备双向LOG_ARCHIVE_CONFIG一致。
直接用 rman duplicate from active database,前提是主库已开归档+强制日志,辅助实例启动到 nomount,且密码、路径转换、db_unique_name 全部对齐——漏任一环,rman-05501 或 ora-01113 立刻报错。
主库必须同时满足 ARCHIVELOG + FORCE LOGGING
只开归档不够,FORCE LOGGING 是物理 DG 数据一致性的硬门槛。NOLOGGING 操作(比如 INSERT /*+ APPEND */)不写 redo,备库就收不到变更,后续日志应用必然卡住或校验失败。
- 检查命令:
SELECT log_mode, force_logging FROM v$database;—— 两个字段都得是ARCHIVELOG和YES - 若未启用:先
SHUTDOWN IMMEDIATE→STARTUP MOUNT→ALTER DATABASE ARCHIVELOG→ALTER DATABASE FORCE LOGGING→ALTER DATABASE OPEN - 注意:
FORCE LOGGING会略微增加 redo 量,但对 OLTP 影响可忽略;跳过它等于放弃 DG 的可靠性底线
辅助实例必须 NOMOUNT + 密码文件严格同步
辅助实例不是“挂载控制文件的库”,而是一个空壳:只靠参数文件和密码文件启动到 NOMOUNT。RMAN 会用多个会话并发连接,所以密码文件 orapw$ORACLE_SID 必须存在、权限正确、且 entries ≥ 2。
- SYS 密码必须和主库完全一致,否则必现
RMAN-06403: could not obtain a fully authorized session - 推荐手动重建:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=xxx entries=10,别依赖 RMAN 自动复制(尤其 Windows 下容易因文件锁失败) -
DB_UNIQUE_NAME必须和主库不同(如主库prod,备库设为prod_stby),但DB_NAME可以相同
DUPLICATE 命令里 PATH CONVERT 和 SPFILE 参数不能省
Oracle 11g 对路径转换逻辑很死板。即使主备目录结构一模一样,也必须显式写 DB_FILE_NAME_CONVERT 和 LOG_FILE_NAME_CONVERT,否则 ORA-01511 或控制文件创建失败。
- 示例命令片段:
RMAN TARGET sys/password@prod AUXILIARY sys/password@prod_stby RUN { ALLOCATE CHANNEL c1 DEVICE TYPE DISK; DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK SPFILE PARAMETER_VALUE_CONVERT 'prod','prod_stby' SET DB_UNIQUE_NAME='prod_stby' SET DB_FILE_NAME_CONVERT '/u01/oradata/prod/','/u01/oradata/prod_stby/' SET LOG_FILE_NAME_CONVERT '/u01/oradata/prod/','/u01/oradata/prod_stby/'; } -
NOFILENAMECHECK要加,否则 RMAN 会拒绝覆盖同名文件(尤其在异机复用路径时) -
SPFILE必须显式指定,否则备库启动后没 spfile,ALTER SYSTEM SET类参数改不了
备库启动前必须配好 LOG_ARCHIVE_CONFIG 和网络连通性
物理 DG 不是单向推送,而是双向声明身份。主备两端的 LOG_ARCHIVE_CONFIG 值必须完全一致,且包含双方 DB_UNIQUE_NAME,否则 V$ARCHIVE_DEST_STATUS 显示 ERROR 或 DEFERRED,日志根本传不过去。
- 主库参数至少含:
LOG_ARCHIVE_CONFIG='DG_CONFIG=(prod,prod_stby)'+LOG_ARCHIVE_DEST_2='SERVICE=prod_stby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=prod_stby' - 备库对应设:
DB_UNIQUE_NAME=prod_stby+LOG_ARCHIVE_CONFIG='DG_CONFIG=(prod,prod_stby)'(值一字不差) - TNS 名必须能
tnsping通,且sqlplus sys/password@prod_stby as sysdba能连上 —— RMAN 复制本身不报错,但后续日志传输会静默失败
最易被忽略的是 FORCE LOGGING 的启用时机和 LOG_ARCHIVE_CONFIG 的双向一致性。前者必须在 MOUNT 状态下执行,后者一旦写错,整个 DG 就卡在“看起来通、实际不动”的状态,排查起来极耗时间。


















