共用方式為


設定為使用加密和網路封包大小的 SQL Server 上的 SSIS 套件發生錯誤

本文可協助您解決當您將 SQL Server 設定為使用加密連線和網路封包大小選項時所發生的問題。

原始產品版本:SQL Server
原始 KB 編號: 2006769

徵兆

針對 SQL Server 環境,請考慮下列案例:

在此案例中,您會注意到下列事項:

  • 嘗試將 SSIS 套件儲存至 MSDB 套件存放區將會失敗,並出現下列錯誤訊息:

    SaveToSQLServer 方法發生 OLE DB 錯誤碼0x80004005 (通訊鏈接失敗)。發出的 SQL 語句失敗。

    注意

    當您將 SQL Server Management Studio 中建立的維護計劃儲存為 MSDB 資料庫的 SSIS 封裝時,您也會遇到上述錯誤訊息,因為該作業原本會使用加密來連線到 SQL Server。

  • SQL Server 中使用 SSIS 的數據收集器功能,會執行各種問題,如下所示:

    • 資料收集組作業會報告作業歷程記錄中的下列錯誤:

    dcexec:錯誤:主要的內部錯誤(原因:系統找不到指定的檔案)。
    dcexec:錯誤:主要的內部錯誤(原因:句柄無效)。

    • 直接從資料執行資料收集組時,您可能會遇到下列錯誤訊息:

    套件 「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、String)方法方法方法時,都會發生此問題。

原因

安全套接字層 (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

您也可以透過 物件總管 中的 [伺服器屬性] 頁面來變更網路封包大小。 選取 [進階] 選項,然後輸入 [網络封包大小] 的新值,然後按兩下 [確定]。

注意

您不需要重新啟動 SQL Server,變更才會生效。 變更此設定之後,所有新的連接都會接收新的值。

其他相關資訊

TLS 與 SSL

重現的步驟

sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
  1. 請確定已安裝資料收集器。

  2. [網络封包大小] 設定為大於 16K 的值。

  3. 以滑鼠右鍵按兩下 物件總管 中的 [資料收集] 和 [停用數據收集]。

  4. 以滑鼠右鍵按下 OE 中的 [資料收集 ],然後選取 [ 啟用數據收集]。

  5. 以滑鼠右鍵按下 收集組中的伺服器活動 ,然後選取 [ 啟動數據收集組]。

  6. 若要取得錯誤,請以滑鼠右鍵按兩下 [ 伺服器活動 ],然後選取 [ 立即收集並上傳]。 (DC 記錄會詳細顯示錯誤)。