ORA-12514 监听程序当前无法识别连接符中请求的服务 解决

本文记录了解决ORA-12514错误的过程。问题出现在配置Oracle 11gR2客户端时,通过排查网络服务名与服务名的混淆,最终通过修改tnsnames.ora文件内容正确配置,解决了无法连接数据库的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      今天重装系统后,因为这个问题卡了我一些时间。为了让大家不走我的弯路,

同时也方便自己日后查阅,写本文记录一下。

一、问题出现情景以及错误代码 ORA-12514

        开发电脑,需要连接安装在其他服务器上的Oracle数据库,所以安装了数据客

户端11gR2client(ps:安装的时候要不要偷懒,要选择“管理员”安装类型,因为

这样才会有配置数据库服务要用到的Net Configuration Assistant),然后用

Net Configuration Assistant配置数据库,配置完成之后,提示如下错误:

二、问题推断

以为是:

1、缓存之类的问题,删除了缓存,重启了电脑,还是出现这样的问题;

2、配置错误,删除了Net Configuration Assistant上的本地网络服务配置,重新配置,问题依旧;

3、客户端安装出现故障,概率极小,但是还是尝试重新安装了Oracle客户端,问题依旧。

三、找到问题

网上查询资料,找了几种解决的思路:

1、配置开发电脑的环境变量;

2、修改数据库服务端的istener.ora、tnsnames.ora文件内容

3、配置开发电脑的PLSQL的tnsnames.ora文件路径

4、修改tnsnames.ora内容

结合找到的几种可能的方案,仔细回忆Net Configuration Assistant配置过程,最后发现是我混淆

### ORA-12514 TNS 监听程序无法识别连接描述符请求服务解决方案 ORA-12514 错误通常表示客户端尝试连接到的服务名称未被监听识别。此问题可能由多种原因引起,包括监听器配置错误、服务名称不匹配或环境变量未正确设置等。 #### 监听器配置文件 `listener.ora` 的检查与修改 监听器配置文件 `listener.ora` 位于 Oracle 安装目录下的 `NETWORK\ADMIN` 文件夹中。打开该文件并确保其内容类似于以下示例: ```plaintext LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name)(PORT = your_port_number)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = your_service_name) (ORACLE_HOME = your_oracle_home_path) (SID_NAME = your_sid_name) ) ) ``` 上述配置中,`your_host_name` 是服务器的主机名或 IP 地址,`your_port_number` 是监听器端口号(通常是 1521),`your_service_name` 是数据库的服务名称,`your_oracle_home_path` 是 Oracle 客户端或服务器的安装路径,`your_sid_name` 是数据库实例的 SID[^2]。 如果 `SID_LIST_LISTENER` 部分未定义,则需要手动添加以确保监听器能够识别数据库实例。 #### 检查并重启监听器 完成 `listener.ora` 文件的修改后,使用以下命令检查和重启监听器: ```bash lsnrctl status lsnrctl stop lsnrctl start ``` 通过 `lsnrctl status` 命令可以验证监听器是否正在运行以及它是否已注册所需的服务。如果服务未注册,则可能是 `SID_LIST_LISTENER` 配置有误或数据库未正确启动。 #### 检查 `tnsnames.ora` 文件 `tnsnames.ora` 文件同样位于 `NETWORK\ADMIN` 文件夹中。确保该文件中的条目与数据库的实际配置一致。例如: ```plaintext MY_DATABASE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name)(PORT = your_port_number)) (CONNECT_DATA = (SERVICE_NAME = your_service_name) ) ) ``` 此处的 `your_host_name`、`your_port_number` 和 `your_service_name` 必须与 `listener.ora` 文件和数据库的实际配置相匹配[^3]。 #### 环境变量的配置 为了确保 PL/SQL Developer 能够正确找到 `tnsnames.ora` 文件,建议设置一个名为 `TNS_ADMIN` 的环境变量,其值为 `tnsnames.ora` 文件所在的路径。例如: ```plaintext E:\app\product\11.2.0\dbhome_1\NETWORK\ADMIN ``` 此操作可避免因路径问题导致的连接失败[^3]。 #### 数据库服务的状态检查 确保目标数据库实例已正确启动,并且监听器已成功注册该实例。可以通过以下命令检查数据库状态: ```sql SELECT instance_name, status FROM v$instance; ``` 如果数据库未启动或监听器未注册服务,需要启动数据库实例并重新启动监听器。 #### PL/SQL Developer 连接测试 在 PL/SQL Developer 中创建新连接时,选择“TNS”作为连接类型,并输入正确的用户名、密码以及 `tnsnames.ora` 文件中定义的别名。测试连接以确认配置是否正确。 ### 示例代码:验证监听器和服务状态 以下脚本可用于验证监听器和服务状态: ```python import cx_Oracle # 替换为实际的连接信息 dsn_tns = cx_Oracle.makedsn('your_host_name', 'your_port_number', service_name='your_service_name') try: connection = cx_Oracle.connect(user='your_username', password='your_password', dsn=dsn_tns) print("Connection successful!") except cx_Oracle.DatabaseError as e: error, = e.args print(f"DatabaseError: {error.message}") finally: if 'connection' in locals(): connection.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值