SQL Serverエージェントジョブのチェーン


9

SQLサーバーエージェントでジョブをセットアップしたそれぞれにいくつかのワークパッケージがあります。時々私はすべて一緒に実行する必要があります。それらをすべて特定の順序で実行するための最良の方法は何ですか?SQLサーバーエージェントが、実行するジョブステップとしてジョブを含めることができないことに少し驚いています。私は試しました


1
+2私はこの昨夜について考えていました:)
jcolebrand

1
各アイテムを別々の仕事にする必要がありますか?彼らは別のジョブステップを持つと(ステップを実行する必要があるかどうかを決定する各ジョブステップの追加T-SQLまたは他のロジックのための方法と、マスタジョブに設定をすることができ例えば(条件の仕事は他に何もしないでください)= trueの場合。
johndacostaa

助けてくれてみんなに感謝します、アーロンズが提案した方法は私が必要とするものに最も近づいているようです。私はそれを行うためのツールの許可を得れば、私はモンスターの仕事を行う必要がありますそれ以外の場合はSQLエージェントIの範囲内で、表示されます。:(
nojetlag

「パッケージ」と言いますが、SSISパッケージですか?
SqlSandwiches、2011

ジョン・ダコスタに同意した。条件付きのステップを使用します。
Alex_L 2011

回答:


5

SSISを使用するための学習時間や既存の専門知識がない場合に、これを可能にするサードパーティのツールがあります。免責事項:私はそれらの会社の1つで働いています。SQL SentryのEvent Managerを確認してください。SQLManagerジョブ(SSISパッケージを含む)、Windowsスケジュールタスク、さらにはOracleジョブも処理します。SQL Serverの機能(チェーンとキューイングを含む)は次のとおりです。

http://sqlsentry.net/event-manager/sql-server-enterprise-features.asp

残念ながら、SQLエージェントを単独で使用して複数のジョブを連鎖させることはできないと思います。マリアンが提案したsp_start_jobメソッドは、非同期でジョブを開始します。それらが完了するのを待ってから、次のコマンドまたは次のステップに進むことができます。


ええと、彼はmsdbシステムテーブルにクエリを実行でき、他のジョブ(およびそのステップ)のステータスを取得できると思います。私が間違っている場合は、謝罪し、これを明らかにするための6パックを提供します:-)。
マリアン

あなたのポイントを理解しないでください。msdbテーブルにクエリを実行すると、ジョブをチェーン化するのに役立ちますか?WHILE 1 = 1はステータスが変わるまで?クエリ通知?確かに、これを手動で行う方法はたくさんありますが、sp_start_jobを呼び出すよりもはるかに複雑になります。
アーロンベルトラン

8

SQLエージェントは、ジョブスケジューラとして「エンタープライズクラス」とは見なされません。自分で構築しなければならない多くの機能が不足しています。そのような例の1つは依存関係です。その結果、このロジックのほとんどをSSISパッケージに入れる必要があります。必ずしも悪いことではありません...自分を構築して管理するのはただの痛みです。

だから、それが私の答えです。SSISパッケージを構築し、t-sqlコマンドを使用して、必要に応じてSQLエージェントジョブを呼び出します。要件とシナリオが明確に定義されていることを確認してください。たとえば、複数のジョブが同時に同じテーブルにアクセスすることを望まない場合があります。

HTH


愚かな私は、このような成熟した「エンタープライズエディション」製品の「エンタープライズ」スケジューラを期待しています:)。ステップとしてたくさんのものを含めることができるので、私は望みました。最も明白な(別のジョブ)が実行可能オブジェクトとして使用できないことは面白いです。かなり複雑なSSISパッケージを実行するためにジョブを使用しています。ジョブを柔軟に実行するために別のSSISパッケージをビルドする必要があるのは、私には適切なアプローチではないようです。特に、非同期のsp_start_jobが再び発生するためです。
nojetlag

6

システムストアドプロシージャsp_start_jobを使用して、ジョブのステップでT-SQLスクリプトを使用してみてください。それはあなたがあなたが望む多くの仕事を連鎖させることを可能にします。


Aaronによる言及のように、(非同期であるため)ほとんどすべてが同時に発火するため、特定のシーケンスを維持することはできません。したがって、これは実際にはチェーンアプローチではなく、コレクションアプローチです:)
nojetlag

OK、多分簡単ではないかもしれませんが、msdbシステムテーブルに対してクエリを実行でき、特定の時間待機してからクエリを再実行できます。または、ジョブステップのステータスを配置するトラッキングテーブルを作成し、そのトリガーに基づいて次のステップを自動的に起動することもできます。または、それを実行してさらに価値を追加し、豪華なUIを表示するツールを購入することもできます:-)。一人一人のためのオプションがあります...
マリアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.