パッケージ実行のトラブルシューティング

Integration Services には、パッケージを完成して配置した後、そのパッケージの実行時のトラブルシューティングに使用できる機能とツールが含まれています。

Business Intelligence Development Studio には、デザイン時に、パッケージの実行を一時的に停止するブレイクポイント、進行状況ウィンドウ、およびデータ フロー全体でのデータの流れが追えるデータ ビューアが用意されています。ただし、既に配置されているパッケージを実行するときは、これらの機能を使用できません。配置済みのパッケージのトラブルシューティングを行うための主な技法は次のとおりです。

  • イベント ハンドラを使ってパッケージ エラーをキャッチおよび処理する。

  • エラー出力を使って不適切なデータをキャプチャする。

  • ログ記録を使ってパッケージの実行をステップ単位に追跡する。

次のヒントや技法を使用して、実行中のパッケージの問題を回避することもできます。

イベント ハンドラを使ったパッケージ エラーのキャッチおよび処理

イベント ハンドラを使用することにより、パッケージやパッケージ内のオブジェクトで発生する多くのイベントに対応できます。

  • OnError イベントのイベント ハンドラを作成する。イベント ハンドラでは、Send Mail タスクを使用した管理者へのエラー通知、スクリプト タスクやカスタム ロジックを使用したトラブルシューティング用のシステム情報の取得、リソースや不完全な出力の一時的なクリーンアップなどを実行できます。詳細については、「Integration Services のイベント ハンドラ」および「パッケージのイベント ハンドラの作成」を参照してください。

エラー出力を使った不適切なデータのトラブルシューティング

多くのデータ フロー コンポーネントではエラー出力を使用して、エラーを含む行を後で分析できるように別の場所にリダイレクトできます。

  • エラー出力を使って不適切なデータをキャプチャする。エラーを含む行をエラー テーブルやテキスト ファイルなどの別の場所に送信します。エラー出力では、行が拒否される原因となったエラーの番号を含む列と、エラーが発生した列の ID を含む列の 2 つの数値列が自動的に追加されます。詳細については、「データのエラー処理」および「データ フロー コンポーネントでエラー出力を構成する方法」を参照してください。

  • 関連情報をエラー出力に追加する。エラー出力から提供される 2 列の数値識別子だけでなく、説明的な情報を追加すると、エラー出力の分析が容易になります。

    エラーの説明を追加する。スクリプト コンポーネントを使用することで、エラーの説明を容易に参照できます。詳細については、「スクリプト コンポーネントによるエラー出力の強化」を参照してください。

    エラー列の名前を追加する。エラー出力に保存されている列 ID に対応する列名は、スクリプト コンポーネントでは容易に参照できず、追加手順が必要です。データ フロー内の各列の ID は、データ フロー タスク内では一意で、パッケージのデザイン時に保存されます。次のアプローチは、列名をエラー出力に追加するための 1 つの考え方です。

    1. 列名の参照テーブルを作成する。Integration Services API を使用する個別のアプリケーションを作成します。保存される各パッケージ、パッケージ内の各データ フロー、データ フロー内の各オブジェクト、データ フロー オブジェクト内の各入出力でこのアプリケーションを繰り返し実行します。アプリケーションでは、列 ID と参照テーブルでの各列の名前を、親データ フロー タスクとパッケージ ID と共に保存します。

    2. 列名を出力に追加する。前の手順で作成した参照テーブルの列名を参照する出力に、参照変換を追加します。参照では、エラー出力の列 ID、パッケージ ID (システム変数 System::PackageID で使用できます)、データ フロー タスクの ID (システム変数 System::TaskID で使用できます) を使用できます。

ログ記録を使ったパッケージの実行のトラブルシューティング

ログ記録を有効にすることで、実行中のパッケージで発生する多くの現象を追跡できます。ログ プロバイダは、後で分析するために特定のイベントに関する情報をキャプチャし、その情報をデータベース テーブル、フラット ファイル、XML ファイルなどのサポートされている出力形式で保存します。

  • ログ記録を有効にする。イベントのみ、およびキャプチャする情報項目のみを選択することによって、ログの出力を微調整できます。詳細については、「Integration Services ログ プロバイダ」および「パッケージへのログ機能の実装」を参照してください。

  • **パッケージの Diagnostic イベントを選択して、プロバイダに関する問題のトラブルシューティングを行います。**パッケージと外部データ ソースとのやり取りに関するトラブルシューティングに役立つログ メッセージが用意されています。詳細については、このトピック内の「外部データ プロバイダの問題のトラブルシューティング」を参照してください。

  • 既定のログ出力を拡張する。ログ記録は、通常、パッケージを実行するたびに、ログの記録先に行を追加します。各行のログ出力では名前や一意識別子でパッケージを識別していますが、一意の ExecutionID で各パッケージの実行も識別しています。そのため、1 つの一覧に大量のログ記録が出力され、分析が難しくなります。

    次のアプローチは、既定のログ出力を拡張してレポートの生成を容易にするための 1 つの考え方です。

    1. パッケージを実行するたびにログを記録する親テーブルを作成する。この親テーブルにはパッケージを実行するたびに 1 行だけを記録し、ExecutionID を使用して、Integration Services ログ記録テーブルの子レコードにリンクします。各パッケージの最初に SQL 実行タスクを使用して、この新しい行を作成し、開始時刻を記録します。次に、パッケージの終了時に別の SQL 実行タスクを使用して、終了時刻、実行時間、状態でその行を更新します。

    2. データ フローに監査情報を追加する。監査変換を使用して、各行を作成または変更したパッケージの実行に関する情報を、データ フロー内の行に追加できます。監査変換は、PackageName や ExecutionInstanceGUID など、9 種類の情報を作成します。詳細については、「監査変換」を参照してください。監査を目的として各行に含めるカスタム情報があれば、派生列変換を使用して、その情報をデータ フロー内の行に追加できます。詳細については、「派生列変換」を参照してください。

    3. 行数データのキャプチャを検討する。行数情報用に別のテーブルを作成することを検討します。このテーブルでは、パッケージ実行の各インスタンスを ExecutionID で識別します。行数変換を使用して、データ フロー内の重要な時点の行数を一連の変数に保存します。データ フローの終了後、SQL 実行タスクを使用してこの一連の値をテーブルの行に挿入すると、後の分析やレポートに役立ちます。

    この方法の詳細については、Microsoft のホワイト ペーパー「プロジェクト REAL: ビジネス インテリジェンス ETL のデザイン方法」の「ETL 監査およびログ記録」を参照してください。

デバッグ ダンプ ファイルを使ったパッケージの実行のトラブルシューティング

Integration Services では、パッケージの実行に関する情報を提供するデバッグ ダンプ ファイルを作成できます。詳細については、「デバッグ ダンプ ファイルの操作」を参照してください。

実行時検証問題のトラブルシューティング

パッケージ内の前のタスクの実行が完了するまで、データ ソースに接続できなかったり、パッケージの一部を検証できなかったりすることがあります。Integration Services には、そのような検証エラーを回避するのに役立つ、次の機能があります。

  • パッケージが読み込まれるときには無効になっているパッケージ要素の DelayValidation プロパティを構成する。構成が無効になっているパッケージ要素の DelayValidation を True に設定できます。これによってパッケージが読み込まれるときの検証エラーを防ぎます。たとえば、SQL 実行タスクが実行時に作成するまで存在しないテーブルを、データ フロー タスクで使用する場合があります。DelayValidation プロパティはパッケージ ベル、またはパッケージに含まれている個別のタスクやコンテナのレベルで有効にできます。

    DelayValidation プロパティはデータ フロー タスク上で設定できますが、個別のデータ フロー コンポーネントでは設定できません。個別のデータ フロー コンポーネントの ValidateExternalMetadata プロパティを false に設定すると、同様の効果を得ることができます。ただし、このプロパティの値が false の場合、コンポーネントは外部データ ソースのメタデータに変更が加えられても認識しません。ValidateExternalMetadata プロパティを true に設定すると、特にパッケージでトランザクションを使っている場合、データベース内でのロックに起因するブロッキング問題を回避するのに役立ちます。

実行時の権限の問題のトラブルシューティング

SQL Server エージェントを使用して配置済みパッケージの実行を試みたときにエラーが発生した場合は、エージェントが使用しているアカウントに必要な権限がない可能性があります。SQL Server エージェントのジョブから実行するパッケージのトラブルシューティング方法については、「SQL Server エージェントのジョブ ステップから SSIS パッケージを呼び出すとき、SSIS パッケージが実行されません。」を参照してください。SQL Server エージェントのジョブからパッケージを実行する方法の詳細については、「SQL Server エージェントを使用したパッケージの実行のスケジュール設定」および「パッケージを実行する方法」を参照してください。

Excel や Access のデータ ソースに接続するには、TEMP 環境変数および TMP 環境変数で指定されているフォルダ内の一時ファイルの読み取り、書き込み、作成、および削除を行う権限を持ったアカウントが SQL Server エージェントに必要です。

64 ビット問題のトラブルシューティング

32 ビット モードまたは 32 ビット サーバーでは正常に実行されるパッケージが、64 ビット サーバーでエラーになる場合は、次の一般的な問題を検討してください。詳細については、「64 ビット コンピュータ上の Integration Services に関する注意点」を参照してください。

  • 一部のデータ プロパイダは 64 ビット プラットフォームに対応していない。特に、Microsoft Jet OLE DB Provider は Excel や Access のデータ ソースへの接続に必要ですが、64 ビット バージョンはありません。

  • DTS パッケージは 64 ビット モードでは実行できない。パッケージで DTS 2000 パッケージ実行タスクを使用して SQL Server 2000 データ変換サービス (DTS) パッケージを実行している場合、このパッケージは 32 ビット モードで実行する必要があります。DTS パッケージの 64 ビット ランタイム サポートはありません。

説明のないエラーのトラブルシューティング

説明のない Integration Services エラーが発生した場合は、「Integration Services のエラーおよびメッセージのリファレンス」でエラー番号を検索することで、エラーの説明を参照できます。現時点では、この一覧にトラブルシューティング情報は含まれていません。

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

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

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