当前位置: 首页
数据库
配置.NET应用程序支持Oracle Data Guard快速应用通知

配置.NET应用程序支持Oracle Data Guard快速应用通知

热心网友 时间:2026-07-17
转载

配置ODP NET支持OracleDataGuard故障转移需满足五项关键条件:连接字符串显式添加故障转移=true;tnsnames ora中同时设置负载均衡=YES和故障切换=YES;TAF类型设为SELECT且ODP NET版本≥12 1;使用专用服务器连接;服务端注册TAF服务。缺一不可。

先说几个关键点,关于ODP.NET和TAF(透明应用故障转移)的配置,其实有不少容易踩坑的地方,稍不注意就可能导致故障转移完全失效。核心在于,ODP.NET默认对故障转移是“无感”的,必须在代码中明确告知。下面逐步拆解各项要点。

Failover=true 必须显式写在连接字符串里

ODP.NET 默认完全不启用故障转移,哪怕你在 tnsnames.ora 里配置了 FAILOVER_MODEFAILOVER=YES,也完全不起作用。必须在 .NET 连接字符串中显式加上 Failover=true(注意大小写敏感,不是 Failover=TRUEfailover=true)。

如何配置.NET应用程序以支持Oracle Data Guard的快速应用通知?

典型错误:只改了 tnsnames.ora,没动连接字符串,结果主库宕机后应用直接报 ORA-12154 或卡住不动;或者写了 Failover=True(首字母大写但其余小写),驱动无法识别,相当于没开启。

  • Failover=true 是 ODP.NET 的硬性开关,缺少它,TAF 根本不会启动。
  • Entity Framework 用户需检查 app.configweb.config 中的 connectionStrings,确保该参数存在且拼写准确。
  • 若用 OracleConnectionStringBuilder 动态构造连接串,务必调用 builder["Failover"] = "true",不能遗漏。

tnsnames.ora 中 LOAD_BALANCE 和 FAILOVER 必须共存

只写 LOAD_BALANCE=YES 并不能实现故障转移——它只影响首次建连时随机选择地址;一旦连上,后续所有请求都固定绑定该实例,主库挂了也不会自动切换。要真正触发连接时的故障转移,必须同时存在 LOAD_BALANCE=YESFAILOVER=YES,缺一不可。

  • 错误配置:(ADDRESS_LIST = (ADDRESS=...) (ADDRESS=...) (LOAD_BALANCE=YES)) → 无故障转移能力。
  • 正确配置:(ADDRESS_LIST = (ADDRESS=...) (ADDRESS=...) (LOAD_BALANCE=YES) (FAILOVER=YES))
  • 若主库监听进程还在但数据库已挂起(比如 PMON 挂了),Oracle Net 可能无法快速判定失败,超时由 SQLNET.OUTBOUND_CONNECT_TIMEOUT 控制,默认 60 秒,建议设为 10 秒以缩短感知延迟。

TAF 类型决定查询是否重跑

连接成功后发生的故障(如主库运行中突然宕机),能否让正在执行的 SELECT 自动续跑,取决于 TAF 配置中的 TYPE 值和 ODP.NET 版本。

旧版 ODP.NET(如 11.2)只支持 TYPE=SESSION,即断开后重建连接,原有查询结果丢失;只有 12.1+ 才支持 TYPE=SELECT 的透明重执行。

  • FAILOVER_MODE = (TYPE = SELECT) 要求服务端也启用 TAF(ALTER SYSTEM REGISTER 后确认监听器注册了服务)。
  • 服务端未启用 TAF 时,即使客户端写了 TYPE=SELECT,实际降级为 SESSION 行为。
  • SELECT * FROM V$ACTIVE_SERVICES 查询服务是否带有 FAILOVER_TYPEFAILOVER_METHOD 字段,有值才表示 TAF 已生效。

监听器必须用专用 SERVER,禁用 Shared Server

Data Guard 场景下,必须使用专用服务器连接(Dedicated Server)。Shared Server(MTS)与 TAF 不兼容,会导致故障转移后连接卡死或报 ORA-12514

检查方式:连接后查询 SELECT server FROM v$session WHERE sid = SYS_CONTEXT('USERENV','SID'),返回 DEDICATED 才安全。

  • 监听器配置中不能包含 DISPATCHERS 参数,否则默认启用 Shared Server。
  • 数据库参数 shared_servers 应设为 0,并确认 local_listener 指向的是专用监听器(如 LISTENER_DG)。
  • 应用连接字符串里不要加 Server=Shared 或类似干扰项。

实际生效的关键点很窄:tnsnames.oraFAILOVER=YES + LOAD_BALANCE=YES + FAILOVER_MODE 配置,.NET 连接串里 Failover=true,驱动版本 ≥12.1,服务端监听器是专用模式且注册了 TAF 服务——这五项缺一不可。少一个,故障转移就变成半截子工程。

来源:https://www.php.cn/faq/2824020.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Navicat跨平台同步数据后主键自增值不一致原因

Navicat跨平台同步数据后主键自增值不一致原因

Navicat跨平台同步后主键自增值不一致,源于结构同步默认将源库的auto_increment值硬编码进DDL脚本,忽略目标表当前最大ID。选项IncludeAUTO_INCREMENTvalue默认开启且不保存偏好,易导致冲突。跨平台环境更易暴露此问题。同步前需检查目标表最大ID,同步后调整自增值,同时注意MySQL8 0+的批量插入行为差异。

时间:2026-07-17 07:15
SQL基础语句实现大表随机抽取5条测试数据

SQL基础语句实现大表随机抽取5条测试数据

在数据库日常开发中,从大表随机抽取测试数据时应避免使用ORDERBYRAND()导致全表扫描。MySQL可采用采样跳过法,PostgreSQL推荐TABLESAMPLE,SQLServer和SQLite宜基于主键范围生成随机ID。核心原则是利用索引定位,避免全表排序,从而大幅提升性能。

时间:2026-07-17 07:14
SQL同时分组聚合多个指标的实现方法

SQL同时分组聚合多个指标的实现方法

在SQL查询中,使用GROUPBY子句可同时计算多个聚合函数,从而避免重复扫描表,提高性能。对于COUNT条件统计,须用CASEWHEN表达式。不同时间窗口的指标应将过滤逻辑下沉到聚合内部,还需注意空值处理,并确保结果正确。

时间:2026-07-17 07:14
分布式数据库环境下SQL存储过程适配方案

分布式数据库环境下SQL存储过程适配方案

SQLServer存储过程直接迁移至分布式数据库不可行,需剥离单机语义,删除依赖会话状态、隐式建表及四部分命名等逻辑;环境标识通过参数显式传入;放弃分布式事务,采用本地消息表与异步补偿实现最终一致性;方言逻辑抽离为独立SQL文件按库加载。

时间:2026-07-17 07:13
SQL标量子查询实现自定义业务编码生成算法

SQL标量子查询实现自定义业务编码生成算法

标量子查询生成业务编码需保证单值返回,日期前缀用CONVERT严格对齐,流水号补零用RIGHT或FORMAT,并发时加UPDLOCK和HOLDLOCK防重复,且不能在用户定义函数中调用GETDATE或子查询,替代方案为存储过程或传入日期参数。

时间:2026-07-17 07:13
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜