2015年6月14日 星期日

SQL Server連線通訊問題處理(Communication link failure)

近日客戶反應發現原本的備份排程無法使用,查看計畫紀錄後,發現下列的錯誤訊息:

錯誤訊息:
日期 2015/6/14 上午 08:04:52
記錄檔 作業記錄 (EverydaysBackup.子計畫_1)

步驟識別碼 1
伺服器 ASUS
作業名稱 EverydaysBackup.子計畫_1
步驟名稱 子計畫_1
持續時間 00:00:00
SQL 嚴重性 0
SQL 訊息識別碼 0
已傳送電子郵件通知操作員
已使用網路傳送通知操作員
已呼叫通知操作員
嘗試的重試次數 0

訊息
以下列使用者的身分執行: ASUS\SYSTEM。Microsoft (R) SQL Server 執行封裝公用程式  Version 10.50.1600.1 for 64-bit  Copyright (C) Microsoft Corporation 2010. All rights reserved.    已啟動:  上午 08:04:52  因為發生錯誤 0xC0014062,所以無法載入封裝 "Maintenance Plans\EverydaysBackup"。  描述: LoadFromSQLServer 方法發現 OLE DB 錯誤碼 0x80004005 (Communication link failure)。發出的 SQL 陳述式失敗。  來源:   已啟動:  上午 08:04:52  已完成: 上午 08:04:52  經過時間:  0.031 秒.  無法載入封裝。.  步驟失敗。

嘗試進行手動執行時,發現仍然有相同的錯誤訊息。


由於此備份是透過維護精靈產生,所以當下再嘗試進行修改,但是卻發生了下列的錯誤。

錯誤訊訊:
Microsoft SQL Server Management Studio 無法載入此文件:
LoadFromSQLServer 方法發現OLE DB 錯誤碼 0x80004005 (Communication link failure)。發出的 SQL 陳述式失敗。

值不能為 null
參數名稱: component (System.Design)


解決方法:
後續上,發現主要是由於此伺服器上,將Network Packet Size的設定為32767(Byte),所以造成此問題,只需將設定更改為原先的4096(Byte)後,即可解決。發生此問題的原因,如下列的文章說明,主要是由於SQL Server的通訊協定TLS(Transport Layer Security(TLS)最大的data fragments只能到16K(16388),所以才會造成此問題,當然如同此篇文章所說明,你可以將此值最大設定成如下,也是可以解決此問題。

另外關於此Network Packet Size設定值的調整,也強烈建議盡量不要更改設定值,詳細我會在另一篇的文章進行說明。


設定語法:
EXEC sp_configure 'network packet size', 16383
RECONFIGURE WITH OVERRIDE
GO


參考連結:
"Communication link failure" error message is reported for SSIS packages on SQL servers configured to use encryption and a large network packet size
https://support.microsoft.com/en-us/kb/2006769


關鍵字:Communication link failurenetwork packet size0x80004005

沒有留言:

張貼留言