首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2独占锁未发布

DB2独占锁未发布
EN

Stack Overflow用户
提问于 2018-04-02 16:18:45
回答 2查看 639关注 0票数 0

在一个被分布式Java桌面应用程序通过JDBC访问的特别请求的DB2表中,我每天得到以下几次场景:

  1. 客户端A希望插入新寄存器并在表上获得一个IX锁,而X锁在每一行中;
  2. 其他客户想要执行一项选择,则被授予表上的is锁,但应用程序阻塞;
  3. Client A继续工作,但是INSERT和UPDATE查询没有完成,锁没有释放,它一直在收集每一行的X锁;
  4. 客户端A退出并它的工作没有提交。其他客户端最终得到他们的选择结果集。

过去工作很好,而且大部分时间都是这样,但是锁的情况越来越频繁。

自动提交开始了。

日志中没有引发任何异常或检测到错误。

DB2 9.5 / JDBC驱动程序9.1 (JDBC3规范)

EN

回答 2

Stack Overflow用户

发布于 2018-04-02 16:38:02

如果jdbc应用程序没有执行提交,那么锁将一直保持到回滚或提交为止。如果应用程序退出使用未提交的插入,那么所有最新版本的Db2都会发生回滚。这是Db2在Linux/Unix/Windows上的预期行为。

如果jdbc应用程序未能提交,那么它被破坏或配置错误,因此如果您寻求永久的解决方案,就必须找出根本原因。

如果其他客户机希望忽略插入行锁,那么他们应该选择正确的隔离级别,您可以将Db2配置为跳过插入锁。参见文档DB2_SKIPINSERTED at this 链接

票数 0
EN

Stack Overflow用户

发布于 2018-04-06 15:22:38

事实证明,有时自动提交(我不知道为什么)会变成应用程序的一个随机的单个实例。

以下验证似乎解决了问题(但没有解决问题的根源):

代码语言:javascript
复制
if (!conn.getAutoCommit()) {

    conn.commit();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49614814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档