解决db2 SQL30081N



Problem(Abstract)

11041 - A database error occurred while attempting to open table
EDIENU32.EDIVTSIS, ODBC return code is: -1.
Description: SQL30081N A communication error has been detected.
Communication protocol being used: "TCP/IP".
Communication API being used: "SOCKETS". Location where the error was
detected: "". Communication function detecting the error: "recv".
Protocol specific e
. Internal Codes: State:40003,Native:-30001,Origin:[IBM][CLI
Driver][DB2]

Communication function detecting the error: "recv".  Protocol specific error code(s): "104", "*", "0".

Cause

Client generated an interrupt

Resolving the problem

The SQL30081N message was resolved by deselecting one of the DB2 connect default settings. When using Configuration Assistant on DB2 to configure the Database Connection to your host database:


For DB2 Connect 7.2 users:
Uncheck the 'Disconnect if client generates an interrupt (INTERRUPT
ENABLED)' box within the Host or AS/400 options tab.

For DB2 Connect 8.1 or later users:
Uncheck the 'Disconnect if client generates an interrupt (INTERRUPT
ENABLED)' box within the DCS Options tab. To modify this option you may need to check the box for Configure DCS options.

For DB2 Connect 9.1 users:

Add the following parameter to db2cli.ini under the [common] section:

QueryTimeoutInterval=0

This will disable DB2 from checking if a Query has timed out.



SQL30081N
检测到通信错误。正在使用的通信协议: 协议。正在使用的通信 API: 接口。检测到错误的位置: 位置。检测到错误的通信功能: 功能。特定于协议的错误代码: rc1、 rc2 和 rc3。

说明

通信子系统检测到错误。

以下是对标记值的描述:

协议, 位置

使用的通信协议以及用来唯一标识检测到错误的节点的信息。如果出错时得不到位置信息,那么表示未填充 位置 标记。有效标记值是:

  • 协议为 TCP/IP;位置是 IPv4 或 IPv6 地址。
  • 协议是 APPC;位置是标准 LU 名称(networkID.LUname)。
  • 协议是 MQ;位置是 MQ 队列名称。
  • 协议是 SOAP、SSL、SOCKS 和 HTTP;位置是采用点分表示法的因特网地址。
接口

用来调用上述协议服务的应用程序编程接口。有效标记值是:SOCKETS、SOCKS、CPI-C、MQI-CLIENT、GSKit 和 HTTP。

功能

返回了错误代码的通信子系统功能的名称。

如果 协议 是 TCP/IP:

  • 原因码 rc1、rc2 和rc3 表示:
    • 如果存在 rc1,那么它将包含 TCP/IP 功能所返回的 errno。在 Windows 操作系统上,这是 WSA errno。
    • 如果存在 rc2,它将包含由 TCP/IP 名称解析功能返回的 h_errno 值。在 Windows 操作系统上,这是 WSA 错误号。
    • 如果存在 rc3 并且包含“0”,那么表示远程端已终止连接。如果在客户机上接收到该错误,那么远程端可能是一个服务器或网关。如果在网关上接收到该错误,那么远程端可以是客户机或服务器。
  • 如果 协议 = TCP/IP,且 rc1=*、rc2=* 和 rc3=0,那么原因可能是:
    • 服务器上的数据库代理程序被系统管理员强制关闭。
    • 由于已达到系统上的内存限制,因此数据库代理程序未能在服务器上启动。
    • 连接可能已被 TCP/IP 级别的远程服务器关闭。
    • 由于关键数据库管理器进程异常终止,因此服务器上的数据库代理程序终止。
  • 在 Windows 操作系统上,如果 协议 = TCP/IP、功能 = WSAStartup 且rc1 = 0,那么rc2 包含 DB2 请求的“Windows 套接字规范”版本级别,而rc3 包含“Windows 套接字”DLL 支持的“Windows 套接字规范”版本级别。原因:版本级别不匹配。
  • 如果 协议 = TCP/IP、功能 = connect 且rc1 = ECONNREFUSED/WSAECONNREFUSED、AIX (79)、Windows (10061)、linux (111)、SUN (146) 和 HP (239),那么尝试连接时会被拒绝。原因可能是:
    • 未在客户机上正确对远程数据库服务器进行编目。在客户机/网关/服务器方案中,应确保在网关上正确编目了主机项。
    • 尚未使用正确的通信参数来正确配置服务器上的数据库管理器配置文件。检查是否已使用 TCP/IP 服务名称或端口号正确地配置 SVCENAME 数据库管理器配置参数以及端口号是否唯一。如果已在服务器上更新了数据库管理器配置参数,那么必须停止并重新启动数据库管理器,以使更改生效。在服务器和客户机上指定的 TCP/IP 服务名称或端口号可能不匹配。通过检查 services 文件来确保服务名称映射至正确的端口号。要进行此检查,您可以阅读 services 文件,也可以检查运行“netstat -a”命令时的输出。
    • 远程数据库服务器中的防火墙已阻止建立连接。验证是否已正确地将防火墙配置为接受来自客户机的连接请求。
    • 服务器上的 DB2COMM 环境变量未指定客户机使用的通信协议。检查是否已经指定了 TCPIP。发出 db2set 命令来了解已经设置的内容。运行命令“db2set DB2COMM = TCPIP”以设置值。
    • 服务器上的数据库管理器未启动、未成功启动或者已停止。服务器应返回 SQL1063N 而不是 SQL5043N。如果您在发出“db2start”之前使用“db2 update dbm cfg using diaglevel 4”命令将数据库管理器配置参数 DIAGLEVEL 设置为 4,那么管理通知日志将提供有关已成功启动哪些协议的详细信息。检查管理通知日志。
    • 此时,服务器可能太繁忙而无法处理入局连接引入的大量信息。
    • 网络故障,请与网络管理员联系。可以使用协议测试程序 pctt 进行测试,从而验证这不是 DB2 造成的问题。
  • 如果 协议 = TCP/IP、功能 = connect 且rc1 = ETIMEDOUT/WSAETIMEDOUT、AIX (78)、Windows (10060)、linux (110)、SUN (145) 和 HP (238),那么尝试连接时在真正建立连接之前就发生超时。原因可能是:
    • 在客户机和/或网关上的节点目录的“主机名”字段中,编目了不正确的主机名或 IP 地址。
    • 网络速度过慢,或者服务器由于太繁忙而导致无法在合理时间内对连接请求作出响应;您可能需要调整系统 TCP 连接超时值和/或 DB2TCP_CLIENT_CONTIMEOUT 值。
  • 如果 协议 = TCP/IP、功能 = recv 且rc1 = ECONNRESET/WSAECONNRESET、AIX (73)、Windows (10054)、linux (104)、SUN (131) 和 HP (232),那么远程端会通过执行“硬”关闭或“异常终止”关闭来将连接复位。原因可能是:
    • 连接可能已被 TCP/IP 级别的远程网关或服务器关闭(例如,防火墙问题、电源故障和网络故障导致连接被关闭)。
    • 启用了客户端连接池,但是未处理连接故障。如果在连接至数据库时产生故障并且启用了连接池,那么编写应用程序,然后再次尝试进行连接。
    • 可能是主机上的线程超时导致的。检查主机上的系统日志中是否存在 IDTHTOIN 消息。如果可能,应调整设置。如果无法调整此设置,那么请在网关上禁用连接池,或者确保正确地关闭所有对象(例如,在应用程序操作完成后关闭 WITH HOLD 游标)。
    • 服务器上的数据库代理程序被数据库管理员强制关闭。
    • 由于关键数据库管理器进程异常终止,因此服务器上的数据库代理程序终止。
  • 如果 协议 = TCP/IP、功能 = recv 且rc1 = ETIMEDOUT/WSAETIMEDOUT、AIX (78)、Windows (10060)、linux (110)、SUN (145) 和 HP (238),那么是因为远程系统未能作出响应而导致连接被断开。原因可能是:
    • 因为应用程序设置了“查询超时”值或者存在明确的取消请求,所以从 CLI 应用程序中调用了 SQLCancel()。调整由应用程序设置的“查询超时”值。如果无法调整该值,那么调整 db2cli.ini 文件中的 QueryTimeoutInterval 设置。在 db2cli.ini 文件中使用 QueryTimeoutInterval=0(无超时)来测试 QueryTimeout 是否是造成应用程序故障的原因。预计在此方案中现有连接将会发生故障。
    • 网络速度太慢,或者服务器可能太繁忙而无法在合理时间量以内对 recv 请求作出响应;您可能需要调整系统 TCP recv 超时值。
  • 如果 协议 = TCP/IP、功能 = selectForConnectTimeout 且rc1 = EINPROGRESS/0、AIX (55)、Windows (0)、linux (115)、SUN (150) 和 HP (245),那么连接请求由于超时而无法成功完成。原因可能是:
    • 系统连接超时,或者 DB2TCP_CLIENT_CONTIMEOUT 设置的超时值导致发生超时。调整这些值之后再试。
  • 如果 协议 = TCP/IP、功能 = selectForRecvTimeout 且rc1 不相关,那么 recv 请求由于超时而无法成功完成。原因可能是:
    • 系统 recv 超时,或者 DB2TCP_CLIENT_RCVTIMEOUT 设置的超时值导致发生超时。调整这些值之后再试。

上述 TCP/IP 错误和原因的列表并不详尽,通过在 DB2 信息中心中搜索“-30081 错误”之类的短语,您可以获得有关特定 TCP/IP 通信错误代码的更多信息。

如果 协议 是 APPC

  • rc1 包含来自 CPI-C 函数的返回码。
  • 如果存在 rc2,那么它将包含来自 CPI-C 函数调用的全局 errno 值。
  • rc3 不适用。

如果 协议 是 MQ

  • rc1 包含函数完成代码,1 表示警告,2 表示错误。
  • 1rc2 包含特定于 MQ 的错误代码。
  • rc3 不用于 MQ。

如果 协议 是 SOAP,那么 rc1 包含来自 SOAP 通信函数的返回码。

如果 协议 是 SSL,那么 rc1 包含来自安全套接字层(GSKit)的返回码。

如果 协议 是 SOCKS

  • rc1 包含来自 SOCKS 代理服务器的返回码。
  • rc2 包含版本(4 或 5)的协议。
  • rc3 包含所使用的认证方法(SOCKS V5)。

如果 协议 是 HTTP,那么 rc1 包含来自远程 HTTP Server 的 HTTP 返回码。

用户响应

更正由返回的上述原因码和标记值共同指示的问题。

http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.messages.sql.doc/doc/msql30081n.html?lang=en




你可能感兴趣的:(DB2)