0

所以我有一份在全国 7 个不同服务器上的 7 个不同数据库上运行的工作。该作业不是计划作业,因为我们无法预测每月或每隔一个月何时需要运行它,或者在哪个月的哪一天等。过去,客户端 VPN 连接到每个服务器,然后登录到每个数据库,然后手动启动作业。每个作业有 7 个步骤,每个步骤都将大量数据导出到 excel 文件中,以便稍后导入到仅接受 excel 数据的专有软件中。有点糟糕,但这就是它一直以来的做法。工作开始后我无法更改任何步骤,但我可以通过消除 7 个不同 VPN 连接和另外 7 个服务器登录等的一些初始压力来帮助使事情变得更容易。

我在 C#/.Net 中创建了一个简单的 Web 应用程序,它允许用户选择哪个服务器,然后点击开始按钮,然后这会以某种方式从后面的代码启动 sql 作业。由于我可以将此应用程序放在中央服务器上,因此不需要单独的 VPN 登录或数据库登录。用户所要做的就是登录到网络应用程序来触发一切。我找到了我尝试过的引用,这些引用让我触发了将登录到服务器并通过从 C# 直接访问来启动作业的代码。然而,在所有权限问题和其他错误之间,我觉得这是一个可怕的方向。我发现一些参考资料说我可以执行一些存储过程来触发每台服务器上的作业,这似乎是最简单的方向。

我正在寻找有关完成此任务的最佳方法的建议。我可以只编写一个 proc,然后将其放在每台服务器上,然后根据 web 应用程序下拉列表中选择的服务器,然后它会在该服务器上触发 proc 以开始工作吗?这似乎很容易,而且几乎可以解决一些权限问题。

任何建议表示赞赏。

4

1 回答 1

0

假设这是 SQL 服务器,您正在寻找的语法是:

EXEC [msdb].[dbo].[sp_start_job] '要开始的作业的名称'

只要您对存储过程具有执行权限,就不需要其他任何东西。
您可以从您的 .net 代码运行它,或者您可以创建链接服务器并让一个程序为每个服务器触发它。在这种情况下,代码会稍作更改,以包含链接服务器名称:

EXEC [链接服务器名称].[msdb].[dbo].[sp_start_job] '要启动的作业的名称'

于 2012-12-28T14:54:19.140 回答