Linux Centos6/7连接Oracle11g数据库,提示:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
故障描述
提示该异常说明了两个前提:
第一是Oracle数据库是开启状态
第二是监听程序处于开启状态
解决步骤
1.登录oracle用户权限并查看监听状况
[root@localhost ~]# su oracle
# 查看监听状态
[oracle@localhost ~]$ lsnrctl status
# 文章最后第一个链接介绍了动态监听和静态监听不通处理方法,我主要是静态监听故障
READY说明为动态监听,UNKNOWN则为静态监听(该判断不够准确,具体要到/network/admin/目录下的listener.ora里查看,如果不存在该配置文件,或者未配置SID_LIST_[监听名](ps:SID_LIST_LISTENER)则为动态监听)
2.修改配置文件(重点)
必看备注:下面所更改的文件是恢复成功后直接从服务器拷贝的文件,和一些其它作者配置可能有所不同,如有问题还请多尝试几种,文章最后放上大佬们遇到该问题的配置文件。
(1) 修改listener.ora
# Oracle11g 64位软件的安装位置为data/oracle/product/11.2.0/db_1,数据库名为默认的orcl,CentOS7虚拟机的IP设置为:68.219.182.33
[oracle@localhost ~]$ vim /data/oracle/product/11.2.0/db_1/network/admin/listener.ora
# /network/admin/目录下,查看自己Oracle的安装目录
原文件:
# listener.ora Network Configuration File: /opt/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /opt/app/oracle
改为如下: 切记格式非常重要,一定要仔细检查
# listener.ora Network Configuration File: /opt/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 68.219.182.33)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = /opt/app/oracle
[监听名]和SID_LIST_[监听名]配置是成对出现
配置listener.ora中GLOBAL_DBNAME的值等于tnsnames.ora中的SERVICE_NAME
(2) 修改tnsnames.ora
[oracle@localhost ~]$ vim /data/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# /network/admin/目录下,查看自己Oracle的安装目录
原文件:
# tnsnames.ora Network Configuration File: /data/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
改为如下: 切记格式非常重要,一定要仔细检查
# tnsnames.ora Network Configuration File: /opt/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 68.219.182.33)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl11g.us.oracle.com)
)
)
3. 重启监听并更新注册
[oracle@localhost ~]$ lsnrctl stop # 先关闭监听服务
[oracle@localhost ~]$ lsnrctl start # 开启监听服务
注意看启动端口时候生效
[oracle@localhost ~]$ sqlplus / as sysdba #登入
SQL> shutdown immediate #立即关闭数据库服务
SQL> startup #开启数据库服务
SQL> alter system register; #注册
SQL> quit #登出
[oracle@localhost ~]$ lsnrctl status #查看监听状态
4.再次用plsql访问成功
附:
# sqlnet.ora内容
# sqlnet.ora Network Configuration File: /opt/app/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /opt/app/oracle
总结:本文主要参考大佬文章,其中少部分为自己个人看法和配置,个人记性不好,所以总结加记要;再次感谢CSDN各位大佬的贡献,我只是个小小搬运工。
参考大佬文献
https://blog.csdn.net/weixin_37769855/article/details/99435520
https://www.cnblogs.com/nichoc/p/6417505.html
https://blog.csdn.net/u013310119/article/details/80995238
https://bbs.csdn.net/topics/390463788?sharesource=xiongben0102