我遇到sleeping transaction locks on MS SQL Server 2008
的问题。
有时它并没有真正睡觉,或者当交易没有完成且存在真正的锁定时。但这不是我的情况。
我们有 tomcat 6 和 java app 。当我在java中进行任何更新然后我正在尝试选择更新的记录 - 没有运气。
如果我使用(nolock) - 它有帮助,我看到正确更改的行,但是,经过一段时间后,这个更新被回滚。
如果我通过Studio
更新 - 那么它可以正常工作,即时结果。
我在申请的许多地方都有类似的情况。 例如,我有夜间工作,正在重新计算大块数据到位域。最后,它会删除旧的位域并在内部复制新的位域。但是当工作完成时 - 发生回滚。我试图在tmp表中手动保存这些位域,然后我通过Studio用新的替换旧 - 它工作了。
所有声明和连接均已关闭。我验证了。我尝试在一个事务的范围内进行所有这些更改。 这个应用程序运行了很长一段时间没有任何麻烦,但现在发生了一些事情。
我试图找出原因并使用 sp_who , sp_who2 ,显示锁定查询的不同脚本,我还使用SQL Server Profiler进行了大量监控,我试图在互联网上找到任何解决方案。我发现只
Error: 1222, Severity: 16, State: 18
这是问题的结果,而不是原因。可能是我朝着错误的方向前进。对我来说,它似乎在SQL服务器配置中发生了变化,现在,由于某种原因,它保持连接和所有更改,这些更改都是在它的范围内进行的。当这个连接被杀死时 - 一切都回滚了。
如果您有任何想法我会很感激。 提前感谢您的帮助。
更新:我搜索过并找到一篇文章:https://support.microsoft.com/en-us/kb/137983 有一个选项,如: 如果Windows NT Server计算机已成功关闭连接,但客户端进程仍然存在于SQL Server上,如sp_who所示,则可能表示SQL Server的连接管理存在问题。在这种情况下,您应与主要支持提供商合作解决此问题 可能这是我的选择。我会进一步调查。