c语言编程笔录

首页 >   > 笔记大全

笔记大全

Oracle报错ora12514怎么检查及解决

更新时间:2023-07-17

问题描述

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 配置是否正确:

  1. 在服务器端打开终端,执行 lsnrctl status 命令,查看 listener 的状态。
  2. 确认 listener 中是否包含客户端所请求使用的服务名。如果未包含,需要在 listener 中添加该服务名。可以通过编辑 listener.ora 文件,在 SID_LIST_LISTENER 中添加相应的服务名。
  3. 重新启动 listener。
  4. 在客户端重新尝试连接目标数据库,确认问题是否已解决。
# listener.ora 中的配置
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (SID_NAME = orcl)
    )
  )

3. 确认目标数据库状态

如果客户端使用的服务名和 tnsnames.ora 中定义的一致、listener 配置也正确,那么可能是目标数据库处于不可用状态导致。可以通过以下步骤来确认目标数据库状态:

  1. 在服务器端打开终端,执行 sqlplus / as sysdba 命令,连接目标数据库。
  2. 确认目标数据库是否处于打开状态,可以通过执行 select status from v$instance; 命令来查看数据库状态。

总结

ORA-12514错误一般是由于服务名不匹配或listener配置问题导致的。可以通过确认服务名、listener配置、目标数据库状态来排查可能出现问题的地方。如果上述方法无法解决问题,可以考虑查看 listener 和数据库的日志,找到更为详细的错误信息。