如何在 Windows 中查找 DB2 端口号(注意:它不使用服务文件中列出的端口,并且 netstat 命令输出中缺少 db2 列表)?

如何在 Windows 中查找 DB2 端口号(注意:它不使用服务文件中列出的端口,并且 netstat 命令输出中缺少 db2 列表)?

我想在 Windows 中查找 DB2 端口,请帮忙。一些信息:

  1. DB2 v 9.7 个人版 - 全新安装
  2. netstat 命令未列出 db2 端口。
  3. system32\drivers\etc\services 文件中缺少 db2 条目,因此创建了一个条目 - “db2c_DB2 50000/tcp”
  4. 能够使用控制中心启动 db2 并创建表和插入行
  5. 能够使用 CLP 启动 db2 并执行操作

实际上,我尝试使用“jdbc:db2://127.0.0.1:50000/TEST”作为 Java 中的连接 URL 连接到 DB2,但是,我收到一个错误:“异常 java.net.ConnectException:在端口 50,000 上打开到服务器 /127.0.0.1 的套接字时出错,消息为:使用了连接引用:连接。ERRORCODE=-4499,SQLSTATE=08001”

我发现 DB 已启动并正在运行,但没有监听端口 50000,尽管服务文件中提到了这一点。因此,db2 正在监听其他端口,但是,

  1. 它使用的是什么端口?
  2. 为什么它没有使用服务文件中提到的端口#50000?
  3. 为什么 netstat 命令没有列出 db2 服务和端口信息?

提前致谢。

答案1

首先确保 TCP 通信已打开,

db2cmd -i -w
db2set DB2COMM=npipe,tcpip
db2stop
db2start

您可以检查它是否没有使用默认端口,

db2cmd -i -w
db2 get dbm cfg | find "SVCENAME"

应该得到这样的一行,

TCP/IP Service name                          (SVCENAME) = db2c_DB2

如果未设置为默认端口,则上述内容将需要一个端口号,如您所见,我的配置是默认的(= 50000)

答案2

由于您能够启动 DB2 并从控制中心连接到本地数据库(通过使用共享内存的 CLI 驱动程序),因此以下一个或多个问题可能会阻止通过 TCP/IP 进行通信的 JDBC 连接。

  1. DB2SET 必须显示 DB2COMM 设置中的 TCPIP。
  2. DBM 配置中的 SVCENAME 必须反映有效的 TCP 服务名称,或者最好是未使用的 TCP 端口号,例如 50000。
  3. Windows 防火墙必须允许您为 DB2 实例选择的 TCP 端口上的入站连接。

对 DB2 注册表(通过 DB2SET)或 DBM 配置的更改需要先停止并启动 DB2 才能生效。

答案3

您无法通过 Java 执行此操作。您需要从 dbadmin 或 DB/2 配置本身中找出答案。您的项目 (3) 实际上没有完成任何工作:'services' 文件仅供参考,或供某些客户端使用;它不会告诉 DB/2 要做什么。只有 DB/2 自己的配置才能做到这一点。

答案4

看来,当服务名称 DBM 参数为空时,就意味着无法进行 TCP 连接。如果您打算在本地使用 DB2,通过从同一台机器访问数据库,那么这不是问题。

为了配置 TCP 连接,您必须按照其他答案中描述的步骤进行操作。但是,如果实例没有服务名称,则不表示存在问题。

此页面有关于此问题的讨论:http://groups.google.com/group/comp.databases.ibm-db2/browse_thread/thread/a515365a5d04af81

因为 JDBC 使用 TCP 连接,所以您确实需要更改实例的配置才能连接到数据库。

相关内容