次の方法で共有


暗号化とネットワーク パケット サイズを使用するように構成された SQL サーバー上の SSIS パッケージのエラー

この記事は、暗号化された接続とネットワーク パケット サイズ オプションを使用するように SQL Server を構成するときに発生する問題を解決するのに役立ちます。

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

現象

SQL Server 環境では、次のシナリオを検討してください。

このシナリオでは、次のことがわかります。

  • SSIS パッケージを MSDB パッケージ ストアに保存しようとすると、次のエラー メッセージで失敗します。

    SaveToSQLServer メソッドで OLE DB エラー コード 0x80004005が発生しました (通信リンクエラー)。発行された SQL ステートメントが失敗しました。

    Note

    また、SQL Server Management Studio で作成されたメンテナンス プランを SSIS パッケージとして MSDB データベースに保存する際にも、上記のエラー メッセージが表示されます。この操作では、本質的に SQL Server への接続に暗号化が使用されるためです。

  • SSIS を使用する SQL Server のデータ コレクター機能では、次に示すようにさまざまな問題が発生します。

    • データ・コレクション・セット・ジョブは、ジョブ履歴に以下のエラーを報告します。

    dcexec: Error: Main の内部エラー (理由: 指定されたファイルがシステムで見つかりません)。
    dcexec: Error: Main の内部エラー (理由: ハンドルが無効です)。

    • データ コレクション セットをデータから直接実行すると、次のエラー メッセージが表示されることがあります。

    パッケージ "Set_{7B191952-8ECF-4E12-AEB2-EF646EF79FEF}_Master_Package_Collection" に失敗しました。

データ コレクターのログを確認すると、次のようなエラー メッセージが表示されます。

SSIS エラー。 コンポーネント名: TaskForCollectionItem_1、コード: -1073602332、サブコンポーネント: (null)、説明: パッケージの読み込みの準備中にエラー 0xC0014062。 LoadFromSQLServer メソッドで OLE DB エラー コード 0x80004005が発生しました (通信リンクエラー)。 発行された SQL ステートメントは失敗しました。

この問題は、このセクションで説明する条件 (暗号化と大きなパケット サイズ) の両方が当てはまる場合に、 Application.LoadFromSqlServer(String、String、String、String、IDTSEvents) メソッド または Application.SaveToSqlServer(Package, IDTSEvents, String, String, String) メソッド メソッドを使用する操作で発生する可能性があります。

原因

Secure Socket Layer (SSL) とその代替のトランスポート層セキュリティ (TLS) は、データ フラグメントのサイズを 16k (16384) に制限します。 これはパブリック RFC 2246 (セクション 6.2.2) に記載されており、 Network プロトコルと TDS エンドポイントの現在の実装 レイヤーはこの仕様に準拠しています。 そのため、SQL Server で暗号化が有効になっている環境で 16k を超えるネットワーク パケット サイズを使用すると、「現象」セクションで説明されているエラーが発生します。

解決方法

この問題を解決するには、16,384 バイト以下のネットワーク パケット サイズを指定します。 次のコードを使用して、sp_configure システム ストアド プロシージャのnetwork packet size構成オプションを設定できます。

Note

MARS が有効になっている場合、SMUX プロバイダーは SSL 暗号化の前に 16 バイトのヘッダーをパケットに追加し、最大ネットワーク パケット サイズを 16368 バイトに減らします。

EXEC sp_configure 'network packet size', 16368
RECONFIGURE WITH OVERRIDE
GO

ネットワーク パケット サイズは、オブジェクト エクスプローラーの [サーバーのプロパティ] ページを使用して変更することもできます。 [Advanced オプションを選択し、ネットワーク パケット サイズの新しい値を入力し、[OK をクリックします。

Note

変更を有効にするために SQL Server を再起動する必要はありません。 この設定を変更すると、すべての新しい接続が新しい値を受け取ります。

詳細

TLS と SSL

再現手順

sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
  1. データ コレクターがインストールされていることを確認します。

  2. ネットワーク パケット サイズを 16K より大きい値に設定します。

  3. オブジェクト エクスプローラー (OE) および Disable Data CollectionData Collection を右クリックします。

  4. OE で Data Collection を右クリックし、 [有効なデータ収集]を選択します。

  5. コレクション セットで Server Activity を右クリックし、[データ コレクション セットの開始 選択

  6. エラーを取得するには、 Server Activity を右クリックし、 Collect と Upload Now を選択。 (DC ログにはエラーが詳細に表示されます)。