【问题标题】:SQL Server and connection loss in the middle of a transaction [duplicate]SQL Server和事务中间的连接丢失[重复]
【发布时间】:2011-06-26 02:08:25
【问题描述】:

可能重复:
What happens to an uncommitted transaction when the connection is closed?

如果在交易过程中失去连接会发生什么?

我猜如果事务从未提交并且可以再次执行,但是...有没有办法可以连接并将其回滚到已保存的点并继续我已经拥有的东西?

亲切的问候。

【问题讨论】:

  • 你说的是哪个连接。只有到 sql-server 的连接或客户端到服务器的网络连接。这甚至可能使用一些 VPN 连接等。
  • 与 sql-server 的连接。

标签: sql-server tsql sql-server-2008 transactions


【解决方案1】:

如果您在交易过程中失去连接,您将无法再从其他连接重新输入该交易。如果连接断开,SQL Server 将自动回滚任何未提交的事务。因此,如果发生这种情况,只需重新连接,您就会发现您的数据库处于与开始事务之前相同的状态(当然,假设没有其他用户可能在两者之间更改过它。

【讨论】:

    【解决方案2】:

    通常,事务中的任何中断都会被回滚。无论是客户端断开连接、CommandTimeout 还是服务器自行重启。

    这是ACID中的原子

    从中断的地方“重新开始”交易的能力没有意义

    • 发生的其他事务/事务 LSN 将出现故障
    • 在写入过程中更改了内部结构(索引等)/数据库不一致

    【讨论】:

    • 长寿命 TXN 没有根本问题。 DBMS 可以像长时间运行的“正常”TXN 一样实现它们。 IE。它必须保留 TXN 持有/需要的所有锁/行版本/...。唯一的问题是:这是非常不切实际的。崩溃的应用程序需要手动清理,这会占用服务器资源,并且在大多数使用 SQL 数据库的情况下,提交数小时甚至数天前的 TXN 的机会微乎其微,甚至不存在。
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2011-06-10
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多