ora-12514是Oracle数据库连接过程中非常典型的错误,报错信息为监听程序当前无法识别连接描述符中请求的服务,本质是客户端发起连接时,Oracle监听程序无法找到匹配的服务名来响应请求,导致连接建立失败。

错误常见触发原因
要解决问题首先需要明确可能的诱因,常见的有以下几种情况:
- 数据库实例没有正确注册到监听程序中,静态注册配置缺失或者动态注册未生效
- 客户端连接时使用的服务名和监听程序中配置的服务名不一致
- 监听程序本身没有启动,或者监听配置文件存在语法错误
- 数据库实例处于关闭或者受限状态,无法对外提供服务
逐步排查与解决步骤
第一步:检查监听程序运行状态
先登录到Oracle数据库所在的服务器,使用命令行工具查看监听的运行情况,执行以下命令:
# 查看监听状态 lsnrctl status
如果输出中显示监听程序没有启动,执行启动命令:
# 启动监听 lsnrctl start
如果监听已经启动,查看输出中的Services Summary部分,确认是否有你要连接的服务名存在。
第二步:核对监听配置文件listener.ora
监听的核心配置文件是listener.ora,通常位于$ORACLE_HOME/network/admin目录下,静态注册的服务需要在这里配置。正确的静态配置示例如下:
# listener.ora 配置示例
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orclpdb) # 这里是要对外提供的服务名
(ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
(SID_NAME = orcl)
)
)
注意GLOBAL_DBNAME的值就是客户端连接时需要使用到的服务名,修改完配置后需要重启监听生效:
lsnrctl reload
第三步:检查客户端连接配置tnsnames.ora
客户端如果使用本地命名方式连接,需要核对tnsnames.ora文件中的配置,确保服务名和监听中的一致,示例配置如下:
# tnsnames.ora 配置示例
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclpdb) # 这里必须和listener.ora中的GLOBAL_DBNAME一致
)
)
第四步:验证数据库实例状态
登录数据库执行以下SQL查看实例和服务状态:
-- 查看实例状态 SELECT instance_name, status FROM v$instance; -- 查看注册到监听的服务 SELECT name, pdb FROM v$services;
如果实例状态不是OPEN,需要先打开数据库;如果是可插拔数据库(PDB),需要确认PDB已经打开:
-- 打开PDB ALTER PLUGGABLE DATABASE orclpdb OPEN;
验证连接是否恢复
完成以上配置后,使用客户端工具尝试连接,也可以直接用命令行验证:
# 使用sqlplus测试连接 sqlplus username/password@//192.168.0.1:1521/orclpdb
如果可以正常登录,说明ora-12514错误已经解决。如果仍然报错,可以查看监听的日志文件,通常位于$ORACLE_HOME/network/log/listener.log,日志中会记录更详细的连接失败原因,方便进一步排查。
ora-12514Oracle监听listener.oratnsnames.ora数据库连接修改时间:2026-07-22 15:54:23