侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 19 条评论

目 录CONTENT

文章目录

Oracle ORA-12170:连接超时

与晚风述往事
2021-10-22 / 0 评论 / 0 点赞 / 969 阅读 / 1,960 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-10-22,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

错误信息

【汉】ORA-12170:TNS:连接超时

【英】ORA-12170:TNS:Connect timeout occurred

已经启动成功的数据库,在使用PLSQL Developer工具连接时报错。
oracle_ora_12170_1

版本

Oracle 【11.2.0.3.0】、【11.2.0.4.0】

Oracle客户端在连接到服务端时,如果不能在指定的时间内建立连接并验证身份,就会抛出连接超时。指定的时间是由sqlnet.ora文件中的【SQLNET.INBOUND_CONNECT_TIMEOUT】参数决定的,它的意思是指定客户端和服务端连接并验证身份的时间(以秒为单位),默认值是60。

既然已经知道是因为没有成功连接引起的问题,那么解决起来也就简单很多了。首先是排查导致客户端没有成功连接到服务端的原因,再就是找到原因后的解决了。

排查

先说排查,虽然Oracle有提供很多连接方式,但我们常用的客户端连接方式就是使用IP+端口去连接到服务端。这种方式排查起来是最简单的,首先检查IP能不能进行连接,如果连接不到就定位到问题是服务端和客户端的IP不能互通;如果能够进行连接,就再检查端口能不能连接。

通常情况下,原因会出现在服务器端口上。

检查ip通信

C:\Users\Administrator>ping 192.168.3.85

oracle_ora_12170_2

从图上看,发送4个,接收4个,没人任何丢包情况,说明客户端和服务端的IP通信没有问题。

检查端口

如果在执行telnet命令时报错命令找不到,就说明你的Windows操作系统中没有启用Telnet客户端。要启用Telnet客户端也很简单,找到控制面板->程序->启用或关闭Windows功能,勾选上Telnet客户端,确定就行了。

C:\Users\Administrator>telnet 192.168.3.85 1521

oracle_ora_12170_3

从图中看到,客户端无法通过1521端口连接到服务器。

解决

排查完后,如果确定问题是出现在IP地址上,那么就得找相关人员或自己去处理IP通信问题。这个就不写具体流程了,因为我也不懂,就不误人子弟了。如果是出现在端口上,那么就轮到我来哔哔几句了。

CentOS 7及以上的版本将firewalld作为默认的防火墙,而之前版本的防火墙是iptables。因此,如果你的服务器上的操作系统版本是CentOS7以上,就检查firewalld的规则;如果是CentOS7以下的版本,就检查iptables的规则。

我这里以CentOS7为例,CentOS7以下的操作系统暂时就不写了,感觉没怎么接触过。另外,如果你的CentOS7系统使用的防火墙是iptables,也不需要再向下看了,下面只写了firewalld的解决方法。

查看firewalld状态

[root@localhost ~]# systemctl status firewalld

oracle_ora_12170_4

firewalld的状态为Active: active (running),则说明已启用。

查看firewalld规则

[root@localhost ~]# firewall-cmd --zone=public --list-ports

oracle_ora_12170_5

执行到这里,看到列表没有任何规则,就已经证实是客户端无法连接到服务端是因为服务器firewalld已启用,但并没有将Oracle数据库监听的端口1521开放。原因找到了,解决方法就无非是要么开放1521端口,要么关闭firewalld。我个人建议你是开放1521端口,而不是关闭firewalld。

关闭firewalld解决

如果你能保证服务器是内网,不会因为防火墙的问题导致安全系数下降,就可以执行关闭。

关闭firewalld

[root@localhost ~]# systemctl stop firewalld.service

禁用firewalld开机

[root@localhost ~]# systemctl disable firewalld.service

开放端口解决

如果你觉得关闭防火墙,操作系统的安全系数会降低,则可以开放端口。

永久开放1521端口

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=1521/tcp

重启firewalld

[root@localhost ~]# systemctl restart firewalld.service

重启后,再次使用命令进行测试。

测试端口

C:\Users\Administrator>telnet 192.168.3.85 1521

oracle_ora_12170_6

看到端口能够正常通过,再次测试tnsping。

测试tnsping

C:\Users\Administrator>tnsping 192.168.3.85/orcl

oracle_ora_12170_7

到这里,就彻底解决此问题了。

0

评论区