⼀次DB2数据库连接失败(SQLSTATE=08001)的解决⽅法
有⼀次,在使⽤DbVisualizer⼯具连接⾃⼰linux虚拟机上的DB2数据库时,报如下错误:
Product: DbVisualizer Pro 9.1
Build: #2050 (2013/09/08 11:03)
Java VM: Java HotSpot(TM) 64-Bit Server VM
Java Version: 1.6.0_43
Java Vendor: Sun Microsystems Inc.
OS Name: Windows 7
OS Arch: amd64
OS Version: 6.1
An error occurred while establishing the connection:
Long Message:
[jcc][t4][2043][11550][4.15.82] 异常 java.ConnectException:打开端⼝ 50,000 上服务器 /192.168.17.88 的套接字时出错,消息为:Connection timed out: connect。 ERRORCODE=-4499, SQLSTATE=08001 Details:
Type: com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException
Error Code: -4499
SQL State: 08001
在百度上搜索"DB2 SQLSTATE=08001",到如下资料:
这种问题⼀般的原因:
1.DB2COMM=TCPIP
2.数据库故障
3.端⼝号被禁⽤
解决⽅案:
1.看看端⼝号有没有配置正确,看⼀下配置参数svcename跟services⽂件中配置的db2端⼝号是否⼀致,windows⼀般⽤50000,unix/linux⼀般⽤60000。
2.连接出错⾸先看看服务器ip 和端⼝写对没有。
ip如果没错就要看看服务器的db2服务端⼝对不对。另外对于服务器下⾯这些也要注意。
检查服务器的配置情况如下:
验证存在的DB2数据库
db2 list db directory
db2 list db directory show detail
验证实例使⽤的通讯协议,查看DB2COMM变量
db2set -all
查看数据库管理器的配置,查看SVCENAME(特指tcpip协议)
db2 get dbm cfg
db2数据库sql语句查看/etc/services中,有⽆与上⾯对应SVCENAME的端⼝,例如:
db2cDB2 50000/tcp
要确认服务器是否在监听,可以⽤netstat -an 来查看端⼝是否处于LISTEN状态。
查看我linux虚拟机上的db2数据库端⼝设置:
[root@localhost ~]# cat /etc/services | grep db2c_db2inst1
db2c_db2inst1 50000/tcp
端⼝设置没有问题,在看防⽕墙设置:
[root@localhost ~]# service iptables status
±í¸ñ£ºfilter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:81
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8080
8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8081
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8001
10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8002
11 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@localhost ~]#
原来防⽕墙没有开启50000端⼝。编辑该⽂件,在⾥⾯添加⼀条记录:
11 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:50000
添加完之后,重启iptables设置(⼀定要重启,否则不⽣效),并再次查看防⽕墙端⼝设置信息(注意红⾊标记部分):
[root@localhost ~]# service iptables restart
清除防⽕墙规则: [确定]
把 chains 设置为 ACCEPT 策略: filter [确定]
正在卸载 Iiptables 模块 [确定]
应⽤ iptables 防⽕墙规则 [确定]
[root@localhost ~]# service iptables status
±í¸ñ£ºfilter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:81
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8080
8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8081
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8001
10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8002
11 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:50000
12 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@localhost ~]#
再次使⽤DbVisualizer⼯具连接数据库,成功!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论