次の方法で共有


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

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

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

現象

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

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

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

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

    注:

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

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

    • データ 収集セット ジョブは、ジョブ履歴に次のエラーを報告します。

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

    • Data Collection Set を Data から直接実行すると、次のエラー メッセージが表示される場合があります。

    パッケージ "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) メソッド を使用する操作で発生する可能性があります。

原因

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

解決方法

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

注:

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

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

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

注:

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

詳細

TLS と SSL

再現する手順

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

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

  3. オブジェクト エクスプローラー (OE) で [データ収集] を右クリックし、[データ収集を無効にする] をクリックします

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

  5. コレクション セットで [サーバー アクティビティ ] を右クリックし、[ データ コレクション セットの開始] を選択します。

  6. エラーを取得するには、[ サーバー アクティビティ ] を右クリックし、[ Collect and Upload Now]\(今すぐ収集してアップロード\) を選択します。 (DC ログにはエラーが詳細に表示されます)。