log_archive_config为空或缺失导致归档目标禁用:主备库均需显式配置DG_CONFIG包含所有DB_UNIQUE_NAME,且大小写、空格必须完全一致;修改后须重启数据库,仅ALTER SYSTEM无效。
log_archive_config 为空或缺失导致归档目标被禁用
oracle 11g 及以后版本中,log_archive_config 不只是主库的配置项,备库也必须显式设置。如果该参数为空(如被设为 '')或根本未配置,即使 log_archive_dest_2 显示 enable,实际归档传输也会静默失败——alert 日志里可能完全不报错,但备库收不到归档。
检查方法:SHOW PARAMETER log_archive_config。若返回空值或 NULL,就是根源。
- 主库和所有备库都需包含在
DG_CONFIG列表中,顺序无关,但名称必须与各自DB_UNIQUE_NAME完全一致 - 修改后必须重启数据库才生效(仅
SCOPE=BOTH不够),尤其要注意备库不能只改参数就以为完事 - 常见错误写法:
'DG_CONFIG=(primary,standby)'—— 缺少引号内逗号分隔、大小写不一致、漏掉某个备库名
log_archive_dest_n 的 VALID_FOR 配置不匹配
VALID_FOR 是决定归档路径是否“当前可用”的开关。它由两个维度组成:(redo_log_type, database_role)。哪怕路径语法全对,只要这两个值和当前实例状态不吻合,Oracle 就直接跳过该目标,不报错也不尝试写入。
例如主库上配了:log_archive_dest_2 = 'SERVICE=standby LGWR SYNC VALID_FOR=(STANDBY_LOGFILES,PRIMARY_ROLE)',那就意味着:只在主库角色下、且归档的是备用重做日志时才启用——但主库默认生成的是在线日志(ONLINE_LOGFILES),这条路就永远走不通。
- 主库归档到备库,标准写法应是:
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) - 备库回传归档(如级联场景),则需配
VALID_FOR=(ONLINE_LOGFILES,STANDBY_ROLE) - 用
SELECT DEST_ID, STATUS, VALID_TYPE, VALID_ROLE FROM V$ARCHIVE_DEST_STATUS查实时生效状态,别只信SHOW PARAMETER
归档路径最终落地为 $ORACLE_HOME/dbs 而非预期位置
当备库的 log_archive_dest 或 db_recovery_file_dest 没生效时,Oracle 会退回到默认行为:把接收到的归档日志写进 $ORACLE_HOME/dbs 目录,文件名形如 dgsby_<db_unique_name>_<thread>_<seq>_<resetlogs_id>.arc</resetlogs_id></seq></thread></db_unique_name>。这不是 bug,而是“兜底机制”,但说明上游配置已失效。
原因往往不是路径写错,而是更底层的约束没满足:
- 备库未开启
STANDBY_FILE_MANAGEMENT=AUTO,导致无法自动创建归档目录结构 -
LOG_ARCHIVE_FORMAT中含非法字符(如 %d 在备库解析失败),触发降级行为 - 备库的
DB_RECOVERY_FILE_DEST虽设了路径,但对应磁盘组不可写、空间不足,或 ASM diskgroup 的USABLE_FILE_MB = 0(注意:不是FREE_MB)
ORA-16047 DGID mismatch 的真实指向
这个错误表面看是“主备 DGID 不匹配”,但几乎从来不是主库发错了,而是备库没通过校验。核心就两点:DB_UNIQUE_NAME 和 log_archive_config。
执行 SELECT DB_UNIQUE_NAME FROM V$DATABASE 看备库当前值,再对比主库 log_archive_dest_2 里写的 DB_UNIQUE_NAME=xxx —— 必须字面完全相等,包括大小写、下划线、长度。曾有案例因多一个空格导致同步中断三天。
- 修改
DB_UNIQUE_NAME必须用SCOPE=SPFILE并重启,不能在线改 -
log_archive_config在备库上也要完整列出所有节点,不能只写自己 - 查错优先看备库 alert.log 里 “DGID mismatch” 出现前一行的 “Sending message to…” 日志,那里会明确写出它认为的目标名是什么
V$ARCHIVE_DEST_STATUS 的 STATUS 和 ERROR 字段,再盯住备库 alert.log 里有没有 “Archived Log entry” 记录。


















