我无法终止某些 SQL Server 代理作业。任务状态继续运行,命令停留在 KILLED/ROLLBACK。该作业通过 OLEDB 链接服务器和 Oracle 对 OSI 的 PI 系统执行查询。到目前为止,我发现杀死这些作业的唯一方法是重新启动 SQL 服务器(不是首选方法)。
5 回答
显然,有几个人通过不是 SQL Server 的链接服务器使用 openquery 时遇到了这个问题。我正在重新发布 BReuter 在上述文章中发布的解决方法:
BReuter 于 2007 年 1 月 30 日下午 2:21 发布 *我已经体验了确切的行为,并找到了一个稳定我们环境的软件组合。
我发现了三个关键成分:
1)确保您没有使用 Microsoft OLEDB Provider for Oracle 的任何链接服务器,而是使用 Oracle Provider for Oracle(我在生产中使用的是 9.2.0.4 版)。
2) 不允许链接服务器“进行中”运行。这需要一些研究,但可以按照以下说明在 SQL 内存空间之外运行链接服务器。
3) 我在 W2K3 上运行 SQL 2005 SP1,但我相信 OLEDB 提供程序是关键,而不是操作系统或数据库版本。默认安全设置太严格,无法在进程外运行 Oracle OLEDB 提供程序 (OraOLEDB)。此外,MS DTC 的默认设置不允许网络通信。
- 控制面板-> 管理工具-> 组件服务
钻取到组件服务-> 计算机
一个。右键单击我的电脑-> 属性
MSDTC 选项卡 -> 安全配置按钮(下面的屏幕截图)
一个。网络 DTC 访问 – 选中。
湾。允许入站/出站 - 选中。
C。无需身份验证 - 这模拟了 windows 2000 安全设置。
d。启用 XA 事务——由 OraOLEDB 提供者实现的事务类型。
钻取到组件服务-> 计算机-> 我的电脑-> DCOM 配置
一个。右键单击 MSDAINITALIZE-> 属性
安全选项卡(下面的屏幕截图)
一个。访问权限 -> 自定义。
湾。按“访问权限”编辑按钮。
C。授予 SQL Server 服务帐户“本地访问”权限。
d。重复“启动和激活”。*
如果它们是大型事务,则可能是服务器实际上仍在执行回滚,这可能需要一些时间。
此页面 http://www.jaygeiger.com/index.php/2015/03/03/how-to-kill-a-frozen-linked-sql-server-connection/ 提供了一种解决方法。它包括手动 TCP 连接终止。这不是一个理想的解决方案,但它是我所知道的最好的解决方案。这比必须重新启动整个 SQL Server 要好。
顺便提一句。我在https://connect.microsoft.com/SQLServer/feedback/details/187192/openquery-to-linked-server-hangs-leaving-spid-with-open-tran-that-cannot-be-killed找到了该链接-then-templog-ldf-grows-without-limit-requires-sql-server-restart-on-production-servers页面在Ahd的帖子中提到
对我来说,杀死 OLEDB 外部资源没有用,不幸的是我不得不重新启动 SQL 服务器实例来解决这个问题
在我的情况下,它从 oracle 链接服务器或 SharePoint 列表中选择了 OPENQUERY,这些列表只是有一个简单的错误,例如密码错误,它无法解决错误并且在您重新启动服务之前永远不会回来
卡在 KILLED/ROLLBACK 中的事务可以通过杀死本地服务器上的事务来取消。如果查询是跨服务器的并且您不想等待回滚,则必须转到远程服务器并终止事务以及在本地服务器上终止事务。
这适用于任何数据库系统。