本节列示了使用 DB2 Connect 时所遇到的连接问题的最常见症状。 在每种情况下,都为您提供:
记录:
有时,可以通过浏览系统日志来查看 SNA 检测码。 情况是否如此,取决于所使用的 SNA 子系统, 在某些情况下,可能需要启动 SNA 跟踪来重现问题, 以便获得检测码信息。
信息 SQL0965 和 SQL0969 可以与来自 DB2 通用数据库 AS/400 版、DB2 通用数据库 OS/390 版、DB2 MVS/ESA 版、DB2 VM 版”和“DB2 VSE版” 的许多不同返回码一起发出。
当您遇到任何其中一个信息时,应该在发出该信息的数据库服务器产品的文档中查找原始 SQL 代码。
不能转换从主机数据库接收的 SQL 代码。 根据错误码来校正该问题,然后重新提交失败的命令。
未定义符号目的地名,或者定义不正确。
例如,当使用 APPC 节点时,如果在 DB2 节点目录中指定的符号目的地名与本地 APPC 通信子系统配置中的 CPI-C 项不匹配,就会发生这种情况。
另一个原因可能是在您的机器上安装了多个 SNA 堆栈。 可能需要检查 PATH 和 LIBPATH,以确保首先引用您想使用的堆栈。
SQL1403N 提供的用户名和/或口令不正确。
若允许在它上面认证,并且需要提供口令的话, 则必须确保在 CONNECT 语句中提供正确的口令。
若不允许在它上面认证,则一定是使用 AUTHENTICATION SERVER 对系统数据库目录项进行了不正确的编目(这是未显式指定 AUTHENTICATION 时的缺省情况。)若是这种情况, 则使用 AUTHENTICATION DCS 或 CLIENT 对该项重新进行编目。
未能成功启动对一个或多个通信协议的支持。 然而,成功地启动了核心数据库管理程序功能。
也许在 DB2 Connect 网关中未启动 TCP/IP 协议。 先前可能已经有成功的客户机连接。
若 diaglevel = 4,则 db2diag.log 可能包含类似的项, 例如:
1997-05-30-14.09.55.321092 Instance:svtdbm5 Node:000 PID:10296(db2tcpcm) Appid:none common_communication sqlcctcpconnmgr_child Probe:46 DIA3205E Socket address "30090" configured in the TCP/IP services file and required by the TCP/IP server support is being used by another process.
此警告是一种症状,它表示作为远程客户机的网关的 DB2 Connect 在处理一个或多个客户机通信协议时遇到了问题。 这些协议可以是 TCP/IP、APPC 和其他协议,信息通常会指示为 DB2 Connect 定义的通信协议中的某个未正确配置。
原因通常是未定义 DB2COMM 简要表变量,或者是定义不正确。 该问题通常是 DB2COMM 变量与数据库管理程序配置中定义的名称 (例如,svcename、nname 或 tpname)之间不匹配的结果。
一种可能的情况是先前有成功的连接, 然后得到 SQL5043 错误信息,但未更改任何配置。 使用 TCP/IP 协议时,当远程系统因为某些原因而异常终止了连接, 就可能发生这种情况。发生这种情况时,连接可能仍然存在于客户机中, 通过发出下面所显示的命令,就可能复原连接,而无须进一步的操作。
与网关相连的某个客户机很有可能在 TCP/IP 端口上仍然具有一个句柄。在与网关相连的每个客户机上执行:
SQL30020N 因为“分布式协议错误”而执行失败, 该错误将影响后续命令和 SQL 语句的成功执行。
遇到此错误时,应该与服务机构联系。
检查 db2dump 目录以查找 ffdc dump (pid.000)。 然后,用 db2fdump 来格式化此转储文件, 并在结果文件查找 "ERROR"。 此处可能列示了 MVS ABEND。在此情况下,检查 MVS 控制台, 以了解进一步的信息,并在“DB2 MVS 版的信息和代码”手册中查找异常结束代码。
SQL30060N "<authorization-ID>" 没有执行操作 "<operation>" 的特权。
当连接至“DB2 MVS 版”或“DB2 OS/390 版”时, 未正确地更新“通信数据库”(CDB) 表。参考:
连接至错误的主机或 AS/400 数据库服务器位置 - 找不到目标数据库。
可能在 DCS 目录项中指定了错误的服务器数据库名。 当发生此情况时,将对应用程序返回 SQLCODE -30061。
检查 DB2 节点、数据库和 DCS 目录项。 DCS 目录项中的目标数据库名字段必须与基于平台的数据库名相对应。 例如,对于 DB2 通用数据库 OS/390 版数据库,要使用的名称应该与 “引导数据集”(BSDS) "LOCATION=locname" 字段中的名称相同, 当启动了“分布式数据设施”(DDF) 时,在 DSNL004I 信息 (LOCATION=location) 中也提供了该名称。 另见数据库概念和更新数据库目录。
DB2 Connect 快速入门手册还包含了示例以说明如何更新 DB2 目录。 参见描述 SNA 配置的每一章中的“更新 DB2 目录”一节, 或者参见“为 DB2 Connect 配置主机和 AS/400 数据库”一章, 和“配置 TCP/IP 连接”一节。
APPC 或 APPN 节点的正确命令是:
db2 catalog appc node <node_name> remote <sym_dest_name> security program db2 catalog dcs database <local_name> as <real_db_name> db2 catalog database <local_name> as <alias> at node <node_name> authentication dcs
TCP/IP 节点的正确命令是:
db2 catalog tcpip node <node_name> remote <host_name_or_address> server <port_no_or_service_name> db2 catalog dcs database <local_name> as <real_db_name> db2 catalog database <local_name> as <alias> at node <node_name> authentication dcs
要连接至数据库,您应该发出:
db2 connect to <alias> user <user_name> using <password>
发出信息 SQL30073 时带有返回码 119C。 当目标服务器数据库不支持(通过 DB2 Connect 连接的)DB2 客户机所使用的代码页时, 就会发生此错误。代码页是从 DB2 客户机正在运行的操作环境的配置中派生出来的。
参见管理指南以获取进一步的信息。
通常可以通过在目标服务器数据库系统上安装修订来解决此问题。 咨询适当的服务机构,以便获得并应用为此症状而建议的任何修订。
作为临时的解决方法,用户可以通过设置 DB2CODEPAGE 环境变量来覆盖缺省代码页。 检查本国语言环境或设置 DB2CODEPAGE=850。
在 UNIX 平台上,用户可以通过将 LANG 环境变量设置为不同的值来切换至不同的代码页。
症状是下列信息加上 SNA 检测码:
db2 connect to <database name> user <userid> 为 <userid> 输入口令: SQL30081N 检测到通信错误。 所使用的通信协议:"APPC"。 所使用的通信 API:"CPI-C"。 检测到错误位置:""。 检测到错误通信函数:"cmallc"。 特定于协议的错误码:"1"、"*"、"0x10030021"。 SQLSTATE=08001
在此样本中,检测码为 10030021。
与此错误相关联的最常见的检测码,以及在每种情况下建议的解决方案, 如下所示:
SQL30081N,带有返回码 1 和 SNA 检测码 0877002C
指定了错误的网络名。
SQL30081N,带有返回码 1 和 SNA 检测码 ffff0003
指定了错误的 MAC 地址或者 SNA 链接没有激活。
SQL30081N,带有返回码 1 和 SNA 检测码 10030021
LU 类型不匹配。
SQL30081N,带有返回码 1 和 SNA 检测码 084B6031
在 DSNZPARM 中(在“DB2 MVS 版”或“DB2 OS/390 版”主机中),MAXDBAT 被设置为 0
其他建议:
接收到的信息 SQL30081N 带有“返回码 2”和“SNA 检测码”08120022。
可能将 NCP(链接的主机端)中的 NUMILU 参数设置为缺省值 (0)。 检查此参数。在更改生效后,如果必要的话,重试之前修改 NCP 定义。
症状为下列信息(在此情况下,不需要 SNA 检测码):
db2 connect to <database> user <userid> SQL30081N 检测到通信错误。 所使用的通信协议:"APPC"。 所使用的通信 API:"CPI-C"。 检测到错误的位置:""。 检测到错误的通信函数:"cmsend"。 特定于协议的错误码:"9"、"*"、"0x10086021"。 SQLSTATE=08001
该问题是在 DB2 Connect 系统上未正确定义“事务程序名”(TPNAME)。 例如,您可能已经更新了 SNA 配置, 但是尚未在 DB2 Connect 网关中验证它。有关进一步的细节,参考 DB2 Connect Enterprise Edition for OS/2 and Windows Quick Beginnings 或 DB2 Connect 个人版快速入门手册。
症状为下列信息(不需要 SNA 检测码):
SQL30081N 检测到通信错误。 所使用的通信协议:"APPC"。 所使用的通信 API:"CPI-C"。 检测到错误的位置:""。 检测到错误的通信函数:"cmrcv"。 特定于协议的错误码:"10"、"*"、"*"。 SQLSTATE=08001
进行检查,以确保正确安装了 DB2。
使用“ DB2 Connect OS/2 版”网关时,如果没有正确定义TP 名,将看到下列信息:
特定于协议的错误码:"10"、"*"、"0x084C0000"。 SQLSTATE=08001
例如,在 CM/2 中,在此情况下,它应该定义如下:
事务程序名 = 'tpname' (用户定义) OS/2 程序路径和文件名 = notused
以及(在下一个 CM/2 配置屏幕上)
显示类型 - 背景 操作类型 - 排队,预装入运算符
SQL30081N 检测到通信错误。 所使用的通信协议:"APPC"。 所使用的通信 API:"CPI-C"。 检测到错误的位置:""。 检测到错误的通信函数:"xcstp"。 特定于协议的错误码:"20"、"*"、"*"。 SQLSTATE=08001
确保在 DB2 Connect 系统上启动了 SNA 子系统。
接收到的信息 SQL30081N 带有“返回码 27”和“SNA 检测码”800Axxxx。
VTAM 路径信息单元 (PIU) 太大。
SQL30081N 检测到通信错误。 所使用的通信协议: "TCP/IP"。 所使用的通信 API:"SOCKETS"。 检测到错误的位置:""。 检测到错误的通信函数:"connect"。 特定于协议的错误码:"79"、"*"、"*"。 SQLSTATE=08001
当远程客户机未能与 DB2 Connect 网关相连时, 就可能发生此错误。当从 DB2 Connect 网关连接至主机时,也会发生此错误。
db2 update dbm cfg using diaglevel 4在停止并重新启动 DB2 之后,查看 db2diag.log 文件, 以便检查是否已经启动了 DB2 TCP/IP 通信。 您应该看到与下列信息类似的输出:
1998-02-03-12.41.04.861119 Instance:svtdbm2 Node:00 PID:86496(db2sysc) Appid:none common_communication sqlcctcp_start_listen Probe:80 DIA3000I "TCPIP" protocol support was successfully started.
SQL30081N 检测到通信错误。 所使用的通信协议: "TCP/IP"。 所使用的通信 API:"SOCKETS"。 检测到错误的位置:"9.21.85.159"。 检测到错误的通信函数:"send"。 特定于协议的错误码:"10032"、"*"、"*"。 SQLSTATE=08001
当试图与 TCP/IP 通信已经发生故障的机器断开连接时, 可能会接收到此错误信息。用 TCP/IP 子系统校正该问题。
在大多数机器上,只须对机器重新启动 TCP/IP 协议就可以校正该问题。 有时可能需要重新启动整个机器。