【问题标题】:What kind of failover is used by jdbc oracle thin driver when multiple hosts providedjdbc oracle thin driver在提供多台主机时使用什么样的故障转移
【发布时间】:2019-03-04 07:29:19
【问题描述】:

我正在研究使用 Oracle jdbc 瘦驱动程序连接到 Oracle 12c 数据库的代码。我是 jdbc / oracle 驱动程序的新手。用于创建与 db 的连接的 url:

dbUrl = "jdbc:oracle:thin@(description=(load_balance=off)(failover=on)
              (address=(protocol=tcp)(host=host1.bar.com)(port=2000))
              (address=(protocol=tcp)(host=host2.bar.com)(port=2000)) 
              (connect_data=(service_name=PROD)(failover_mode=(type=select)(method=basic)(retries=5)(delay=5))))

通过调用方法:

java.sql.DriverManager.getConnection(dbUrl);

我有几个问题: - 驱动程序是否使用“透明应用程序故障转移 (TAF)”或“快速连接故障转移 (FCF)”机制? - 我可以注册回调以在发生故障转移时获得通知吗?如果是这样,有人可以指出我的文档或示例代码。 - 连接对象中是否有用于查找当前连接的数据库的 API(将返回 host1 或 host2 或无)? - 我无法找到描述上述 dbUrl 字符串中参数的文档。有人可以请我指向一些文档链接。

任何帮助将不胜感激。

谢谢你, 艾哈迈德。

【问题讨论】:

  • 更新:关于环境的信息。我们没有使用通用连接池 (UCP),而是使用我们赢得的连接池/管理器。版本信息:JDBC8、Oracle DB 12c、JDK 8。

标签: oracle jdbc failover ojdbc


【解决方案1】:

(a) 是否启用 FCF 取决于您使用的 JDBC 驱动程序的版本。如果您使用的是 12.2 版本的通用连接池 (UCP),则默认情况下将启用 FCF。有关 FCF 的更多详细信息,请参阅UCP Developers guide

故障转移: 它启用连接时间故障转移。打开时,如果第一个侦听器失败,它会指示 Oracle Net 故障转移到不同的侦听器。列表中的地址数量决定了尝试的地址数量。当设置为 OFF 时,它指示 Oracle Net 只尝试一个地址。始终为 ADG 或 DG 数据库配置设置 FAILVOER=ON。

LOAD_BALANCE: 此参数启用连接时间负载平衡,从而启用侦听器 根据节点上的负载做出路由决策。当此参数设置为 OFF 时,Oracle Net 会依次尝试协议地址,直到成功。当此参数为基于 SCAN 的地址设置为 ON 时,新的连接请求将随机分配给 DNS 解析的 3 个基于 SCAN 的 IP 地址之一。这种随机化使所有侦听器能够共享服务传入连接请求的工作。对于没有 SCAN 的客户端,Oracle Net 随机服务 在地址列表中选择一个地址并连接到该节点上的监听器

(b) 您可以使用以下 SQL 找到您连接的主机。

从 v$instance 中选择主机名;

【讨论】:

  • 感谢您提供的信息。我更新了我的问题版本信息。我想知道从应用程序/客户端以编程方式连接到哪个主机。我应该使用“OracleConnection”吗?此外,任何想法如何注册回调以获取故障转移发生的通知。
  • 我觉得你搞错了。通过 DriverManager 创建连接的方式,连接故障转移由客户端在客户端级别处理,而与 Oracle 数据库的配置无关。你的想法?
【解决方案2】:

您可以利用simplefan.jar 来处理与Instance UP、DOWN 等相关的事件,

确保类路径中有ons.jar、simplefan.jar 以及JDBC 驱动程序。

【讨论】:

  • 您能否提供示例代码的链接,这将非常有帮助。我无法在线找到示例代码。
猜你喜欢
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多