0

SQL Server 2005 インスタンス (ローカル サーバー) から 150 を超える SQL Server インスタンス (SQL Server 2000、リモート) でジョブを手動で実行する必要があります。ジョブは、これらすべてのインスタンスで同じです。ジョブは、パラメーターなしでストアド プロシージャを呼び出すだけで、これもすべてのインスタンスで同じです。これらのジョブはスケジュールに従っています。しかし今では、リクエストに応じて、すべてのインスタンスまたは指定されたインスタンスに対してジョブを手動で実行するよう求められています。

これのベストプラクティスは何ですか? リモート ストアド プロシージャを呼び出すために openrowset を試しました。しかし、ジョブの各実行には数分かかるため、ループを使用してこれらすべてのジョブを実行すると、1 つずつ実行され、長い時間がかかります。理想的には、終了を待たずに各インスタンスでストアド プロシージャを実行できる必要があります。より理想的には、ジョブが終了するのを待たずに各インスタンスでジョブを実行できる必要があるため、各インスタンスのジョブ履歴に記録を残すことができます。

また、ストアド プロシージャはサード パーティ製であるため、変更することはできません。

アップデート:

「人々」はこれを 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" は、オブジェクトに列がないか、現在のユーザーがそのオブジェクトに対するアクセス許可を持っていないことを示しています。

OPENQUERY/OPENROWSET を使用して他のリモート プロシージャを問題なく呼び出すことができるため、sp_start_job が何も返さないことが原因である可能性があります。それで、回避策はありますか?

アップデート:

t-sql では、実際にはかなり単純であることがわかりました。

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

したがって、すべてのリモート SQL Server 2000 インスタンスが既にリモート サーバーとして追加されているため、実際に OPENROWSET/OPENQUERY を使用する必要はありません。

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 に答える