一次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.net.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
查看/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工具連接數據庫,成功!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM