私は SSIS/SQL を初めて使用するので、次の命名参照は正しくない可能性がありますが、問題の要点を伝えたいと考えています
私が使用しているスケジューリング ツールは、SQL 2012 で展開された SSIS パッケージを実行します。このツールは、SSIS パッケージが失敗したことを示し、その後のスケジュールされたジョブの実行を停止する必要があります。
The project uses the SSIS project deployment model in SQL 2012. デプロイされた SSIS パッケージは、サード パーティのスケジュール ツールによって呼び出されます。SSIS カタログでは、実行オプションを使用して、スケジューラに渡す SQL スクリプトを生成します。このスクリプトを編集してパラメーターを追加し、ジョブが同期的に実行されるようにします (つまり、呼び出し元はジョブが終了するまで待機し続けます)。SQL スクリプトはスケジューリング ツールから実行され、完了時にのみ次のジョブに移動します。
問題は、SSIS パッケージが失敗したときにスケジューリング ツールがリターン コードを受信しないことです。SSIS パッケージが失敗した場合、エラー通知を含む電子メールをキャプチャして送信するステップが含まれているため、失敗を確認できます。ただし、ジョブが正常に完了したかどうかに関係なく、スケジューリング フロー内の依存ジョブも実行されます。サード パート スケジューリング ツールに強制的にリターン コードを送信するパラメータはありますか?
パッケージの実行に使用されるスクリプトの例:
*Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Extract_Job.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'ETL', @project_name=N'ETL', @use32bitruntime=False, @reference_id=Null
Select @execution_id
DECLARE @var0 smallint = 1
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'SYNCHRONIZED', @parameter_value= 1; -- turn on synchronized execution
EXEC [SSISDB].[catalog].[start_execution] @execution_id
GO*
私が試したこと
- DTSEXEC コマンドを使用します。ただし、これは戻りコードを送信せず、同期的に実行されるため、同期的に実行する必要があります
- サード パーティのスケジューラには SSIS カタログ用のプラグインがありますが、未解決のバグがあるため、現在のバージョンでは動作しません。