ORA-12514及ORA-12504报错处理和原理分析

报错1:
如果sqlplus oracle/oracle@orcl 进行数据库连接的时候,报错是:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

这个是因为客户端向监听请求的服务不在监听中存在。
排查:
1、tnsping orcl 查看客户端请求的服务
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.56)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl1111)))

2、 查看监听器中监听的服务lsnrctl status

3、修改tnsnames.ora中的service_name为监听器中监听的服务名

报错2:
如果sqlplus oracle/oracle@orcl 进行数据库连接的时候
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

翻译一下这个报错,含义是在tnsnames.ora中CONNECT_DATA字段里的service_name值没有给到listener,也就是listner没有收到服务请求。

排查:
1、tnsping一下orcl,解析结果中的确发现service_name没有值
Used HOSTNAME adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.0.131)(PORT=1521)))
OK (0 msec)

2、考虑到解析orcl,一般是通过TNSNAMES、HOSTNAME、EZCONNECT 这几种方式来按顺序搜索来解析,检查发现配置文件中有TNSNAMES和HOSTNAME两个值,并且这个是按顺序来解析,从tnsping结果中看到是通过HOSTNAME来解析的

3、查看tnsnames.ora,发现存在orcl这个连接描述符,按理来说,应该是通过tnsnames.ora来解析,
跟踪进程处理过程
在这里插入图片描述

检查文件的权限
-rw-r-----. 1 oracle oinstall 327 Apr 9 22:11 tnsnames.ora
发现操作系统用test没有对tnsnames.ora的读权限

进行赋权:
chmod o+r tnsnames.ora

再次测试:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.56)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICAT
ED) (SERVICE_NAME = orcl)))
OK (0 msec)

4、连接成功

你可能感兴趣的:(oracle,数据库,oracle,网络)