Oracle报错ora12514怎么检查及解决
更新时间:2023-11-25问题描述
Oracle报错ORA-12514: TNS:listener does not currently know of service requested in connect descriptor。这是因为客户端提供的服务名和listener里定义的服务不一致导致的。
解决方法
1. 确认服务名
首先,我们需要确认客户端中使用的服务名是否正确。可以通过查询 tnsnames.ora 文件来查看。tnsnames.ora 文件一般位于 $ORACLE_HOME/network/admin 目录下,其中 $ORACLE_HOME 是Oracle安装目录。如果客户端中使用的服务名和 tnsnames.ora 文件中定义的服务名不一致会导致该问题。
# tnsnames.ora 中的定义 ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
如果在客户端中使用的服务名为 ORCL,那么 tnsnames.ora 文件中对应的服务名也应为 ORCL。
2. 确认listener配置
如果客户端中使用的服务名和 tnsnames.ora 文件中定义的服务名一致,那么可能是 listener 配置问题导致的。可以通过以下步骤来确认 listener 配置是否正确:
- 在服务器端打开终端,执行 lsnrctl status 命令,查看 listener 的状态。
- 确认 listener 中是否包含客户端所请求使用的服务名。如果未包含,需要在 listener 中添加该服务名。可以通过编辑 listener.ora 文件,在 SID_LIST_LISTENER 中添加相应的服务名。
- 重新启动 listener。
- 在客户端重新尝试连接目标数据库,确认问题是否已解决。
# listener.ora 中的配置 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (SID_NAME = orcl) ) )
3. 确认目标数据库状态
如果客户端使用的服务名和 tnsnames.ora 中定义的一致、listener 配置也正确,那么可能是目标数据库处于不可用状态导致。可以通过以下步骤来确认目标数据库状态:
- 在服务器端打开终端,执行 sqlplus / as sysdba 命令,连接目标数据库。
- 确认目标数据库是否处于打开状态,可以通过执行 select status from v$instance; 命令来查看数据库状态。
总结
ORA-12514错误一般是由于服务名不匹配或listener配置问题导致的。可以通过确认服务名、listener配置、目标数据库状态来排查可能出现问题的地方。如果上述方法无法解决问题,可以考虑查看 listener 和数据库的日志,找到更为详细的错误信息。