設定為使用加密和網路封包大小的 SQL Server 上的 SSIS 套件發生錯誤
本文可協助您解決當您將 SQL Server 設定為使用加密連線和網路封包大小選項時所發生的問題。
原始產品版本:SQL Server
原始 KB 編號: 2006769
徵兆
針對 SQL Server 環境,請考慮下列案例:
您可以將 SQL Server 設定為使用 [啟用連線至 資料庫引擎 的加密連線]。
您可以將 SQL Server 設定為使用 大於預設值 (4K) 的網路封包大小選項 。
在此案例中,您會注意到下列事項:
嘗試將 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,變更才會生效。 變更此設定之後,所有新的連接都會接收新的值。
其他相關資訊
重現的步驟
sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
請確定已安裝資料收集器。
將 [網络封包大小] 設定為大於 16K 的值。
以滑鼠右鍵按兩下 物件總管 中的 [資料收集] 和 [停用數據收集]。
以滑鼠右鍵按下 OE 中的 [資料收集 ],然後選取 [ 啟用數據收集]。
以滑鼠右鍵按下 收集組中的伺服器活動 ,然後選取 [ 啟動數據收集組]。
若要取得錯誤,請以滑鼠右鍵按兩下 [ 伺服器活動 ],然後選取 [ 立即收集並上傳]。 (DC 記錄會詳細顯示錯誤)。