最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何配置.NET应用程序来支持Oracle Data Guard的快速应用通知?
时间:2026-07-15 19:57:57 编辑:袖梨 来源:一聚教程网
ODP.NET必须显式配置Failover=true才启用TAF,仅tnsnames.ora中配置FAILOVER_MODE或FAILOVER=YES无效;同时需满足LOAD_BALANCE=YES、驱动版本≥12.1、服务端启用专用监听器并注册TAF服务。
Failover=true 必须显式写在连接字符串里
odp.net 默认完全不启用故障转移,哪怕 tnsnames.ora 里配了 failover_mode、failover=yes,也无效。必须在 .net 连接字符串中加 failover=true(注意大小写,不是 failover=true 或 failover=true)。
常见错误:只改了 tnsnames.ora,没动连接字符串,结果主库宕机后应用直接报 ORA-12154 或卡住不动;或者写了 Failover=True(首字母大写但其余小写),驱动不识别,等同于没开。
-
Failover=true是 ODP.NET 的硬性开关,没有它,TAF(Transparent Application Failover)根本不会启动 - Entity Framework 用户需检查
app.config或web.config中的connectionStrings,确保该参数存在且拼写准确 - 若用
OracleConnectionStringBuilder动态构造连接串,务必调用builder["Failover"] = "true",不能漏掉
tnsnames.ora 中 LOAD_BALANCE 和 FAILOVER 必须共存
只写 LOAD_BALANCE=YES 不等于故障转移——它只影响首次建连时随机选地址;一旦连上,后续所有请求都死绑该实例,主库挂了也不会自动切。
真正触发连接时故障转移(connect-time failover),必须同时存在 LOAD_BALANCE=YES 和 FAILOVER=YES,缺一不可。
- 错误配置:
(ADDRESS_LIST = (ADDRESS=...) (ADDRESS=...) (LOAD_BALANCE=YES))→ 无故障转移能力 - 正确配置:
(ADDRESS_LIST = (ADDRESS=...) (ADDRESS=...) (LOAD_BALANCE=YES) (FAILOVER=YES)) - 若主库监听进程还在但数据库已 hang(比如 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_TYPE和FAILOVER_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.ora 里 FAILOVER=YES + LOAD_BALANCE=YES + FAILOVER_MODE 配置,.NET 连接串里 Failover=true,驱动版本 ≥12.1,服务端监听器是专用模式且注册了 TAF 服务——这五项缺一不可。少一个,故障转移就变成半截子工程。
相关文章
- 王者荣耀世界零氪玩家如何生存 07-28
- 快手极速版怎么绑定手机号 07-28
- 明日方舟和轻松小熊联动活动内容一览 07-28
- 逆战未来黎明之光 逆战未来黎明之光玩法机制与新手入门指南 07-28
- 植物大战僵尸融合版毁灭土豆地雷介绍 07-28
- 逆战未来飓风之龙 逆战未来飓风之龙武器获取方法详解 07-28