Oracle ORA 12541 报错解决过程

   

   

Oracle 导入全库之后使用plsql登陆时报错

   

版本12C版本2

   

ORA-12541: TNS: No Listener

   

Oracle ORA 12541 报错解决过程

   

   

再oracle主机本地可以使用sqlplus 登陆,但是使用plsql无法登陆,报错如上。

   

首先考虑是防火墙问题,查看防火墙和selinux均为关闭状态

   

然后查看监听状态

查看 监听状态的命令为首先使用oracle 用户登陆操作系统,命令lsnrctl

进入监听程序,关键status 查看监听状态

Oracle ORA 12541 报错解决过程

   

里面详细列出了监听的状态以及服务端的监听文件位置,

查看监听文件

   

Oracle ORA 12541 报错解决过程

   

查看客户端的监听配置

   

Oracle ORA 12541 报错解决过程

   

   

无发现明显问题,下面尝试重启监听

   

重启和启动监听的命令为

lsnrctl stop、lsnrctl start

   

   

使用oracle用户执行该命令

   

执行过上述的重启监听之后,依然报错

Oracle ORA 12541 报错解决过程

   

为了排除防火墙因素在同网段使用ssh测试了连接1521端口,结果测试结果为访问被拒绝

Oracle ORA 12541 报错解决过程

初步还是怀疑监听服务的问题,再次查看监听文件

Oracle ORA 12541 报错解决过程

将HOST =localhost 修改为本地IP地址HOST = 172.16.103.9,注意修改监听之前需要先关闭监听,关闭监听之后再修改监听文件,最后再启动监听

修改后的监听文件

Oracle ORA 12541 报错解决过程

启动监听

Oracle ORA 12541 报错解决过程

查看监听状态

Oracle ORA 12541 报错解决过程

1分30秒过去了,未监听到实例。

此时尝试使用plsql连接

Oracle ORA 12541 报错解决过程

   

此时依旧报错12514,再次查看监听状态,依旧是未监听到实例

再次尝试修改监听文件,将监听IP修改未监听主机名。因为hosts文件中有解析将本机解析为oracle,故将监听文件中的主机名修改为oracle

修改后的监听文件

Oracle ORA 12541 报错解决过程

对应的hosts文件

Oracle ORA 12541 报错解决过程

再次启动监听,查看监听状态

Oracle ORA 12541 报错解决过程

   

已经监听到实例,再次使用plsql连接,plsql已经可以正常连接。

   

总结:本库版本是oracle 12c 版本2 操作系统为oracle linux 7.3 这个库我执行过从12C版本1 RAC集群到这个库的整库还原,使用的expdp和impdp备份还原,备份还原之后出现此故障,不知道是oracle自身的bug还是因为我之前的库和现有的库版本不一致导致的问题。总之,监听文件中HOST对应的主机需要写主机名,写IP不生效,百度上说将HOST对应的值写成0.0.0.0的也可以监听到实例,再解决问题的过程中,没有尝试该方法。因为不清楚HOST=0.0.0.0是泛指该主机能连接到的所有主机还是该主机自身。还是HOST仅仅只能使用主机名来解析呢,还有,在我执行全库还原操作之前是没有这个问题的,监听文件的默认配置为localhost。根据本机hosts文件,localhost可解析为127.0.0.1和::1,这两条已经足够代表本机自身了,为什么还需要使用安装oracle过程中单独添加的解析条目 172.16.103.9 oracle 呢?

   

上一篇:oracle执行update时卡死问题的解决办法


下一篇:调用从PHP执行插入/更新的Oracle函数?