使用PL/SQL连接本地oracle时报错:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

本文详细介绍了如何解决Oracle主服务和监听器服务已启动但使用PLSQLDeveloper连接时报ORA-12514错误的问题。通过结束特定进程、修改listener.ora文件并重新启动服务,成功解决了连接问题。

环境:Oracle 11g R2 + PL SQL Developer + SQL Plus

问题:Oracle主服务和监听器服务已经启动,使用SQL Plus能够正常连接,使用PL SQL Developer连接报次错误:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务。

如图:



解决:

1.结束OracleOraDb11g_home2TNSListener进程;

2.打开D:\DevInstall\Oracle11gR2\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN(不同机器目录可能不同)目录下的listener.ora文件,添加红色部分;(添加错误的话无法启动OracleOraDb11g_home2TNSListener服务)

3.启动OracleOraDb11g_home2TNSListener服务后成功连接。

# listener.ora Network Configuration File: D:\DevInstall\Oracle11gR2\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.


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


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


ADR_BASE_LISTENER = D:\DevInstall\Oracle11gR2\Administrator


SID查看请参照此图:



### 解决 Oracle 19c 中 ORA-12514 错误的方法 当遇到 `ORA-12514` 错误,通常意味着 TNS 监听器未能找到与连接描述符匹配的服务名称。这可能是由于配置文件中的设置不正确或监听器未正确注册服务。 #### 检查并修改 `listener.ora` 确保 `listener.ora` 文件中定义了正确的监听地址和服务名称。此文件位于 Oracle 安装目录下网络配置文件夹中。对于某些工具如 Navicat,可能会读取解压目录而非安装目录下的 `listener.ora`[^2]: ```plaintext LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name_or_ip)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orclpdb) (ORACLE_HOME = /path/to/oracle_home) (SID_NAME = orcl) ) ) ``` #### 修改 `tnsnames.ora` 同样重要的是确认 `tnsnames.ora` 的内容指向有效的数据库实例和服务名。该文件也应放置于相同的路径下,并且应当包含如下条目来指定目标数据库的连接字符串[^4]: ```plaintext ORCLPDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name_or_ip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb.your_domain.com) ) ) ``` #### 验证服务状态并重启监听器 完成上述更改后,验证监听器的状态以及它是否已成功加载新的配置。如果必要的话,在 Windows 上可以通过任务管理器内的服务选项卡停止再启动名为 `Oracle<sid>_Listener` 的进程;而在 Linux/Unix 平台上则通过命令行执行相应操作[^3]。 #### 使用 PL/SQL 开发者或其他客户端测试连接 最后一步是在应用程序或者像 PL/SQL Developer 这样的专用 IDE 中尝试建立到数据库的新会话,以检验问题是否得到解决[^1]。 ```python import cx_Oracle connection = None try: connection = cx_Oracle.connect( user="your_username", password="your_password", dsn="localhost:1521/ORCLPDB" ) except Exception as e: print(e) if connection is not None: cursor = connection.cursor() cursor.execute('SELECT * FROM dual') result = cursor.fetchone() print(result) cursor.close() connection.close() ```
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值