Microsoft SQL Serverでパッケージに対して DTC トランザクションを有効にすると、SSIS パッケージの実行が応答しなくなります。

この記事は、パッケージの DTC トランザクションを有効にし、データ フロー タスクでコンポーネントのプロパティを有効ValidateExternalMetadataにした場合に、Microsoft SQL Server Integration Services (SSIS) パッケージの実行が応答を停止する問題を解決するのに役立ちます。

元の製品バージョン: SQL Server
元の KB 番号: 2253391

現象

次のような状況で問題が発生します。

  • SQL Serverで SSIS パッケージを作成します。
  • SSIS パッケージには、データ フロー タスクとその他のタスクが含まれています。
  • TransactionOption DTC トランザクションを使用するには、SSIS パッケージのプロパティを [必須] に設定します。
  • 他のタスクは、データ フロー タスクの実行前に DTC トランザクションで実行されます。
  • データ フロー タスクにコンポーネントを追加します。
  • データ フロー コンポーネントのプロパティが ValidateExternalMetadata True に設定されています。
  • データ フロー タスクには、データ アクセス モードが [テーブルまたはビュー] に設定されている OLE DB 変換先コンポーネント、またはテーブル名またはビュー名変数が含まれています。

このシナリオでパッケージを実行すると、実行は応答を停止します。 さらに、Visual Studio で SSIS パッケージをデバッグすると、[ 進行状況 ] ビューで次のようなメッセージが表示されます。

SSIS パッケージ "Package.dtsx" の開始。

情報: Data Flow タスク(DTS) で0x4004300Aします。パイプライン: 検証フェーズが開始されています。 情報: 0x4001100Aパッケージ: このコンテナーの分散トランザクションの開始。 情報: Data Flow タスク(DTS) で0x4004300Aします。パイプライン: 検証フェーズが開始されています。

原因

この問題は、データ フロー内の接続が DTC トランザクションに登録されていないために発生します。 これにより、ストアド プロシージャの実行が sp_cursoropen ブロックされます。 これは、検証プロセス中に接続を DTC トランザクションに登録できないため、設計機能です。 「 現象 」セクションで説明されているシナリオでは、データ フロー タスクの接続が DTC トランザクションに登録されていないため、パッケージを実行すると、データ フロー コンポーネントの検証プロセスがブロックされます。

解決方法

この問題を解決するには、次のいずれかの方法を使用します。

  • データ フロー タスクのすべてのコンポーネントを False に設定ValidateExternalMetadataします

  • OLE DB Destination コンポーネントのデータ アクセス モードを次のいずれかのモードに設定します。

    • テーブルまたはビュー - 高速読み込み
    • テーブル名またはビュー名変数 - 高速読み込み
    • SQL コマンド

詳細

Table または View データ アクセス モードはブロックされますが、データ アクセス モードごとにデータ プロバイダーによって発行されるコマンドが異なるため、他のデータ アクセス モードはブロックされません。 この問題の詳細を取得するには、SQL Server Profilerを使用して、データ プロバイダーによって発行されたさまざまなコマンドを確認します。