我們一資料庫伺服器上有個作業最近幾天偶爾會遇到下麵錯誤(敏感信息已做處理),主要是報“TCP Provider: The semaphore timeout period has expired. [SQLSTATE 07008] (Error 121) OLE DB provider "SQLNC... ...
我們一資料庫伺服器上有個作業最近幾天偶爾會遇到下麵錯誤(敏感信息已做處理),主要是報“TCP Provider: The semaphore timeout period has expired. [SQLSTATE 07008] (Error 121) OLE DB provider "SQLNCLI" for linked server "(null)" returned message "Communication link failure". [SQLSTATE 01000] (Error 7412). The step failed.”。 作業執行的存儲過程使用了Linked Server。伺服器為虛擬機Vmware下的Windows Server 2003。
1 Date 2016/6/2 9:15:20 2 Log Job History (Job_Name) 3 4 Step ID 1 5 Server SERVERNAME 6 Job Name Job_Name 7 Step Name Job_Name 8 Duration 00:00:22 9 Sql Severity 16 10 Sql Message ID 7412 11 Operator Emailed 12 Operator Net sent 13 Operator Paged 14 Retries Attempted 0 15 16 Message 17 Executed as user: NT AUTHORITY\SYSTEM. TCP Provider: The semaphore timeout period has expired. [SQLSTATE 07008] (Error 121) OLE DB provider "SQLNCLI" for linked server "(null)" returned message "Communication link failure". [SQLSTATE 01000] (Error 7412). The step failed.
關於這個錯誤,在網上查了一些資料。例如這篇文章TCP Provider: The semaphore timeout period has expired裡面介紹了好多可能導致這個錯誤出現的原因,例如TCP Chimney沒有禁用,系統記憶體壓力等,一一排除過後,覺得很有可能是網路問題,在這台伺服器上,持續ping那台鏈接過去的伺服器,
M:\DB_BACKUP>ping -t 192.168.xxx.xxx> ping.txt
持續ping 了二十多個小時候,期間作業出現了一次上述問題,期間掉包14個,應該可以印證就是虛擬機之間的網路掉包導致了這個作業的錯誤出現。關於如何診斷網路問題,可以參考一下官方文檔如何解決網路連接問題. 問題是基本定位了,但是如何解決是個讓系統管理員都頭痛的問題。
參考資料:
https://support.microsoft.com/zh-cn/kb/325487