SQL Server Integration Services(SSIS)でのスクリプトタスクのデバッグ



Script Task Debugging Sql Server Integration Services



スクリプトタスク((スクリプトタスク)。

SQL Server統合サービス(SSIS)では、組み込みタスクを使用してすべてのビジネス要件を満たすことができない場合があります。このような場合、スクリプトタスクでC#またはVB.netコードを使用して機能を実現できます。スクリプトタスクは、組み込みタスクの理想的な代替ソリューションです。

SQL Server Integration Services(SSIS)では、組み込みタスクを使用しても、すべてのビジネス要件を満たせない場合があります。このような場合、スクリプトタスクでC#またはVB.netコードを使用して、この機能を実現できます。スクリプトタスクは、組み込みタスクの理想的な代替ソリューションです。



スクリプトタスクとスクリプトコンポーネント((スクリプトタスクとスクリプトコンポーネント)。

スクリプトタスクとスクリプトコンポーネントの両方に、C#またはVB.Netを使用してデフォルトの機能を拡張するためのプロビジョニングがあります。スクリプトタスクは、制御フローでタスクとして使用されます。スクリプトコンポーネントは、ソース、宛先、または変換としてデータフローで使用されています。

スクリプトタスクとスクリプトコンポーネントはどちらも、C#またはVB.Netを使用してデフォルトの関数を拡張するためのプロビジョニングを提供します。スクリプトタスクは、制御フローのタスクとして使用されます。スクリプトコンポーネントは、データフローのソース、ターゲット、または変換として使用されています。



以下は、スクリプトタスクの力を説明するいくつかの例です

スクリプトタスクの機能を説明するいくつかの例を次に示します。

  1. SSISからActiveDirectoryサービスインターフェイス(AD)をクエリして、特定のユーザーIDのメンバーシップグループのリストを抽出するSSISからActive Directoryサービスインターフェイス(AD)をクエリして、特定のユーザーIDのメンバーシップグループのリストを抽出する
  2. いくつかの基準(ファイルのサイズ、ファイルの日付と内容など)に基づいてソースデータファイルをフィルタリングします。多くの条件(ファイルサイズ、日付と内容など)に基づいてソースデータファイルをフィルタリングします。

スクリプトタスクを使用することには多くの利点がありますが、問題のデバッグと修正が複雑なため、通常は開発者によって損なわれます。



スクリプト化されたタスクを使用することには多くの利点がありますが、開発者はデバッグと問題解決の複雑さのためにそれを破ることがよくあります。

スクリプトタスクのデバッグ((スクリプトタスクのデバッグ)。

このブログ投稿では、スクリプトタスクをデバッグするためのいくつかの手法を統合しました。これらのデバッグ手法は、2つのグループに分類されています。

このブログ投稿では、スクリプトタスクをデバッグするための多くの手法を統合しました。これらのデバッグ手法は、2つのカテゴリに分類されています。

  • 設計時のデバッグ技術設計時のデバッグ技術
  • ランタイムデバッグ技術ランタイムデバッグ技術

設計時のデバッグ((設計時のデバッグ)。

この方法は、パッケージの開発中に適しています。 SSDTを使用してデバッグと調査を行います。

この方法は、ソフトウェアパッケージを開発するときに適用できます。デバッグと調査にはSSDTを使用します。

ランタイムデバッグ((ランタイムデバッグ)。

パッケージが展開され、特定の時間に実行されるようにスケジュールされた後は、実行時分析が役立ちます。この場合、SSDTを使用してパッケージをデバッグすることはできません。したがって、実行中の手順を理解するには、他の代替手法を使用する必要があります。

パッケージがデプロイされ、プログラムが特定の時間に実行されるようにスケジュールされたら、ランタイム分析が役立ちます。この場合、SSDTを使用してソフトウェアパッケージをデバッグすることはできません。したがって、実行プロセスを理解するには、他の代替テクノロジーを使用する必要があります。

ソリューションの概要((ソリューションの概要)。

複数のデバッグ機能を説明するために、1つのスクリプトタスクでサンプルSSISパッケージを作成しました。このスクリプトタスクは、1つのユーザー変数(Filecount)を受け入れます。

さまざまなデバッグ機能を説明するために、スクリプトタスクを使用してサンプルのSSISパッケージを作成しました。このスクリプトタスクは、ユーザー変数(Filecount)を受け入れます。

以下の画像は、高レベルのサンプルパッケージを表しています。

下の画像は、プレミアムサンプルパッケージを表しています。

このサンプルパッケージを使用して、デバッグ手法を検討します。 4つのデバッグ方法が利用可能です。

このサンプルパッケージを使用して、デバッグ手法について説明します。使用可能なデバッグ方法は4つあります。

  1. メッセージボックスを使用して値を印刷するメッセージボックスを使用して値を印刷する
  2. デバッグにブレークポイントオプションを使用するデバッグにブレークポイントオプションを使用する
  3. スクリプトタスクでのログの使用ログを使用してスクリプトタスクを実行する
  4. スクリプトタスク内でのTry / Catchの使用スクリプトタスク内でのTry / Catchの使用

メッセージボックスとブレークポイントのオプションは、デザイン時のデバッグに適しています。ロギングおよび「Trycatch」メソッドは、実行時にデバッグするのに理想的です。

「メッセージボックス」および「ブレークポイント」オプションは、設計時のデバッグに適しています。ロギングおよび「キャプチャを試行」メソッドは、実行時のデバッグに最適です。

1.メッセージボックス((1.メッセージボックス)。

この手法では、メッセージボックス(ダイアログボックス)を使用して、変数または文字列の値を画面に表示します。文字列または変数を表示することにより、開発者はデバッグできるようになります。これは、以下のコードを使用して実現できます。

この手法では、メッセージボックス(ダイアログボックス)を使用して、変数の値または文字列を画面に表示します。文字列または変数を表示することにより、開発者はデバッグできるようになります。これは、次のコードを使用して実現できます。

Messagebox.show(文字列値)

Messagebox.show(文字列値)

これは、詳細を知るための非常に原始的なレベルのデバッグです。以下の図は、メッセージボックスを使用するためのスクリプトタスク内のコードを表しています。

これは非常に原始的なレベルのデバッグであり、詳細を知ることができます。以下の図は、スクリプトタスクでメッセージボックスを使用するためのコードを表しています。

実行中、SSISは次の図のような値のメッセージボックスを表示します。

実行中、SSISは次の図に示す値のメッセージボックスを表示します。

2.ブレークポイント((2.ブレークポイント)。

ブレークポイントを設定すると、実行中にデバッガーを停止するのに役立ちます。これは、実行時の変数の値を確認するのに役立ちます。ブレークポイントは、カーソルを行に置き、ファンクションキーF9を押すことで設定できます。設定すると、デバッグ行は左マージンの赤い点を使用して識別されます。定義されたブレークポイントはVSTAで管理でき、SSDTデザイナの[ブレークポイントの設定]ダイアログボックスから削除できます。

ブレークポイントを設定すると、実行中にデバッガーを停止するのに役立ちます。これは、実行中に変数の値を表示するのに役立ちます。行にカーソルを置き、ファンクションキーF9を押すと、ブレークポイントを設定できます。設定後、デバッグ行は左マージンの赤い点を使用します。定義されたブレークポイントはVSTAで管理でき、SSDTDesignerの[ブレークポイントの設定]ダイアログボックスから削除できます。

以下の図は、スクリプトタスクで定義されたブレークポイントを示しています。

以下の図は、スクリプトタスクで定義されたブレークポイントを示しています。

「ブレークポイントの設定」ダイアログボックスには、スクリプトタスクのブレークポイントが表示されます。ブレークポイントは、ダイアログボックスの下部に行番号と関数の名前とともに一覧表示されます。実行時に、アプリケーション用Visual Studio(VSTA)はスクリプトタスクを読み取り専用モードで開きます。

[ブレークポイントの設定]ダイアログボックスには、スクリプトタスクのブレークポイントが表示されます。ブレークポイントは、ダイアログボックスの下部に行番号と関数名とともに一覧表示されます。実行時に、Visual Studio for Application(VSTA)はスクリプトタスクを読み取り専用モードで開きます。

これで、ブレークポイント行が強調表示され、実行が一時停止されます。

これで、ブレークポイント行が強調表示され、実行が一時停止します。

上記の図では、ユーザー変数「Filecount」の値を読み取り、それをローカル変数「Filecount」に割り当てています。変数の値が導出され、メッセージボックスに表示されます。これで、変数の上にカーソルを置くことで変数の値を評価できます。

上記の図では、ユーザー変数「Filecount」の値を読み取り、それをローカル変数「Filecount」に割り当てています。変数の値が導出され、メッセージボックスに表示されます。これで、変数にカーソルを置くことで変数の値を評価できます。

変数の値は、イミディエイトウィンドウにも出力できます。

変数の値は、イミディエイトウィンドウに出力することもできます。

失敗シナリオ((失敗シナリオ)。

デバッグの主な目的は、障害の原因を調査して理解することです。それでは、サンプルの障害シナリオを見てみましょう。

デバッグの主な目的は、失敗の原因を調査して理解することです。それでは、失敗シナリオの例を見てみましょう。

失敗のシナリオを説明するために、変数のつづりを「User」ではなく「user」と意図的に間違えました。したがって、変数の値を評価している間、スクリプトタスクが失敗することを期待しています。

失敗の状況を説明するために、変数を意図的に「User」ではなく「user」とつづりました。したがって、変数値を評価するときにスクリプトタスクが失敗することを期待しています。

下記の写真では、実行中にラインがヒットしました。

以下の図では、実行中に行がヒットしました。

変数コレクションのスペルが間違っているため、例外がスローされることが予想されます。

変数コレクションのスペルミスにより、例外がスローされることが予想されます。

例外はVSTAによってキャッチされ、詳細は次の図のようにダイアログボックスに表示されます。

VSTAが例外をキャッチし、次の図に示すように、詳細情報がダイアログボックスに表示されます。

成功事例((成功シナリオ)。

変数が(「ユーザー」として)修正されると、同じ行が正常に実行されます。これで、変数の上にカーソルを置くと、変数の値が表示されました。以下の図は、正常な実行と変数の値を表しています。

変数が(「ユーザー」として)修正されると、同じ行が正常に実行されます。これで、カーソルが変数に置かれると、変数の値が表示されます。以下の図は、正常な実行と変数値を表しています。

「Filecount」変数の値は、コマンドウィンドウに出力することもできます。これは、式「?Filecount」を使用して実現できます。値が計算され、次の行に表示されます。

'Filecount'変数の値は、コマンドウィンドウに出力することもできます。これは、式 '?を使用して実現できます。 Filecount '。値が計算され、次の行に表示されます。

ランタイムデバッグ((ランタイムデバッグ)。

上記のソリューションは開発中に変数を評価するのに役立ちますが、実行時には役に立たない場合があります。 SSISパッケージは手動の介入なしで実行されるため、事後分析の値を取得する別の方法が必要です。

上記のソリューションは、開発中に変数を評価するのに役立ちますが、実行時には役に立たない場合があります。 SSISパッケージは手動の介入なしで実行されるため、事後分析の値を取得するには他の方法が必要です。

これは2つの方法で実現できます。これらの方法論については、いくつかのサンプルを使用して以下で説明します。

これは2つの方法で実現できます。これについては、いくつかの例を使用して以下で説明します。

3.ログを有効にします((3.ログを有効にする)。

統合サービスにログインすると、実行の進行状況や結果などの詳細を記録するのに役立ちます。 SSISは、ログ、事前定義されたイベント、またはユーザー定義のメッセージに使用できます。 DtsオブジェクトのLogメソッドを使用して、ユーザー定義のメッセージをログに記録できます。スクリプトタスクのログを利用するには、スクリプトタスクのログを有効にする必要があります。さらに、「SSISログの構成」ダイアログボックスで「ScriptTaskLogEntry」イベントを選択する必要があります。以下の手順は、適切なログプロバイダーを有効にして選択するのに役立ちます。

統合サービスにログインすると、実行の進行状況や結果などの詳細情報を記録するのに役立ちます。 SSISは、ロギング、事前定義されたイベント、またはユーザー定義のメッセージに使用できます。 DtsオブジェクトのLogメソッドを使用して、ユーザー定義のメッセージを記録できます。スクリプトタスクへのログインを使用するには、スクリプトタスクへのログインを有効にします。さらに、[SSISログの構成]ダイアログボックスで[ScriptTaskLogEntry]イベントを選択する必要があります。以下の手順は、適切なログプロバイダーを有効にして選択するのに役立ちます。

以下の図では、SQLサーバーログプロバイダーでログが有効になっています。

以下の図では、SQLServerログプロバイダーを使用してログが有効になっています。

プロバイダーを選択したら、下の図のように、詳細なイベント「ScriptTaskLogEntry」を選択する必要があります。

プロバイダーを選択したら、次の図に従って詳細なイベント「ScriptTaskLogEntry」を選択する必要があります。

DtsオブジェクトのLogメソッドが呼び出され、変数の値とともにユーザー定義のメッセージが渡されます。ロギングの実際のコードを以下に示します。

DtsオブジェクトのLogメソッドが呼び出され、ユーザー定義のメッセージが変数の値とともに渡されます。実際の録音コードは以下のとおりです。

クエリログテーブル((ログテーブルのクエリ)。

スクリプトタスクが正常に実行された後、SSISはユーザー定義のメッセージをログテーブルに記録しました。次に、SysSSISLogテーブルでスクリプトタスクのログエントリをクエリします。クエリの結果を以下に示します。

スクリプトタスクを正常に実行した後、SSISはユーザー定義メッセージをログテーブルに記録しました。ここで、SysSSISLogテーブルのスクリプトタスクログエントリをクエリしてみましょう。クエリ結果を以下に示します。

4.キャッチ/エラー処理を試してください((4.キャッチ/エラー処理を試してください)。

すべての状況に対してプログラムおよび計画を立てましたが、予期しない例外が一定期間にわたって発生します。コード内の予期しない例外を処理することが可能です。

すべての状況に対してプログラムおよび計画を立てましたが、予期しない例外が一定期間にわたって発生します。コード内の予期しない例外を処理できます。

スクリプトタスクでは、trycatchブロックを使用して予期しない例外をキャプチャできます。次の図のように、コードはtryブロックに配置する必要があります。

スクリプトタスクでは、try catchブロックを使用して、予期しない例外をキャッチできます。次の図に示すように、コードはtryブロックに配置する必要があります。

例外が見つかった場合、コールスタックはcatchブロックにリダイレクトされます。例外の詳細は、catchブロックで確認できます。を使用して例外をキャッチし、プロパティを使用してスタックにアクセスできます。

例外が見つかった場合、コールスタックはcatchブロックにリダイレクトされます。例外の詳細は、catchブロックで提供されます。例外がキャッチされ、属性を使用してスタックにアクセスできます。

例外が発生したため、スクリプトタスクが失敗したことをパッケージに通知する必要があります。これは、DtsオブジェクトでイベントFire.Errorを発生させることで実行できます。このイベントの詳細は、将来の目的のためにログに記録できます。

例外により、スクリプトタスクが失敗したことをパッケージに通知する必要があります。これは、DtsオブジェクトでイベントFire.Errorを発生させることで実行できます。このイベントの詳細は、将来の使用のために記録することができます。

以下の図は、trycatchブロックのログエントリを表しています。

以下の図は、trycatchブロックのログエントリを表しています。

ログエントリに加えて、エラーの詳細は、下の画像のように進行状況ウィンドウにも表示されます。

次の図に示すように、ログエントリに加えて、エラーの詳細も進行状況ウィンドウに表示されます。

概要((概要)。

スクリプトタスクでコードをデバッグする方法はほとんどありません。 SSISでコードをデバッグすることは芸術です。すべての方法を試して、どの方法が自分のケースに適しているかを確認することをお勧めします。

スクリプトタスクでコードをデバッグする方法はいくつかあります。 SSISでのコードのデバッグは芸術です。すべての方法を試して、どの方法が状況に適しているかを確認することをお勧めします。

参照((参照)。

翻訳元: https://www.sqlshack.com/script-task-debugging-in-sql-server-integration-services-ssis/