Som*_*Guy 5 sql-server transaction rollback connectivity
当一个事务在 SQL Server 中打开时,它可以回滚的所有方式是什么?我们目前正在使用一个 3rd 方应用程序,该应用程序经常在查询处于睡眠状态时显示打开的事务,有时会持续数天(通过 sp_WhoIsActive 显示)。这使我相信应用程序中某处存在错误,不允许提交事务。这些事务可能回滚的所有方式是什么?
我应该对已经打开数小时或数天的交易做些什么吗?如果他们无论如何都要回滚或超时,那么终止进程有什么害处吗?
添加@RLF在他的回答中提供的内容;以下也将导致事务回滚。
ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 将回滚任何打开的事务。
客户端、服务器或两者之间的任何基础设施断开连接。
如果底层磁盘子系统消失,所有打开的数据库连接都将终止。未提交的事务将在随后打开数据库时回滚。
如果服务器关闭,或出于任何原因退出,未提交的事务将在启动并打开关联的数据库时回滚。
如果SET XACT_ABORT ON设置,则任何引发运行时错误的 T-SQL 语句都将导致打开的事务回滚。
批处理范围的事务,适用于多个活动结果集 (MARS),尚未提交的事务将在批处理完成时回滚。
为了完整ROLLBACK TRANSACTION起见,很明显,将回滚事务。
如果在事务打开时事务日志已满,并且随后由于任何原因关闭了数据库,则在数据库重新联机时将发生回滚。
如果SET IMPLICIT_TRANSACTIONS ON;设置,包括ANSI默认,未提交的事务将在客户端断开连接时自动回滚。
| 归档时间: |
|
| 查看次数: |
2395 次 |
| 最近记录: |