必须主备严格一致且大小写敏感的参数是DB_UNIQUE_NAME、LOG_ARCHIVE_CONFIG、LOG_ARCHIVE_DEST_n中的DB_UNIQUE_NAME子句;必须主备不同但逻辑互指的有CONTROL_FILES、STANDBY_FILE_MANAGEMENT、FAL_SERVER/FAL_CLIENT、DB_FILE_NAME_CONVERT;所有参数均需人工比对设置,RMAN DUPLICATE不复制初始化参数。

主库改了初始化参数,备库不会自动同步——必须人工比对、逐项设置,否则 ADG 启动失败或归档中断。
哪些参数必须主备严格一致且大小写敏感
这些不是“建议同步”,而是 Oracle Data Guard 运行的硬性骨架,任一不匹配都会导致 ORA-16143(Heartbeat failed)或归档传输静默中断:
-
DB_UNIQUE_NAME:主备值必须不同(如orcl/orcl_stby),但所有引用它的地方(LOG_ARCHIVE_CONFIG、LOG_ARCHIVE_DEST_n)必须完全一致,含大小写和拼写 -
LOG_ARCHIVE_CONFIG:两边都得是'DG_CONFIG=(orcl,orcl_stby)',括号内数据库名须与各自DB_UNIQUE_NAME一一对应 -
LOG_ARCHIVE_DEST_n中的DB_UNIQUE_NAME=xxx子句:主库LOG_ARCHIVE_DEST_2的该子句必须指向备库名;备库上对应 dest(如LOG_ARCHIVE_DEST_1)也必须反向指向主库名
哪些参数必须主备不同但逻辑互指
这些参数照搬会直接导致启动报错或角色混淆,不能复制粘贴,必须按角色重设:
-
CONTROL_FILES:路径必须是本地真实存在的路径,主备绝对不能相同;备库启动前需确保目录已创建、权限正确(如/u01/oradata/orcl_stby/control01.ctl) -
STANDBY_FILE_MANAGEMENT:备库必须为AUTO(否则新增表空间/数据文件不会自动创建);主库设这个无意义,通常保持默认或显式设为MANUAL -
FAL_SERVER/FAL_CLIENT:备库上FAL_SERVER应指向主库服务名(如orcl),主库上则应指向备库(如orcl_stby);用于归档裂缝拉取 -
DB_FILE_NAME_CONVERT:仅在备库设置,用于主库新增数据文件时做路径映射;格式必须成对、带单引号和逗号,如'/u01/oradata/orcl/', '/u01/oradata/orcl_stby/',末尾斜杠和大小写都必须严格匹配
怎么验证参数是否真正生效
别只看 ALTER SYSTEM SET ... SCOPE=SPFILE 执行成功——重启后才加载。关键检查点如下:
- 重启后运行
SHOW PARAMETER <param_name>,确认值已更新;注意DB_UNIQUE_NAME等参数修改后必须重启才生效 - 查
V$DATAGUARD_CONFIG:主备库都应看到完整 DG 成员列表;若只显示自己,说明LOG_ARCHIVE_CONFIG没配对或监听不通 - 查
V$ARCHIVE_DEST_STATUS:重点看STATUS是否为VALID,ERROR列是否为空;若出现ORA-01017,大概率是密码文件未同步或不一致 - 用
tnsping和sqlplus sys/<pwd>@<tns_alias> as sysdba在主备两端互相测试连接,确保网络和服务名可达
RMAN DUPLICATE 后最容易被忽略的一步
用 RMAN DUPLICATE FROM ACTIVE DATABASE 搭建物理备库,只会同步数据文件、控制文件和归档日志——spfile 或 pfile 中的初始化参数仍需人工比对并逐项设置。
很多团队卡在这里:主库加了新数据文件,备库报 ORA-01119 或恢复挂起,查来查去发现 DB_FILE_NAME_CONVERT 根本没配;或者主库启用了 FORCE LOGGING,但备库漏设 STANDBY_FILE_MANAGEMENT=AUTO,结果切换后无法自动建文件。
复杂点在于:参数之间有隐性依赖,比如 LOG_ARCHIVE_DEST_2 的 VALID_FOR 值(如 (ONLINE_LOGFILES,PRIMARY_ROLE))会在角色切换后自动失效,必须手动 ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE 并切日志触发传输。


















