必须主备严格一致且大小写敏感的参数是DB_UNIQUE_NAME、LOG_ARCHIVE_CONFIG、LOG_ARCHIVE_DEST_n中的DB_UNIQUE_NAME子句;DB_NAME必须相同,STANDBY_FILE_MANAGEMENT备库须为AUTO,CONTROL_FILES和FAL_SERVER/FAL_CLIENT须逻辑互指。

主备库初始化参数必须手动同步,Oracle 不会自动复制或继承。哪怕你用 RMAN DUPLICATE FROM ACTIVE DATABASE 搭建物理备库,也只同步数据文件、控制文件和归档日志,spfile 或 pfile 中的初始化参数仍需人工比对并逐项设置——这是 ADG 启动失败最常被忽略的根源。
哪些参数必须主备一致且严格校验大小写?
不是所有参数都要同步,但以下三项构成 Data Guard 配置骨架,任一不匹配都会导致归档传输中断或 ORA-16143(Heartbeat failed):
-
DB_UNIQUE_NAME:主库和备库必须不同(如orclvsorcl_stby),但所有其他地方引用它时必须完全一致(含大小写) -
LOG_ARCHIVE_CONFIG:两边都得设成'DG_CONFIG=(orcl,orcl_stby)',括号内数据库名顺序无关,但名称必须与各自DB_UNIQUE_NAME一一对应 -
LOG_ARCHIVE_DEST_n中的DB_UNIQUE_NAME=xxx子句:主库LOG_ARCHIVE_DEST_2的DB_UNIQUE_NAME必须指向备库名,反之亦然;若写错(比如主库写成DB_UNIQUE_NAME=orcl),归档根本不会发出去
哪些参数必须主备不同但逻辑互指?
这些参数不能照搬,否则会导致角色混淆或启动报错:
-
CONTROL_FILES:路径必须是本地实际存在的路径,主备绝对不能相同;备库启动前必须确保该路径已创建且权限正确 -
DB_NAME:主备必须相同(如都是orcl),这是 Oracle 内部识别同源数据库的关键,改了就不是同一个 DG 配置了 -
STANDBY_FILE_MANAGEMENT:备库必须设为AUTO(否则新增表空间/数据文件不会自动创建);主库设这个没意义,通常保持默认或显式设为MANUAL -
FAL_SERVER/FAL_CLIENT:备库上FAL_SERVER应指向主库服务名(如orcl),主库上则应指向备库(如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列是否为空;若显示ERROR: ORA-01017,大概率是密码文件未同步或REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE未设 - 在主库执行
ALTER SYSTEM ARCHIVE LOG CURRENT,然后立刻在备库查SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG,确认归档序列号是否递增
最容易被跳过的一步是:备库的 spfile 必须从主库生成的最小参数文件(含 DB_NAME、DB_UNIQUE_NAME、CONTROL_FILES)起步,而不是直接拷贝主库 spfile。哪怕只差一个路径或一个大小写,STARTUP NOMOUNT 都可能卡住或报 ORA-01102。


















