我拔掉了客户端工作站的插头,长时间运行的数据库进程会发生什么

本文关键字:进程 运行 数据库 什么 长时间 掉了 客户端 工作站 | 更新日期: 2023-09-27 17:59:44

可能重复:
SQL Server和事务中间的连接丢失

我有一个.NET 3.5客户端应用程序,它在MS SQL Server 2005上启动了一个长时间运行(5-10米)的存储过程。存储的proc以BEGIN TRAN开始,以COMMIT TRAN结束。

如果我拔掉工作站上的插头,存储过程会发生什么,它会完成运行吗?它在所有情况下都能跑完吗?或者,与工作站的连接丢失会导致数据库中止存储的过程吗?

编辑:工作站和SQL Server位于不同的盒子上。

我拔掉了客户端工作站的插头,长时间运行的数据库进程会发生什么

工作站断电不一定会导致SP中止,但很可能会导致事务回滚。

我说"可能"是因为它确实取决于客户何时失去权力。如果网络连接在这样的"黑洞"中丢失,服务器将不会立即收到任何断开连接的通知;它不得不依赖TCP最终告诉它连接已经终止,仅仅是因为另一方在X时间内没有响应任何事情。

这与显式和"正常"断开客户端应用程序的连接不同;在这种情况下,客户端会显式关闭连接(如果适用),因此SQL会立即知道客户端已经不在了。

由于存储过程在服务器上运行,如果BEGIN/END TRANSACTION是该存储过程的一部分,则该过程应运行到完成(除非出现任何错误)。当然,由于连接丢失,客户端将永远不会收到任何结果。

有点类似;SQL Server和事务中间的连接丢失

请注意,连接并不总是立即关闭,因此必须预料到意外行为。