有一次,在使用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工具連接數據庫,成功!
