我想在 Windows 中查找 DB2 端口,请帮忙。一些信息:
- DB2 v 9.7 个人版 - 全新安装
- netstat 命令未列出 db2 端口。
- system32\drivers\etc\services 文件中缺少 db2 条目,因此创建了一个条目 - “db2c_DB2 50000/tcp”
- 能够使用控制中心启动 db2 并创建表和插入行
- 能够使用 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 正在监听其他端口,但是,
- 它使用的是什么端口?
- 为什么它没有使用服务文件中提到的端口#50000?
- 为什么 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 连接。
- DB2SET 必须显示 DB2COMM 设置中的 TCPIP。
- DBM 配置中的 SVCENAME 必须反映有效的 TCP 服务名称,或者最好是未使用的 TCP 端口号,例如 50000。
- 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 连接,所以您确实需要更改实例的配置才能连接到数据库。