【问题标题】:How to prevent SQL Server transactions to get stuck?如何防止 SQL Server 事务卡住?
【发布时间】:2019-04-06 05:05:42
【问题描述】:

我正在使用远程连接来连接客户端和服务器,在顺利工作 6 个月后,事务卡住了,可能是因为在事务运行时连接中断。

在连接丢失的情况下,如何防止事务卡住? 如果在一段时间内没有完成,SQL不是应该取消事务吗?

更新:

我正在使用默认的 SQL Server 隔离(已提交读),这是复制它的方法:

我按照建议尝试了 SET XACT_ABORT 为 ON,但没有运气,问题仍然存在,这是复制此问题的事件序列:

  1. 在事务中间设置断点并启动 调试

  2. 一旦事务到达断点,断开 来自网络的计算机(模拟出现异常 断线)

  3. 继续调试进程,等待.NET SqlClient 抛出错误(无网络)

  4. 将 PC 插回网络(模拟 Internet 连接已 返回)

  5. SQL Server 未完成或回滚事务,因此 在事务的第一个中间使用的表被锁定

【问题讨论】:

  • 如果连接断开,它应该会自动回滚。你有没有证实你没有被红鲱鱼愚弄? Find lockscheck active queries
  • SQL 没有完成事务,我只是在下面添加了复制此问题所需的步骤

标签: sql-server transactions transaction-isolation


【解决方案1】:

您需要将 SET XACT_ABORT 设为 ON,如果 Transact-SQL 语句引发运行时错误,则整个事务将终止并回滚。

查看他的链接了解更多信息

!https://docs.microsoft.com/en-us/sql/t-sql/statements/set-xact-abort-transact-sql?view=sql-server-2017

【讨论】:

  • 我按照@rami 的建议尝试了 SET XACT_ABORT 为 ON 但没有运气,问题仍然存在,这是复制此问题的事件序列:1-启动事务并在中间设置断点 2-事务到达断点后,断开计算机与网络的连接(模拟异常断开) 3- 继续调试过程并等待 SqlClient 抛出错误 4- 将 PC 插入网络(模拟 Internet 连接已返回) 5- SQL Server没有完成卡住的事务,因此在事务的第一个中间使用的表被锁定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
相关资源
最近更新 更多