当前位置: 首页 > news >正文

解决 Oracle 11g Data Guard ORA-16047 的实战经验

在运维 Oracle Data Guard 环境时,ORA-16047: DGID mismatch between destination setting and target database 是一个非常常见的错误,尤其是在11.2.0.4 版本中。这个问题通常发生在主备库之间的归档日志传输过程中,而它的根源往往被 DBA 忽略。本文结合我最近排查与解决的经验,详细讲解产生原因及解决思路,并给出可操作的修复方法。

一、问题现象

在一次主备日志传输检查中,我发现备库无法接收主库归档日志,并报错:

Media Recovery Waiting for thread 1 sequence XXXXX
FAL[client]: Failed to request gap sequence
ORA-16047: DGID mismatch between destination setting and target database

同时,在主库执行 SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST_STATUS; 时,显示归档目标状态不正常,Error 字段显示 DGID 不匹配。

最初,我尝试常规的方法:清理 LOG_ARCHIVE_DEST_n 并重新配置目标,但问题依旧。通过反复排查 alert 日志和参数配置,我发现问题出在备库配置。

二、根本原因分析

经过分析发现,ORA-16047 错误主要由两个原因引起:
1. 备库未设置 log_archive_config 参数
在 11g Data Guard 中,log_archive_config 用于定义主备库之间的信任关系。主库在发送归档日志时会检查目标库是否在 DG_CONFIG 列表中,如果备库未设置此参数或列表不完整,就会触发 DGID 校验失败。
2. 备库的 DB_UNIQUE_NAME 不正确
DGID 的匹配逻辑依赖于 DB_UNIQUE_NAME。如果备库 DB_UNIQUE_NAME 与主库配置不一致,或者存在多备库时没有统一在 log_archive_config 中注册,就会导致 DGID 不匹配,从而产生 ORA-16047。

简而言之,DGID 不匹配问题大多源于备库配置问题,而不是主库本身。

三、解决思路

结合排查结果,我总结了以下解决思路:
1. 确保备库 DB_UNIQUE_NAME 正确
在备库执行:

SELECT DB_UNIQUE_NAME FROM V$DATABASE;

确认名称与主库的配置一致,或者按业务需求设置唯一名称。若不对,需要修改:

ALTER SYSTEM SET DB_UNIQUE_NAME=‘正确的备库名称’ SCOPE=SPFILE SID=‘*’;

  1. 配置备库的 log_archive_config
    确保备库也拥有完整的 DG 配置列表,包括主库和所有备库:
ALTER SYSTEM SET log_archive_config='DG_CONFIG=(<primary>,<standby1>,<standby2>)' SCOPE=BOTH SID='*';

这一步是关键,保证主库发送归档时,备库在 DG 配置列表中被认可,从而通过 DGID 校验。

  1. 重新启用归档传输
    在主库上,将目标归档重新启用:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=<standby> ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=<standby>' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

切换日志并检查状态:

ALTER SYSTEM SWITCH LOGFILE;
SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST_STATUS;
  1. 验证备库接收归档
    在备库执行:
SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'RFS%';

同时检查归档日志最新序列号与主库一致,确认传输恢复正常。

四、实战经验总结

通过这次排查与修复,我总结了以下几点经验:
1. 主库和备库参数必须对称配置
不仅主库需要 log_archive_config 和正确的 LOG_ARCHIVE_DEST_n,备库同样要设置 log_archive_config,并保证 DB_UNIQUE_NAME 与主库参数一致。
2. 多备库环境必须统一注册
当存在多个 standby 时,DG_CONFIG 必须包含所有库名,否则在切换主库或者恢复归档时容易触发 DGID mismatch。
3. DGID mismatch 的排查思路
• 检查 alert 日志中 Data Guard ID
• 检查 V$ARCHIVE_DEST_STATUS 错误信息
• 检查主备 DB_UNIQUE_NAME 与 log_archive_config 设置
4. 操作顺序很重要
先暂停归档传输(DEFER),再清空旧 DEST 配置,最后重新定义目标并启用传输,这样可以避免重复错误。

五、结语

ORA-16047 在 Oracle 11gR2 中虽然常见,但本质上是配置不一致导致的安全校验错误。通过正确设置备库 DB_UNIQUE_NAME 和 log_archive_config,并按顺序重新配置归档目标,可以彻底解决 DGID mismatch 问题。

这次实践不仅让我对 Data Guard 的 DGID 校验机制有了更深理解,也提醒了运维同学:备库的配置同样关键,主库不是万能的。在多备库环境下,统一配置和严格校验是保证归档日志高可用传输的核心。

http://www.dtcms.com/a/618701.html

相关文章:

  • 友情链接网站源码网站搭建源码
  • 手机做公司网站wordpress二次开发主题
  • RabbitMQ四种交换器类型详解及示例
  • 网站配图尺寸信息流是sem还是seo
  • 安微凤阳县建设局网站网页设计html模板下载
  • 精品网站设计商标logo图片
  • RK3588平台部署MNN和OPENCL
  • 基于Spring Cloud的电商系统设计与实现——用户与商品模块的研究(下)
  • 网站触屏版建站软件排行榜
  • docker-study
  • 为什么建设厅的网站不好打开龙华网站开发公司电话
  • 网站建设方案书是啥外贸网站建设深圳
  • 基础算法精讲 13 | 二叉树的层序遍历
  • 网站设计包含哪些技术wordpress数据库更改账号密码
  • 如何通过reactor实现流式响应接口
  • vue-leaflet使用教程(一)
  • 江苏省徐州市建设银行网站技术培训网站
  • 如何取外贸网站域名建设网站平台费
  • python 贪心-dfs-dp
  • Android Studio - 使用 BuildConfig
  • 在ec2上部署Qwen2.5omini和Qwen3omini模型
  • 设备通信的艺术:从协议选型、性能调优到自定义实现的全维度技术实践
  • 过滤器模式、责任链模式
  • 做货源的网站郑州企业免费建站
  • HCIP笔记5--OSPF域间路由、虚链路、认证
  • Java 黑马程序员学习笔记(进阶篇27)
  • 海南网站推广建设温州市城市基础设施建设网站
  • CentOS 7 安装 unzip-6.0-21.el7.x86_64.rpm 步骤详解(附安装包)
  • 审计局网站建设管理创意设计广告
  • Goer-Docker系列-1-使用kubectl命令部署Web应用