DB2 JDBC 驱动程序(类型 4)在 Execute() 上挂起
Posted
技术标签:
【中文标题】DB2 JDBC 驱动程序(类型 4)在 Execute() 上挂起【英文标题】:DB2 JDBC Driver (Type 4) hangs on Execute() 【发布时间】:2012-03-20 12:47:38 【问题描述】:我正在使用 DB2 服务器上的 JDBC 连接执行一系列 sql 语句。在简单 sql 的最后一个execute()
:DELETE FROM MYTABLE
,即使表仅包含一条记录,线程也会长时间挂起。
我使用的应用服务器是 WAS。我想知道这是否是 WAS 和 DB2 组合特有的问题,因为相同的代码适用于其他环境。
有人知道这里发生了什么吗?
【问题讨论】:
除了任何其他答案,我们可以看看你的一些 java 代码,只是为了抽查吗? 我会在一段时间内发布它,但请记住,此代码适用于所有其他配置,如 sql server +WAS、Oracle +WAS 等 【参考方案1】:您是否直接从 CLP 发出命令?可能是其他问题,例如:
事务日志问题:有很多行要删除,这需要时间。另外,事务日志已经达到上限,数据库不做回滚,而是等待其他事务释放的空日志。 锁问题(并发):您尝试删除的某些行在其他事务中有锁,应用程序必须等待释放它们(锁等待)另外,尝试频繁提交。
【讨论】:
请检查我对上一个答案的回复 我在没有被其他人使用的开发环境上进行了尝试 您完全确定,您是否执行了“db2pd -wlocks”?结果是什么?可能,您正在从另一个连接(例如控制中心)锁定该行。 @MozenRath 我正在使用 DB2,当表被另一个应用程序中使用的简单选择命令锁定时,总是会出现这些问题。确保表未锁定并再次尝试删除记录。 如你们所说。还有另一个连接锁定了表。此连接来自同一个应用程序。通常你会认为这个连接会被 gc 破坏,但事实并非如此。我添加了代码来关闭它,现在它可以工作了【参考方案2】:删除数据库中的行可能是一项糟糕的工作:不要忘记数据库服务器将记录表的所有数据以防发生 ROLLBACK。然后我假设问题来自数据库,特别是如果表有很多行。
您是否尝试过在交互式环境中自己手动运行所有 SQL 请求?
【讨论】:
正如我在问题中提到的,表中只有一条记录以上是关于DB2 JDBC 驱动程序(类型 4)在 Execute() 上挂起的主要内容,如果未能解决你的问题,请参考以下文章
使用 Db2Mon 有没有办法区分使用类型 2 和类型 4 驱动程序连接的客户端?
是否有适用于 DB2 v6 的 JDBC Type 4 驱动程序?