0

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

对此的最佳做法是什么?我试过用 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'”。链接服务器“xxx”的 OLE DB 提供程序“SQLNCLI”表示该对象没有列,或者当前用户对该对象没有权限。

我想这可能是因为 sp_start_job 没有返回任何内容,因为我可以使用 OPENQUERY/OPENROWSET 毫无问题地调用其他远程过程。那么有什么解决方法吗?

更新:

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

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

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

4

1 回答 1

1

这实际上是调用该过程的 SQL 代理作业吗?如果是这样,您远程调用sp_start_job将异步启动作业。我假设您以系统管理员的身份进行连接以执行此操作。

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

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

于 2013-03-26T15:12:16.507 回答