我正在研究一个使用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字符串中描述参数的文档。有人可以指出一些指向文档的链接吗?
任何帮助将不胜感激。
谢谢你, 艾哈迈德。
答案 0 :(得分:0)
(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查找连接到的主机。
SELECT host_name FROM v $ instance;
答案 1 :(得分:0)
您可以利用simplefan.jar来处理与实例UP,DOWN等有关的事件,
确保在类路径中具有ons.jar,simplefan.jar和JDBC驱动程序。