我們一數據庫服務器上有個作業最近幾天偶爾會遇到下面錯誤(敏感信息已做處理),主要是報“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個,應該可以印證就是虛擬機之間的網絡掉包導致了這個作業的錯誤出現。關於如何診斷網絡問題,可以參考一下官方文檔如何解決網絡連接問題. 問題是基本定位了,但是如何解決是個讓系統管理員都頭痛的問題。
參考資料: