SPFILE 必须手动同步,主备库参数文件需严格一致,否则导致 ORA-16057、ORA-16191 等错误;关键参数包括 DB_UNIQUE_NAME、LOG_ARCHIVE_CONFIG、FAL_SERVER/CLIENT、LOG_ARCHIVE_DEST_n;密码文件需复用主库,不可重生成。
SPFILE 不能自动同步,主备库参数文件必须手动保持一致——这是 DG 同步链路稳定运行的前提,不是“配完就不管”的环节。
主库修改参数后,备库不会自动继承
oracle dg 不会复制 spfile 文件本身,所有通过 alter system set ... scope=spfile 的修改只写入主库的 spfile,备库仍沿用自己原有的启动参数。常见后果包括:ora-16057(fal client 配置缺失)、ora-16191(无法连接 fal server)、mrp 进程启动失败等。
实操建议:
- 每次在主库执行
ALTER SYSTEM SET ... SCOPE=SPFILE后,立即导出主库SPFILE为文本:CREATE PFILE='/tmp/init_pdmdb1.ora' FROM SPFILE; - 人工比对备库当前
PFILE(或从其SPFILE生成的临时PFILE),合并新增/变更项,特别注意以下参数必须严格一致:DB_UNIQUE_NAME、LOG_ARCHIVE_CONFIG、FAL_SERVER、FAL_CLIENT、LOG_ARCHIVE_DEST_n中涉及本库角色的部分 - 确认无误后,在备库重建
SPFILE:CREATE SPFILE FROM PFILE='/tmp/init_pdmdb2.ora';,再重启实例
备库 SPFILE 路径和文件名必须匹配 $ORACLE_SID
备库启动时会按 $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora 路径查找 SPFILE。若备库 SID 是 PDMDB2,但文件名为 spfilePDMDB1.ora 或放在错误路径下,实例将退回到默认 PFILE 启动,导致参数回退到初始值。
实操建议:
- 检查备库
$ORACLE_SID值:echo $ORACLE_SID - 确认
SPFILE存在于$ORACLE_HOME/dbs/下,且命名正确:spfile${ORACLE_SID}.ora - 若从主库拷贝
SPFILE,务必重命名:cp spfilePDMDB1.ora $ORACLE_HOME/dbs/spfilePDMDB2.ora
LOG_ARCHIVE_CONFIG 和 DB_UNIQUE_NAME 必须双向显式声明
该参数是 DG 角色识别的基础。漏写任一端的 DB_UNIQUE_NAME,会导致日志传输或接收静默失败,V$ARCHIVE_DEST_STATUS 中状态可能显示为 INACTIVE 或 ERROR,但无明确报错。
实操建议:
- 主备库均需设置:
LOG_ARCHIVE_CONFIG='DG_CONFIG=(PDMDB1,PDMDB2)'(顺序无关,但必须包含双方) -
DB_UNIQUE_NAME必须与tnsnames.ora中定义的服务名、LOG_ARCHIVE_DEST_n中的DB_UNIQUE_NAME值完全一致(区分大小写) - 验证命令:
SHOW PARAMETER db_unique_name和SHOW PARAMETER log_archive_config,两库输出应互为子集
密码文件不是“同步”,而是“复用”
备库不需要独立生成密码文件,它必须能认证主库的 SYS 用户——因为日志传输、FAL 请求、RMAN 连接都依赖该凭据。本地重生成 orapwd 会导致 ORA-16014 或 MRP 无法启动。
实操建议:
- 在主库任意节点执行:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=<sys_pwd> force=y</sys_pwd> - 将生成的文件完整拷贝至备库相同路径,覆盖原文件:
scp orapwPDMDB1 oracle@standby:$ORACLE_HOME/dbs/orapwPDMDB2 - 确保文件属主和权限正确:
chown oracle:oinstall $ORACLE_HOME/dbs/orapwPDMDB2,chmod 640 $ORACLE_HOME/dbs/orapwPDMDB2
ENABLE_PLUGGABLE_DATABASE)后未同步更新备库参数,导致角色切换失败——这种问题往往在故障演练时才暴露。


















