ORA-12514问题解决

解决ORA-12514错误
本文介绍了解决Oracle数据库中ORA-12514错误的方法。通过修改listener.ora文件,添加服务名ORCL的相关配置,解决了无法通过服务名连接数据库的问题。

版本:11.2.0.1.0 - 64bit

本机安装Oracle后链接测试发现以下情况:

sqlplus scott/tiger 正常登陆

sqlplus scott/tiger@orcl  登陆失败,提示ORA-12514错误,应该是无法识别服务名ORCL

为此查阅资料,找到以下解决方案:

-------------------------------------------------------------------

找到oracle安装目录下listener文件:

原文件如下:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = d:\app\Administrator\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:d:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = idylan)(PORT = 1521))
    )
  )


ADR_BASE_LISTENER = d:\app\Administrator

修改后如下:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = d:\app\Administrator\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:d:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
   (SID_DESC =
       (GLOBAL_DBNAME = ORCL)
       (ORACLE_HOME = d:\app\Administrator\product\11.2.0\dbhome_1)  
       (SID_NAME = ORCL)
   )

  )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = idylan)(PORT = 1521))
    )
  )


ADR_BASE_LISTENER = d:\app\Administrator

保存,后sqlplus scott/tiger@orcl 可正常登陆。


--------------------------

dylan    presents.

### ORA-12514 错误解决方案 ORA-12514 错误表示 TNS 监听器无法识别客户端请求的服务名称。此问题通常由服务名未正确注册到监听器或 tnsnames.ora 配置文件中的设置不匹配引起。 以下是可能的原因及其对应的解决方法: #### 1. **监听器未正确定义服务** 如果 `tnsnames.ora` 文件中定义的服务名与数据库实例的实际服务名不符,则可能导致该错误。可以通过查询数据库参数确认实际服务名: ```sql show parameter service_names; ``` 确保返回的服务名(如 `orcl`)与 `tnsnames.ora` 中的配置一致[^3]。 #### 2. **本地监听器未正确配置** 当 `LOCAL_LISTENER` 参数未正确设置时,可能会导致服务未能成功注册至监听器。可以检查当前的 `LOCAL_LISTENER` 设置: ```sql show parameter LOCAL_LISTENER; ``` 如果返回为空或指向不存在的监听器地址,则需重新设置该参数。例如: ```sql alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope=both; ``` 随后重启监听器以应用更改: ```bash lsnrctl stop lsnrctl start ``` #### 3. **动态服务注册失败** Oracle 数据库通过 PMON 进程向监听器注册其服务。如果 PMON 未能完成注册操作,也可能引发此错误。可通过以下命令验证服务是否已注册到监听器: ```bash lsnrctl status ``` 在输出中查找目标服务名(如 `orcl`)。如果没有找到对应条目,则可能是动态注册失败。此时可手动触发注册过程: ```sql alter system register; ``` #### 4. **TNSNAMES.ORA 配置错误** 检查客户端机器上的 `tnsnames.ora` 文件,确保其中的服务描述符正确无误。例如: ```plaintext ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ``` 注意 `SERVICE_NAME` 的值应与数据库实例的服务名完全一致[^1]。 #### 5. **监听器日志分析** 查看监听器的日志文件(位于 `$ORACLE_HOME/network/log/listener.log`),定位具体的错误原因并采取相应措施。常见问题是端口冲突或网络访问受限。 --- ### 示例代码:修改监听器配置 编辑监听器配置文件 `listener.ora` 并保存: ```plaintext LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1) (SID_NAME = orcl) ) ) ``` 之后重启监听器生效。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值