我无法杀死一些SQL Server代理作业。任务状态继续运行,命令保持在KILLED / ROLLBACK状态。该作业通过OLEDB链接服务器和Oracle对OSI的PI系统执行查询。到目前为止,我发现杀死这些作业的唯一方法是重新启动SQL服务器(不是首选方法)。
答案 0 :(得分:4)
显然有几个人通过不是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的默认设置不允许网络通信。
钻取到组件服务 - >计算机
一个。右键单击我的电脑 - >属性
MSDTC标签 - >安全配置按钮(下面的屏幕截图)
一个。网络DTC访问 - 已检查。
湾允许入站/出站 - 已选中。
℃。无需身份验证 - 这模拟了Windows 2000安全设置。
d。启用XA事务 - OraOLEDB提供程序实现的事务类型。
钻取到组件服务 - > Computers->我的电脑 - > DCOM配置
一个。右键单击MSDAINITALIZE->属性
安全标签(下方屏幕截图)
一个。访问权限 - >定制
湾按“访问权限”编辑按钮。
℃。授予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中的事务。如果查询是跨服务器而您不想等待回滚,则必须转到远程服务器并终止该事务并在本地服务器上将其终止。
这适用于任何数据库系统。