web-dev-qa-db-ja.com

ジョブがSSISパッケージを直接呼び出すのではなく、dtexec.exeでバッチファイルを呼び出すのはなぜですか?

SSISパッケージを呼び出す多くのジョブを持つSQL 2012サーバーを継承しました。

より明確な解決策( "SSISパッケージ"ジョブステップから直接呼び出す)の代わりに、これらのジョブはCmdExecステップを使用して、1行を含むバッチファイルを呼び出します。

dtexec.exe /FILE "D:\path\PackageName.dtsx"

以前のDBAがこれを行ったのはなぜですか?許可?個人の好み?

そしてなぜダブルホップなのか? dtexec.exeを使用したい場合は、そのコマンドをジョブステップに直接配置できませんか?

パッケージにMS Officeコンポーネントが使用されている場合、パッケージの32ビットと64ビットの依存関係に問題が発生することがあります。それがここで起こっていることかどうかはどうすればわかりますか?

2
BradC

SQL Server 2012およびより前のプロジェクト展開モデルでは、SSMSのコンテキストからSSISパッケージを実行する唯一の方法は、SQLエージェントジョブまたはxp_cmdshellでした。

SQLエージェントは特別なパラメーター/X86を持っているため、SQLエージェントから渡されたときにのみ尊重される DTEXEC.exe を呼び出しています。それ以外の場合は、dtexec.exeへの明示的なパスを指定して、32ビット操作か64ビット操作かを制御します。

このオプションは、SQL Serverエージェントでのみ使用されます。コマンドプロンプトでdtexecユーティリティを実行する場合、このオプションは無視されます。

オプションA

couldバッチファイルを使用してSSISパッケージを開始する理由です。彼らは、パッケージの実行に正しいdtexecが使用されていることを確認したいと考えています。 32対64であるかどうかを判断するための疑いのない自己宣伝 http://billfellows.blogspot.com/2015/02/is-my-ssis-package-running-in-32-or-64.html また https://stackoverflow.com/a/13092260/181965

オプションB

バッチスクリプトが構成(ファイル、テーブルなど)を使用せず、環境ごとに異なる動作を実行したいために使用されたバッチスクリプトを見た別の理由。 SSISパッケージにConnectionString変数があり、設計時の値がDevであると仮定しますが、現在は開発中です。その値を変更する1つの方法は、実行時に常にプロパティを設定することです。psuedocodeは

dtexec.exe /file MyPackage /SET ConnectionString;Prod

怠惰な場合、すべての環境で同じジョブ定義を使用できますが、必要に応じて/SET値の内容を変更します。それほど役に立たないとは思いますが、難易度の異なるタスクを見る人もいます。

上記は/ SETだけでなくてもかまいません。ログやその他の設定を実際に行うことができます。 SSISがネイティブでサポートしていることを知らなかったため、実行ログに出力を記録したいのかもしれません。開発バッチファイルに/REP EWIP > CurrentRun.txtが含まれている可能性がありますが、製品版には/REP Eのみあります

オプションC

別の理由は、セキュリティの幻想です。以前の雇用主では、バッチスクリプトアプローチを使用してSSISパッケージを実行していました。開発者にはSQLエージェントへのアクセスが許可されていません。 xp_cmdshell-ああ、なんてことだ。運用前のボックス(ロード、ステージ、UAT)へのログオンを信頼することもできませんでしたが、stillオンデマンドでSSISパッケージを実行する必要がありました。

そのため、パッケージを実行する必要があるたびに数週間の緊急リクエストチケットを送信した後、ゲート付きパッケージ実行エクスペリエンスを提供するストアドプロシージャのペアを作成しました。 RunSSISPackageおよびRunSSISPackage32。実行するパッケージの名前を取得します。私たちが作成したすべてのパッケージについて、それを実行するバッチスクリプトを作成します。すべての関係者にとって忙しい仕事がたくさんありましたが、それが彼らが私たちにパッケージを実行させる唯一の方法でした。この手順では、xp_cmdshellとEXECUTE ASを使用して、完全なsysadmin権限でパッケージを実行できるようにしました。ちなみに、監査を行わずにSSISパッケージを展開できるようにすると、開発者グループがsysadminロールに追加されるSQL実行タスクが追加されますcould。おもう。多分。仮説的に。

オプションD

SQLエージェントではありません。 SQL Agent以外のクライアントで使用される他のスケジューリングツールを見たことがあります。 SSISのサポートは具体的には不十分ですが、サポートされているバッチファイルはすべてサポートされているため、SSISと互換性のないエンタープライズスケジューラが使用されている可能性があります。

それ以外の場合、それが単なるdtexec.exe/file foo.dtsxの場合...私は何も得ませんでした

3
billinkc

最初に(まだ知らなかった場合)DTExecは、SSISパッケージを実行するために使用されるコマンドラインツールです。私の知る限り、SQLジョブでさえDTExecを使用しています。

なぜネイティブGUIのステップではなくbatファイルを使用しているのかについては、説明できませんでした。彼らはbatファイルに慣れているか、SQLジョブにオプションがあることを知らなかった可能性もあります。あるいは、別のスケジュールツールを使用してジョブを開発し、batファイルへの呼び出しをSQLジョブに移動するだけで、何も変更する必要はありませんでした。

私自身、32ビットと64ビットの問題に関して多くの問題を抱えてきました。私が言えることは、32ビットドライバーをヒットするために、パッケージを32ビットモードで実行できることです。

2
Kenneth Fisher