パッケージへのログ機能の実装

Integration Services には、実行時イベントが発生するときにログ エントリを書き込み、カスタム メッセージも書き込むことができるログ機能があります。

Integration Services では各種ログ プロバイダーをサポートしており、カスタム ログ プロバイダーを作成する機能もあります。Integration Services ログ プロバイダーでは、ログ エントリをテキスト ファイル、SQL Server Profiler、SQL Server、Windows イベント ログ、または XML ファイルに書き込むことができます。

ログはパッケージに関連付けられ、パッケージ レベルで設定します。パッケージ内の各タスクやコンテナーによって、パッケージのログに情報を書き込むこともできます。パッケージのログ機能が有効にされていない場合でも、そのパッケージに含まれるタスクやコンテナーのログ機能を有効にできます。たとえば、親パッケージのログ機能を有効にしなくても、SQL 実行タスクのログ機能を有効にできます。パッケージ、コンテナー、およびタスクは、複数のログに対して書き込みが可能です。パッケージにのみログ機能を有効にできます。または、そのパッケージに含まれる任意の個別のタスクまたはコンテナーを選択して、ログ機能を有効にできます。

イベント メッセージまたはカスタム メッセージのログ機能をカスタマイズするために、Integration Services には、ログ エントリに通常書き込まれる情報のスキーマが用意されています。Integration Services のログ スキーマは、ログ記録できる情報を定義します。ログ エントリごとにログ スキーマから要素を選択します。

パッケージおよびパッケージ内のコンテナーやタスクが、同じ情報をログ記録する必要はありません。また、同一パッケージやコンテナーのタスクが別々の情報をログ記録することができます。たとえば、パッケージではパッケージが開始されたときにオペレーターに関する情報をログに書き込み、あるタスクではタスク失敗の原因を書き込み、別のタスクではエラー発生時に情報を書き込むという処理が可能です。パッケージおよびパッケージ内のコンテナーやタスクが複数のログを使用する場合、同じ情報がすべてのログに書き込まれます。

ログ記録するイベントと各イベントに対して書き込む情報を指定して、必要に応じたログ記録のレベルを選択できます。これにより、他のイベントに比べて有益な情報が得られるイベントがわかります。たとえば、PreExecute イベントについてはコンピューター名とオペレーター名のみをログ記録し、Error イベントについては利用可能なすべての情報を記録するとよいでしょう。

ログ ファイルがディスク領域を大量に消費したり、過剰にログが記録されたりするとパフォーマンスが低下します。これを防止するため、特定のイベントとログ記録する情報項目を選択して、ログ記録を制限することができます。たとえば、エラーが発生した日付とコンピューター名のみを記録するようにログを設定できます。

SSIS デザイナーの [SSIS ログの構成] ダイアログ ボックスを使用して、ログ オプションを定義できます。

ログ スキーマ

次の表に、ログ スキーマの要素を示します。

要素

説明

Computer

ログ イベントが発生したコンピューターの名前。

Operator

パッケージを起動したユーザーの ID。

SourceName

ログ イベントが発生したコンテナーまたはタスクの名前。

SourceID

ログ イベントが発生したパッケージ、For ループ コンテナー、Foreach ループ コンテナー、シーケンス コンテナー、またはタスクの一意識別子。

ExecutionID

パッケージ実行インスタンスの GUID。

注意
単一のパッケージを実行すると、ExecutionID 要素の値が異なるログ エントリが作成される場合があります。たとえば、BI Development Studio で 1 つのパッケージを実行すると、検証フェーズでは BI Development Studio に対応する ExecutionID 要素を持つログ エントリが作成されます。一方、実行フェーズでは、dtshost.exe に対応する ExecutionID 要素を持つログ エントリが作成されます。また、パッケージ実行タスクを含むパッケージを実行すると、これらの各タスクで子パッケージが実行されます。これらの子パッケージでは、親パッケージが作成するログ エントリとは異なる ExecutionID 要素を持つログ エントリが作成される場合があります。

MessageText

ログ エントリに関連付けられるメッセージ。

DataBytes

ログ エントリ固有のバイト配列。このフィールドの意味は、ログ エントリによって異なります。

次の表は、[SSIS ログの構成] ダイアログ ボックスの [詳細] タブでは利用できないログ スキーマ内の 3 つの追加要素について説明しています。

要素

説明

StartTime

コンテナーまたはタスクの実行が開始した時間。

EndTime

コンテナーまたはタスクの実行が停止した時間。

DataCode

コンテナーまたはタスクの実行結果を示す DTSExecResult 列挙体の値を通常含んだ整数値 (省略可能)。

  • 0 - 成功

  • 1 - 失敗

  • 2 - 完了

  • 3 - キャンセル

ログ エントリ

Integration Services では、あらかじめ定義されたイベントのログ エントリをサポートし、多くの Integration Services オブジェクトにカスタム ログ エントリを提供します。SSIS デザイナーの [SSIS ログの構成] ダイアログ ボックスに、これらのイベントとカスタム ログ エントリが一覧表示されます。

次の表に、実行時イベント発生時にログ エントリを書き込むために有効にできる、あらかじめ定義されたイベントを示します。これらのログ エントリは、実行可能ファイル、パッケージ、そのパッケージに含まれるタスクおよびコンテナーに適用されます。ログ エントリ名は、ログ エントリが書き込まれる原因となった、発生実行時イベントの名前と同じです。

イベント

説明

OnError

エラー発生時にログ エントリを書き込みます。

OnExecStatusChanged

実行可能ファイルの実行状態が変化したときにログ エントリを書き込みます。

OnInformation

実行可能ファイルの検証および実行中に、情報を報告するログ エントリを書き込みます。

OnPostExecute

実行可能ファイルの実行が終了した直後にログ エントリを書き込みます。

OnPostValidate

実行可能ファイルの検証が終了したときにログ エントリを書き込みます。

OnPreExecute

実行可能ファイルの実行直前にログ エントリを書き込みます。

OnPreValidate

実行可能ファイルの検証が開始される前にログ エントリを書き込みます。

OnProgress

実行可能ファイルの処理で測定可能な進捗があったときにログ エントリを書き込みます。

OnQueryCancel

タスク処理中に、実行のキャンセルが可能な時点に達したときにログ エントリを書き込みます。

OnTaskFailed

タスクが失敗したときにログ エントリを書き込みます。

OnVariableValueChanged

変数の値が変更されたときにログ エントリを書き込みます。

OnWarning

警告が発生したときにログ エントリを書き込みます。

PipelineComponentTime

各データ フロー コンポーネントに対する検証および実行の各フェーズのログ エントリを書き込みます。ログ エントリは、各フェーズの処理時間を示します。

Diagnostic

診断情報を提供するログ エントリを書き込みます。

たとえば、外部データ プロバイダーを呼び出す前と後にメッセージをログに書き込むことができます。詳細については、「パッケージ実行のトラブルシューティング」を参照してください。

パッケージおよび多くのタスクには、ログ機能を有効にできるカスタム ログ エントリがあります。たとえば、メール送信タスクには SendMailTaskBegin カスタム ログ エントリがあります。これを使用すると、電子メール メッセージの送信前に、メール送信タスクの実行開始時の情報をログに書き込むことができます。詳細については、「ログ記録用のカスタム メッセージ」を参照してください。

パッケージのコピーの区別

ログ データには、ログ エントリが属しているパッケージの名前と GUID が含まれます。既存のパッケージをコピーして新しいパッケージを作成する場合、既存のパッケージの名前と GUID もコピーされます。したがって、同じ GUID と名前が付いたパッケージが 2 つになり、ログ データ内のパッケージの区別が困難になります。

このようなあいまいさを回避するには、新しいパッケージの名前と GUID を更新する必要があります。Business Intelligence Development Studio のプロパティ ウィンドウで、ID プロパティの GUID を再生成し、Name の値を更新できます。プログラムから、または dtutil コマンド プロンプトを使用して、GUID と名前を変更することもできます。詳細については、「パッケージのプロパティの設定」および「dtutil ユーティリティ (SSIS ツール)」を参照してください。

親のログ オプション

一般的に、タスク、For ループ コンテナー、Foreach ループ コンテナー、シーケンス コンテナーのログ オプションは、それらが含まれているパッケージや親コンテナーのログ オプションと同じです。この場合、親コンテナーからログ オプションを継承するように設定できます。たとえば、SQL 実行タスクが含まれている For ループ コンテナーがある場合、SQL 実行タスクでは For ループ コンテナーに設定されたログ オプションを使用できます。親のログ オプションを使用するには、コンテナーの LoggingMode プロパティを UseParentSetting に設定します。このプロパティは、Business Intelligence Development Studio の [プロパティ] ウィンドウ、または SSIS デザイナーの [SSIS ログの構成] ダイアログ ボックスで設定できます。

ログのテンプレート

[SSIS ログの構成] ダイアログ ボックスでは、頻繁に使用するログ構成をテンプレートとして作成および保存して、複数のパッケージでそのテンプレート使用できます。これにより、複数のパッケージで一貫したログ記録の方法を簡単に使用でき、テンプレートを更新して適用することによって簡単にパッケージのログ設定を修正できます。テンプレートは XML ファイルとして格納されます。

[SSIS ログの構成] ダイアログ ボックスを使用してログ機能を設定するには

  1. パッケージおよびタスクのログ記録を有効にします。ログは、パッケージ レベル、コンテナー レベル、またはタスク レベルで記録できます。パッケージ、コンテナー、タスクに対して、それぞれ異なるログを指定できます。

  2. ログ プロバイダーを選択して、パッケージのログを追加します。ログはパッケージ レベルでのみ作成可能で、タスクやコンテナーではパッケージで作成されたログのいずれかを使用します。各ログは、テキスト ファイル、SQL Server Profiler、SQL Server、Windows のイベント ログ、または XML ファイルのいずれかのログ プロバイダーに関連付けられます。詳細については、「パッケージ内でのログ記録を有効にする方法」を参照してください。

  3. ログに取り込むイベントと、各イベントのログ スキーマ情報を選択します。詳細については、「保存されている構成ファイルを使用してログ記録を構成する方法」を参照してください。

パッケージの開発中にログ エントリを表示するには

外部リソース

DTLoggedExec

Integration Services のアイコン (小) 最新の Integration Services の入手

マイクロソフトが提供する最新のダウンロード、アーティクル、サンプル、ビデオ、およびコミュニティで選択されたソリューションについては、MSDN または TechNet の Integration Services のページを参照してください。

これらの更新が自動で通知されるようにするには、ページの RSS フィードを定期受信します。