sql server运行远程作业

时间:2013-03-26 15:07:48

标签: sql-server database-administration

我需要从sql server 2005实例(本地服务器)在150多个sql server实例(sql server 2000,remote)上手动运行作业。所有这些实例的工作都是一样的。该作业只调用没有参数的存储过程,这在所有实例中也是相同的。这些工作按计划进行。但是现在他们希望我根据请求为所有实例或指定实例手动运行作业。

最佳做法是什么?我试过openrowset来调用远程存储过程。但是每次运行都需要几分钟,所以如果我使用一个循环来运行所有这些工作,那么它将逐个运行并且这需要很长时间。理想情况下,它应该能够在每个实例上运行存储过程而无需等待它完成。理想情况下,它应该能够在每个实例上运行作业而无需等待它完成,因此它可以在每个实例的作业历史记录中留下记录。

存储过程来自第三方,因此无法更改。

更新

因为'人们'请求从SSRS报告初始化,使用SSRS在服务器上调用一些T-SQL / proc是最合适的。我现在遇到的问题是当使用OPENQUERY或OPENROWSET从本地服务器调用远程SQL Server 2000实例上的msdb.dbo.sp_start_job时我得到了无法跟踪错误。

处理对象" exec msdb.dbo.sp_start_job @job_name =' xxx' &#34 ;. OLE DB提供程序" SQLNCLI"对于链接服务器" xxx"表示该对象没有列,或者当前用户没有该对象的权限。

我想这可能是因为sp_start_job没有返回任何内容,因为我可以使用OPENQUERY / OPENROWSET来调用其他远程proc而不会出现问题。那么任何解决方法?

更新

我发现在t-sql中它实际上非常简单。

EXEC [linkedServerName] .msdb.dbo.sp_start_job @job_name =' test2'

所以我不需要使用OPENROWSET / OPENQUERY,因为所有远程SQL Server 2000实例都已添加为远程服务器。

1 个答案:

答案 0 :(得分:1)

这实际上是调用该过程的SQL代理作业吗?如果是这样,您可以远程调用sp_start_job,这将异步启动作业。我假设你是作为一个系统管理员连接来做这件事。

如果您有SQL Server 2008客户端工具,则可以使用“本地服务器组”。如果您注册了所有150个SQL实例,则可以通过右键单击整个组并选择“新建查询”来一次性连接它们。在状态栏中,您将看到它连接到150/150服务器。然后无论你运行什么命令,它都会同时在所有150个命令上运行它。

服务器不一定是2008,只有您的客户端工具。我经常在SQL 2000服务器上使用此功能。