首页 > 解决方案 > 将 Jmeter 连接到具有两个主机和服务名称的 Oracle 数据库

问题描述

我正在尝试将 Jmeter 连接到具有两个主机的地理冗余数据库,并且我正在努力寻找正确的数据库 URL 格式。

这是我的连接字符串的样子:

jdbc:oracle:thin:@(DESCRIPTION=(ENABLE=BROKEN)(FAILOVER=on)(CONNECT_TIMEOUT=5sec)(TRANSPORT_CONNECT_TIMEOUT=3sec)(RETRY_COUNT=3)(LOAD_BALANCE=on)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS =(PROTOCOL=TCP)(HOST=HostName)(PORT=port)))(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=HostName2)(PORT=port)))(CONNECT_DATA=( SERVICE_NAME=服务名)))

数据库连接配置如下:

JDBC驱动类:oracle.jdbc.OracleDriver 用户名:username 密码:password

对于数据库 URL,我尝试了不同的格式,但我不断收到错误消息:

无法加载 JDBC 驱动程序类“oracle.jdbc.OracleDriver”

请注意,根据 Jmeter 文档,ojdbc.jar 文件位于 /lib 文件夹中。此外,两台主机的端口相同。

欢迎任何建议。:)

标签: databaseoraclejmeterconnection

解决方案


我认为您无法使用 JMeter 的JDBC 连接配置建立与 Oracle RAC 的连接,因为它不允许完全的灵活性,因此您将无法正确实例化PoolDataSourceFactory

因此,我建议切换到JSR223 测试元素Groovy 语言,在这些语言中,您可以完全自由地设置连接、执行查询、访问结果等。相关代码类似于:

def prop = new Properties()
prop.put('oracle.jdbc.thinForceDNSLoadBalancing','true')
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource()
pds.setConnectionProperties(prop)
pds.setConnectionFactoryClassName('oracle.jdbc.pool.OracleDataSource'); pds.setUser('johndoe')
pds.setPassword('secret')
String dbURL =
        'jdbc:oracle:thin:@(DESCRIPTION=(ENABLE=BROKEN)(FAILOVER=on)(CONNECT_TIMEOUT=5sec)' +
                '(TRANSPORT_CONNECT_TIMEOUT=3sec)(RETRY_COUNT=3)(LOAD_BALANCE=on)(ADDRESS_LIST=(LOAD_BALANCE=on)' +
                '(ADDRESS=(PROTOCOL=TCP)(HOST=HostName)(PORT=port)))(ADDRESS_LIST=(LOAD_BALANCE=on)' +
                '(ADDRESS=(PROTOCOL=TCP)(HOST=HostName2)(PORT=port)))(CONNECT_DATA=(SERVICE_NAME=ServiceName)))'
pds.setURL(dbURL)

更多信息:为 JDBC 客户端配置快速连接故障转移


推荐阅读