无法杀死SQL服务器作业,状态保持死亡/回滚

时间:2012-06-08 13:59:37

标签: sql-server-2008 sql-server-agent

我无法杀死一些SQL Server代理作业。任务状态继续运行,命令保持在KILLED / ROLLBACK状态。该作业通过OLEDB链接服务器和Oracle对OSI的PI系统执行查询。到目前为止,我发现杀死这些作业的唯一方法是重新启动SQL服务器(不是首选方法)。

5 个答案:

答案 0 :(得分:4)

我发现了以下文章 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

显然有几个人通过不是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 Provider是关键,而不是操作系统或数据库版本。 默认安全设置太紧,无法在进程外运行Oracle OLEDB提供程序(OraOLEDB)。此外,MS DTC的默认设置不允许网络通信。

  1. 控制面板 - >管理工具 - >组件服务
  2. 钻取到组件服务 - >计算机

    一个。右键单击我的电脑 - >属性

  3. MSDTC标签 - >安全配置按钮(下面的屏幕截图)

    一个。网络DTC访问 - 已检查。

    湾允许入站/出站 - 已选中。

    ℃。无需身份验证 - 这模拟了Windows 2000安全设置。

    d。启用XA事务 - OraOLEDB提供程序实现的事务类型。

  4. 钻取到组件服务 - > Computers->我的电脑 - > DCOM配置

    一个。右键单击MSDAINITALIZE->属性

  5. 安全标签(下方屏幕截图)

    一个。访问权限 - >定制

    湾按“访问权限”编辑按钮。

    ℃。授予SQL Server服务帐户“本地访问”权限。

    d。重复“启动和激活”。*

答案 1 :(得分:1)

如果它们是大型事务,则可能是服务器实际上仍在执行可能需要一些时间的回滚。

答案 2 :(得分:1)

此页面 http://www.jaygeiger.com/index.php/2015/03/03/how-to-kill-a-frozen-linked-sql-server-connection/ 提供了一种解决方法。 它包括手动TCP连接终止。这不是一个理想的解决方案,但它是我所知道的最好的解决方案。它比重启整个SQL Server更好。

顺便说一下。我在 Ahd 的帖子中提到了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页面上的链接

答案 3 :(得分:0)

对我来说杀死OLEDB外部资源没有用,我很遗憾不得不重启SQL服务器实例来解决这个问题

我的情况下它已经从oracle链接服务器或SharePoint列表中选择了OPENQUERY,它只是有一个简单的错误,如密码错误,它无法解决错误,并且在重新启动服务之前永远不会回来

答案 4 :(得分:0)

可以通过终止本地服务器上的事务来取消卡在KILLED / ROLLBACK中的事务。如果查询是跨服务器而您不想等待回滚,则必须转到远程服务器并终止该事务并在本地服务器上将其终止。

这适用于任何数据库系统。