0

0

如何使用DG部署读写分离集群_结合RAC架构与ADG负载均衡分发

P粉602998670

P粉602998670

发布时间:2026-03-18 12:05:34

|

112人浏览过

|

来源于php中文网

原创

ADG备库无法自动分担读负载,必须手动配置应用路由:需为只读业务单独定义SERVICE_NAME(如rac_ro),在备库用srvctl注册并绑定实例,设置service_names、重启监听,客户端须显式连接该服务名而非DB_UNIQUE_NAME,且适配只读语义(如JDBC设oracle.jdbc.readOnly=true)。

ADG备库无法自动分担读负载,必须手动配置应用路由

oracle data guard(dg)本身不提供负载均衡能力,所谓“读写分离”只是把只读请求发到物理备库,但数据库层完全不管流量怎么分。rac + adg组合里,rac负责实例间负载均衡,adg只负责数据同步——两者不打通。所以tnsnames.ora或连接池里若仍指向主库服务名,所有读请求照样打到主库。

  • 必须为只读业务单独定义一个SERVICE_NAME(比如rac_ro),并在备库上用srvctl add service注册,且指定-r参数绑定到备库实例
  • 该服务需在备库init.ora中设置service_names并重启监听,否则lsnrctl status看不到
  • 应用不能直连DB_UNIQUE_NAME,而要使用这个显式声明的只读服务名;否则即使备库open read only,连接也默认走主库
  • RAC中若启用了Fast Application Notification(FAN),需确保备库监听也发布FAN事件,否则连接池可能缓存失效节点

备库开启read only后,SELECT报ORA-16000错误的典型原因

ORA-16000 “database open for read-only access”不是报错,是正常提示——但很多ORM或连接池会把它当异常抛出,导致查询失败。根本问题在于客户端未正确识别只读库的响应语义。

  • Java JDBC驱动需显式设置oracle.jdbc.readOnly=true,否则部分版本(如ojdbc8 21.x之前)会在执行setReadOnly(true)时触发额外校验,反向查主库状态
  • Python cx_Oracle / oracledb 需在connection = oracledb.connect(...)后立即调用connection.autocommit = True,避免隐式开启事务(只读库不允许BEGIN TRANSACTION)
  • SQL*Plus或SQLcl中执行SELECT前若执行过SET TRANSACTION READ ONLY,会强制走串行化事务路径,在ADG备库上直接报ORA-01456
  • 某些中间件(如ShardingSphere、MyCat)默认按主库协议建连,未适配ADG的只读语义,需关闭自动事务检测或改用原生JDBC连接池

DGMGRL切换后,RAC节点服务未自动漂移的排查重点

DGMGRL执行SWITCHOVER TO后,原主库变备库,但RAC中对应的服务(如rac_ro)没自动停在原节点、也没启动到新备库节点,这是常见断点。

  • 检查srvctl config service -d <db_name>输出,确认该服务是否标记为Management Policy: AUTOMATIC;手工添加的服务默认是MANUAL,不会随角色变化迁移
  • 验证Data Guard Broker是否启用:只有ENABLE CONFIGURATION后,Broker才监听ROLE_CHANGE事件并触发srvctl动作;否则一切靠脚本轮询
  • 查看$ORACLE_HOME/rdbms/log/drc<inst>.log,搜索servicerole关键字,常能发现Broker尝试启停服务但权限不足(如grid用户无权操作oracle用户的监听)
  • 切记:RAC服务漂移依赖OCR中存储的资源配置,Broker不直接操作OCR,而是通过srvctl间接调用;若srvctl命令本身在目标节点执行失败(如监听未启动),Broker不会重试也不会报错

ADG延迟导致读取到“过期数据”的真实边界在哪

很多人以为APPLY_DELAY设成0就实时,其实从redo传输、归档、应用到buffer cache,全程存在不可消除的微秒级抖动。真正影响业务的是SCN传播延迟,而非网络RTT。

Jamboss
Jamboss

Jamboss是一款简单的AI音乐生成App,可以一键生成歌曲。

下载
  • SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND APPLIED='YES'对比主备归档序列号差,比DELAY_MINS更准;差值>2通常意味着应用线程卡住
  • 备库V$DATAGUARD_STATSapply lag字段单位是秒,但它是采样值(每5秒更新一次),瞬时延迟可能达数分钟而不被记录
  • 若业务要求强一致性读(如报表核对),不能依赖AS OF SCN,因为备库SCN可能落后;应改用主库FLASHBACK QUERY,或在应用层加分布式锁+主库校验
  • 最大可用模式(MAXIMUM AVAILABILITY)下,主库commit等待至少一个备库写入standby redo才能返回,但不保证已应用——COMMIT成功 ≠ 备库可读

ADG的“读写分离”本质是应用层契约:你承诺只读,它承诺尽力同步。没有自动兜底,也没有跨库事务协调。所有看似透明的切换,背后都要亲手填坑。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1135

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2298

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1764

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

588

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

441

2024.04.29

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

3

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号