doris通过catalog查询db2频繁报错result set is closed
1、问题
在doris创建db2的catalog,通过doris查询频繁报错,有时候查询成功,有时候查询失败。
建的catalog语句如下:
CREATE CATALOG test_db2_2
PROPERTIES (
"type" = "jdbc",
"user" = "db2inst1",
"password" = "db2inst1",
"jdbc_url" = "jdbc:db2://10.32.123.12:50000/testdb",
"driver_url" = "db2jcc4-10.1.jar",
"driver_class" = "com.ibm.db2.jcc.DB2Driver"
);
报错如下
errCode = 2, detailMessage = (disaggregated-cluster-cg1-0.disaggregated-cluster-cg1.doris-cluster.svc.cluster.local.)[INTERNAL_ERROR]JdbcExecutorException: resultSet to get next error: \nCAUSED BY: SqlException: [jcc][t4][10120][10898][4.13.127] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null
2、解决方案
jdbcUrl增加参数:
:allowNextOnExhaustedResultSet=1;resultSetHoldability=1;
修改catalog
alter catalog test_db2_2
set properties(
"jdbc_url"= "jdbc:db2://10.32.123.12:50000/testdb:allowNextOnExhaustedResultSet=1;resultSetHoldability=1;"
)
解释
- allowNextOnExhaustedResultSet=1:
- 当设置为 1 时,允许在结果集已经被遍历到末尾之后,继续调用 next() 方法来尝试获取更多数据。
- 通常情况下,如果结果集已经没有更多的行,再次调用 next() 方法会抛出异常。但设置了这个参数后,DB2 会尝试重新查询数据库以获取更多数据,这在一些特定的应用场景中,比如需要动态地获取可能后续会添加到结果集中的数据时,是非常有用的。
- resultSetHoldability=1:
- 该参数设置结果集的可保持性。当设置为 1 时,意味着结果集在事务提交后仍然可以保持打开状态并继续被访问。
- 一般来说,默认情况下结果集在事务提交时会被关闭,如果应用程序在事务提交后还需要继续访问结果集中的数据,就需要将 resultSetHoldability 设置为 1。这样可以避免因为事务提交导致结果集不可用,从而方便后续对结果集数据的处理和分析。