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を使用して、データ プロバイダーによって発行されたさまざまなコマンドを確認します。
SQL Server Profilerの使用方法の詳細については、「SQL Server Profiler テンプレートとアクセス許可」を参照してください。
SSIS パッケージのトラブルシューティング方法の詳細については、「 パッケージ開発のトラブルシューティング」を参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示