Oracle 导入全库之后使用plsql登陆时报错
版本12C版本2
再oracle主机本地可以使用sqlplus 登陆,但是使用plsql无法登陆,报错如上。
首先考虑是防火墙问题,查看防火墙和selinux均为关闭状态
然后查看监听状态
查看 监听状态的命令为首先使用oracle 用户登陆操作系统,命令lsnrctl
进入监听程序,关键status 查看监听状态
里面详细列出了监听的状态以及服务端的监听文件位置,
查看监听文件
查看客户端的监听配置
无发现明显问题,下面尝试重启监听
重启和启动监听的命令为
lsnrctl stop、lsnrctl start
使用oracle用户执行该命令
执行过上述的重启监听之后,依然报错
为了排除防火墙因素在同网段使用ssh测试了连接1521端口,结果测试结果为访问被拒绝
初步还是怀疑监听服务的问题,再次查看监听文件
将HOST =localhost 修改为本地IP地址HOST = 172.16.103.9,注意修改监听之前需要先关闭监听,关闭监听之后再修改监听文件,最后再启动监听
修改后的监听文件
启动监听
查看监听状态
1分30秒过去了,未监听到实例。
此时尝试使用plsql连接
此时依旧报错12514,再次查看监听状态,依旧是未监听到实例
再次尝试修改监听文件,将监听IP修改未监听主机名。因为hosts文件中有解析将本机解析为oracle,故将监听文件中的主机名修改为oracle
修改后的监听文件
对应的hosts文件
再次启动监听,查看监听状态
已经监听到实例,再次使用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 呢?