从另一个连接强制提交事务?

5
我们的一款软件解决方案中存在一个非常难以追踪的错误,有时会留下未完成的事务。我们的应用程序在许多站点(即70+)中投入生产,到目前为止,我们只在不同的位置发现过这个问题两次。
我们遇到的问题是由于与SQL Server的持续连接而导致事务未被关闭。使用dbcc opentran命令显示出现了单个未关闭的事务。在今天的情况下,这个事务已经从早上9:30开始未关闭直到我们在下午1:00才发现。关闭具有连接的程序将导致事务被关闭/取消,并且当天至此的所有数据都将丢失。
运行dbcc opentran 命令后,它响应打开事务的名称是user_transaction。尝试使用commit tran user_transaction关闭它会报错:The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION. 我理解你几乎永远不想在没有先前连接知识的情况下强制提交事务,但是否有任何方法可以实现呢?在这种情况下,我们关闭了程序,损失了半天的业务数据。
谢谢!

不幸的是,您需要找出关闭操作被忽略的位置。您可以考虑使用SQL代理向您发送电子邮件,如果一个事务打开时间超过一定时间,这样您就可以开始追踪导致此问题的原因,如果您可以在10分钟左右捕获错误,则结束程序将具有更小的数据丢失。 - liebs19
1
轻松地KILL一个处于未决状态的事务,这是你应该关注的,而不是强制提交。 - Remus Rusanu
1个回答

8

我想你是对的。我本来希望有一个“胶布解决方案”,但我们应该寻找真正的原因。谢谢! - The1nk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接