暗号化とネットワーク パケット サイズを使用するように構成された SQL サーバー上の SSIS パッケージのエラー
この記事は、暗号化された接続とネットワーク パケット サイズ オプションを使用するように SQL Server を構成するときに発生する問題を解決するのに役立ちます。
元の製品バージョン: SQL Server
元の KB 番号: 2006769
現象
SQL Server 環境では、次のシナリオを検討してください。
接続データベース エンジンへの暗号化された接続を有効にするように SQL Server を構成します。
既定値 (4K) より大きい network パケット サイズ オプション を使用するように SQL サーバーを構成します。
このシナリオでは、次のことがわかります。
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 を再起動する必要はありません。 この設定を変更すると、すべての新しい接続が新しい値を受け取ります。
詳細
再現手順
sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
データ コレクターがインストールされていることを確認します。
ネットワーク パケット サイズを 16K より大きい値に設定します。
オブジェクト エクスプローラー (OE) および Disable Data Collection で Data Collection を右クリックします。
OE で Data Collection を右クリックし、 [有効なデータ収集]を選択します。
コレクション セットで Server Activity を右クリックし、[データ コレクション セットの開始 選択。
エラーを取得するには、 Server Activity を右クリックし、 Collect と Upload Now を選択。 (DC ログにはエラーが詳細に表示されます)。