Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Error handling DB2-CLI0108E通信链路故障。SQLSTATE=40003_Error Handling_Db2_Connection Timeout - Fatal编程技术网

Error handling DB2-CLI0108E通信链路故障。SQLSTATE=40003

Error handling DB2-CLI0108E通信链路故障。SQLSTATE=40003,error-handling,db2,connection-timeout,Error Handling,Db2,Connection Timeout,当我试图针对IBMDB29.1版本重新进行查询时,我不断收到以下错误消息 CLI0108E通信链路故障。SQLSTATE=40003 查询正在更新大量记录(超过50000条记录) 我确实尝试将查询执行的超时更改为“0” 但这没有帮助 另外,我的db2cli.ini文件没有任何超时详细信息。我应该在那里添加什么吗 请告知。CLI0108E仅表示连接已断开。从: CLI0108E通信链路故障 解释执行此函数期间,驱动程序与数据源之间的连接失败 用户响应建立新连接 SQLState(40003

当我试图针对IBMDB29.1版本重新进行查询时,我不断收到以下错误消息

CLI0108E通信链路故障。SQLSTATE=40003

查询正在更新大量记录(超过50000条记录)

  • 我确实尝试将查询执行的超时更改为“0”

    但这没有帮助

另外,我的db2cli.ini文件没有任何超时详细信息。我应该在那里添加什么吗


请告知。

CLI0108E仅表示连接已断开。从:

CLI0108E通信链路故障

解释执行此函数期间,驱动程序与数据源之间的连接失败

用户响应建立新连接


SQLState(40003)表示数据库服务器无法判断语句是否成功完成。(SQLState消息及其含义的文档可在此处找到:

此范围内的值:

  • 发生40001死锁或自动回滚超时
  • 40003语句完成情况未知
  • 40504系统错误导致工作单元回滚
  • 40506由于SQL错误,当前事务已回滚
  • 40507由于创建索引失败,当前事务被回滚

CLI0108E可能有多种原因:网络问题、客户端或服务器由于超时而关闭连接、有人在机房踢电缆等等。我甚至看到在我们的环境中,在特定VM主机上运行的虚拟服务器出现此错误,因为虚拟NIC ca有问题这是通过重新安装驱动程序修复的。可能的原因列表惊人地多,但是一个好的网络管理员应该能够提供帮助。(当所有其他操作都失败时,使用嗅探器监视数据包是跟踪源的一个好方法。)

如果可以的话,重构代码以上传较小的记录集可能不会有什么坏处。假设你有10000条记录,试着一次上传1000条,十次,看看这是否有帮助

在服务器完全不可靠的情况下,我(曾经)使用的另一种方法是一次只插入一条记录

伪代码:(假设一个名为“connection”的连接对象和一个使用该连接的名为“cmd”的命令对象…)

但是,这种方法存在性能问题,非常混乱,并且在尝试重新打开连接失败时仍然可能失败。即使我在紧要关头使用过这种方法,我也不建议长期使用这种方法。(在最初的问题得到解决后,我就放弃了这种方法。)您最好尝试找出断开连接的根本原因


在你的情况下,潜在的原因可能只是你试图一次上传太多的数据。我对此表示怀疑,但这是有可能的。如果我站在你的立场上,重构代码以发送更小的数据块肯定是我的第一选择。

感谢David为我指明了正确的方向假设是内存泄漏。我有如下代码

IDbConnection conn = db2Access.GetConnection()
IDbCommand cmd = conn.CreateCommand()
我改成

using(IDbConnection conn = db2Access.GetConnection())
{
  using(IDbCommand cmd = conn.CreateCommand())
  {
   ......

  }
}

很抱歉,我的原始答案不完整。我做了更多的挖掘,我只是更新了我的答案,希望对你更有用。非常感谢你的输入。我尝试减少上传的记录块,并从另一台用户计算机上测试了这一点。我没有尝试重新打开连接。但是,如果康涅狄格州出现问题,我会在上,我应该会收到一条错误消息,说与服务器的连接丢失了,或者在这些行上发生了什么事情!?我已经更改了commandtimeout=0,您是否建议也更改连接timeout=0?最后将所有DB2内容写入sql表并关闭DB2连接。这有助于解决连接超时问题。在我的案例分解DB2查询导致超时。因此,一次执行查询,然后写入sql表。@DavidStratton-您是否可以将答案复制到DBA SE?在那里提出了一个非常类似的问题。
using(IDbConnection conn = db2Access.GetConnection())
{
  using(IDbCommand cmd = conn.CreateCommand())
  {
   ......

  }
}