ORA-12514是Oracle数据库连接过程中常见的错误之一,当客户端发起连接请求时,监听程序无法在自身的配置中找到与连接描述符匹配的服务,就会抛出该错误,导致连接中断。

错误常见触发原因
该错误的核心原因是监听程序未识别到请求的服务,常见场景包括以下几种:
- 监听配置文件
listener.ora中未配置对应的服务信息 - 客户端连接时使用的服务名和监听中注册的服务名不匹配
- Oracle数据库实例未正常向监听程序注册服务
- 监听程序未启动或者启动后未加载最新的配置
解决步骤
1. 检查监听程序运行状态
首先确认监听程序是否已经正常启动,在命令行执行以下命令查看监听状态:
# 查看监听状态 lsnrctl status # 如果监听未启动,执行启动命令 lsnrctl start
如果执行lsnrctl status后提示监听未运行,先启动监听后再尝试连接,看错误是否消失。
2. 检查listener.ora配置
找到Oracle安装目录下的listener.ora文件,通常路径为$ORACLE_HOME/network/admin/listener.ora,检查配置中是否包含请求的服务。以下是一个标准的监听配置示例:
# listener.ora 配置示例
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
# 静态注册服务配置
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL) # 全局数据库名,即客户端连接时使用的服务名
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = ORCL) # 数据库实例名
)
)
如果配置中缺少对应的GLOBAL_DBNAME,需要手动添加后重启监听:
# 重启监听使配置生效 lsnrctl reload
3. 验证客户端连接的服务名
检查客户端连接时使用的服务名是否和监听中配置的服务名一致,比如使用sqlplus连接时的命令:
# 连接命令格式,注意服务名要和listener.ora中的GLOBAL_DBNAME一致 sqlplus username/password@127.0.0.1:1521/ORCL
如果不确定监听中注册的服务名,可以执行lsnrctl status查看输出中的Services Summary部分,确认已注册的服务列表。
4. 检查数据库实例动态注册状态
Oracle实例默认会动态向监听注册服务,如果动态注册失败,也会导致该错误。可以登录数据库执行以下命令查看实例状态:
-- 查看实例状态 SELECT instance_name, status FROM v$instance; -- 查看注册的服务 SELECT name, pdb FROM v$services;
如果实例状态正常但未注册服务,可以手动触发动态注册:
-- 手动触发服务注册 ALTER SYSTEM REGISTER;
验证解决结果
完成上述配置修改和状态检查后,再次尝试客户端连接,如果连接成功则说明问题已经解决。如果仍然报错,可以查看监听日志定位更详细的原因,监听日志通常位于$ORACLE_HOME/network/log/listener.log,日志中会记录连接请求的详细信息和错误原因。
ORA-12514TNS监听Oracle数据库listener_ora修改时间:2026-07-17 03:30:22