自己在win7 上安装了一个vmware,安装了linux5 ,oracle10g,升级到10.2.0.5.0。
1) sqlplus / as sysdba , startup ,启动数据库实例
2) lsnrctl start ,启动数据库监听
3) 在本地建立tns,数据库别名
4) 用pl /sql 连接,发现连不上去
诊断过程如下:
1)在win7上telnet 数据库服务器,发现没有telnet, 打开控制面板,打开程序和功能,看到左边有个“打开或关闭Windows功能 ,打开找到telnet客户端,勾选上,然后确定就可以了 。 telnet 数据库ip 1521 , 发现....无法打开到主机的连接,在端口1521:连接失败。 说明win7无法连接到数据库的1521端口
可能是linux服务器的防火墙,也可能是win7的防火墙的问题。
linux, 执行 /etc/init.d/iptables status
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
3 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
6 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631
8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:21
10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
11 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
12 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:23
13 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
14 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
看到只开放了 21,22,23,443,80端口,1521端口没有开放。
简单一点,就直接停用iptables,
停止防火墙: /etc/init.d/iptables stop
开机就禁用防火墙
chkconfig iptables off
开机启用防火墙 chkconfig iptables on
查看防火墙 [root@node1 ~]# chkconfig --list iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
复杂一点就是启用防火墙,在防火墙中添加开放1521端口的规则
从网上找了几个命令,执行了都不好用,
是因为新增加的规则放在了最后面,没有起作用。
做好的办法是手工修改 /etc/sysconfig/iptables 文件
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
保存后,service iptables restart 就可以啦。
或者用 /etc/init.d/iptables restart 也行
iptables -L -n 命令显示防火墙信息
以前不好用,是因为
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
1521端口规则放在了 reject all 规则后面啦,所以没有起作用。
2)如果windows有防火墙,关掉防火墙。
3)如果还连不上,删点服务器的listener监听,重建一下, lsnrctl restart
4)在服务器上配置tnsnames,如果服务器通过tnsnames可以访问数据库,那么windows应该也可以(排除防火墙因素)
5)有windows自己的tnsnames.ora配置文件的错误,是因为数据库别名前面多了一个空格,坑人啊。
6) netstat -a -n 命令可以查看所有的端口连接情况