當我嘗試重新運行鍼對IBM DB2 9.1版本的查詢時,我總是收到以下錯誤消息。DB2 - CLI0108E通信鏈路故障。 SQLSTATE = 40003
CLI0108E通信鏈路故障。 SQLSTATE = 40003
查詢是updateinglarge集recordss(超過50000記錄)。
我也嘗試改變超時爲「0」查詢執行
但是這並沒有幫助。
此外,我的db2cli.ini文件沒有任何超時詳細信息。我應該添加什麼嗎?
請指教。
當我嘗試重新運行鍼對IBM DB2 9.1版本的查詢時,我總是收到以下錯誤消息。DB2 - CLI0108E通信鏈路故障。 SQLSTATE = 40003
CLI0108E通信鏈路故障。 SQLSTATE = 40003
查詢是updateinglarge集recordss(超過50000記錄)。
我也嘗試改變超時爲「0」查詢執行
但是這並沒有幫助。
此外,我的db2cli.ini文件沒有任何超時詳細信息。我應該添加什麼嗎?
請指教。
CLI0108E僅僅意味着連接被打破。從:
CLI0108E通信鏈路故障。
說明執行此功能時,驅動程序和數據源之間的連接失敗。
用戶響應建立新的連接。
的的SQLState(40003)表明DB服務器無法判斷語句是否沒有成功完成。 (SQLState消息及其含義的文檔可以在這裏找到:http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=%2Fcom.ibm.db2.udb.msg.doc%2Fdoc%2Fr0sttmsg.htm
值在此範圍:發生
- 40001死鎖或超時自動回滾
- 40003的語句完成是未知的。
- 40504系統錯誤導致工作單元回滾
- 40506當前事務由於SQL錯誤而回退
- 40507當前事務被回滾作爲故障創建索引的結果。
CLI0108E可以有任意數量的原因:關閉連接問題在網絡中,客戶端或服務器由於超時,有人在機房踢電纜,你的名字。我甚至看到的是在我們的環境中,因爲有與虛擬NIC卡有問題,它是由重新安裝驅動程序固定在特定的VM主機上運行的虛擬服務器得到這個錯誤。可能的原因列表是出奇的大,但一個好的網絡管理應能提供幫助。(使用嗅探器監控數據包是在所有其他情況都失敗時跟蹤源的好方法。)
如果可以,重構代碼以上傳較小的集合可能並不會造成影響。假設您有10,000條記錄,請嘗試一次上傳一千條記錄,十次查看是否有幫助。
另一種在服務器完全不可靠的情況下使用(一次)的方法是隻嘗試一次插入一條記錄。
僞代碼:(假設一個連接對象命名爲「連接」,並使用該連接名爲「CMD」命令對象......)
connection.Open()
for each record
try
cmd.CommandText ="whatever changes need to be made"
cmd.Execute()
catch(Exception ex)
if(the exception is a communication link failure)
connection.Open()
cmd.Execute()
else
handle different errors accordingly
end if
end try
next
但這種方法有性能問題,是凌亂的,仍然可能會失敗的嘗試重新打開連接失敗。儘管我已經在使用它,但我不建議它是長期的。 (一旦原始問題得到解決,我就擺脫了這種方法。)你試圖追蹤斷開連接的根本原因要好得多。
在你的情況下,它是可能的原因可能是你試圖一次上傳太多的數據。我懷疑它,但它是可能。重構代碼以更小的塊發送數據肯定會是我的第一選擇,我是你的鞋子。
Sory,我的原始答案不完整。我做了更多的挖掘,我只是更新了我的答案,我希望對你更有用。 – David