I keep getting the following error message when I try to reun a query against IBM DB2 9.1 version.
CLI0108E Communication link failure. SQLSTATE=40003
The query is updateinglarge set of recordss(over 50000 records).
-
I did try changing the Timeout to ‘0’ for the query execution
But that did not help.
Also, my db2cli.ini file does not have any timeout details. Should I add anything there??
Please advise.
CLI0108E simply means the connection was broken. From the official IBM documentation of this error code:
The SQLState (40003) indicates that the DB server can’t tell whether or not the statement completed successfully. (Documentation of SQLState messages and their meaning can be found here: http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=%2Fcom.ibm.db2.udb.msg.doc%2Fdoc%2Fr0sttmsg.htm
values in this range:
CLI0108E could have any number of causes: Issues in the network, the client or server closing the connection due to a timeout, someone kicking a cable in the computer room, you name it. I’ve even seen is in our environment where a virtual server running on a particular VM host got this error because there was a problem with the virtual NIC card, and it was fixed by reinstalling the driver. The list of possible causes is surprisingly large, but a good Network Admin should be able to help. (Monitoring packets with a sniffer is a good way to track down the source when all else fails.)
If you can, it might not hurt to refactor the code to upload smaller sets. Say you have a 10,000 records, try uploading a thousand at once, ten times to see if that helps.
Another approach I used (once) in a situation where the server was completely unreliable was to just try inserting one record at a time.
pseudo-code: (Assuming a connection object named “connection” and a command object named “cmd” that uses that connection…)
But that approach has performance issues, is messy, and still could fail of the attempt to reopen the connection fails. Even though I’ve used it in a pinch, I don’t recommend it long-term. (I got rid of that approach once the original issue was fixed.) You’re far better off trying to track down the root cause of the broken connections.
In your case, it is possible that the underlying cause may just be that you’re trying to upload too much data at once. I doubt it, but it’s possible. Refactoring the code to send the data in smaller chunks would definitely by my first choice were I in your shoes.