Oracle - 连接发生 ERROR: ORA-12560: TNS: 协议适配器错误

本文详细介绍了在使用Java连接Oracle数据库时遇到的ORA-12514和ORA-12560错误的解决过程。通过检查监听器状态和服务是否正确启动,最终成功解决了连接问题。

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

今天使用Java连接Oracle时,程序抛出SQLException:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
 
	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at sql.Oracle.getConn(Oracle.java:23)
	at sql.Oracle.query(Oracle.java:55)
	at sql.Test.main(Test.java:8)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

从出错log中我们可以看出,ORA-12514 是因为监听器拒绝了连接。

发生这样的原因大致有两种,一个是监听器没有打开,一个是服务名出错。

考虑到我们昨天代码执行正常,所以第二种情况可以排除。

为了证明我们车猜想,我们打开SQL*Plus,尝试连接

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 10月 14 09:14:19 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

请输入用户名:  system
输入口令:
ERROR:
ORA-12560: TNS: 协议适配器错误

错误代码更新为:ORA-12560 :TNS :协议适配器错误。

发生这个问题 :原因也有三个。监听器问题,实例问题,以及注册表问题。

注册表,如果大家没有随意修改,应该不会有错。

对于前两者问题,我们则有比较简单有效的办法。

打开服务。

对Oracle开头的服务全部启动。

 

再次尝试连接,成功。

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 10月 14 09:14:19 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

请输入用户名:  system
输入口令:
ERROR:
ORA-12560: TNS: 协议适配器错误


请输入用户名:  system
输入口令:

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

 

### ORA-12560 TNS 协议适配器错误的原因及解决方法 ORA-12560 错误通常表示客户端与 Oracle 数据库之间的网络通信存在问题。以下是该错误可能的原因及其对应的解决方案: #### 可能原因 1:TNS 配置文件 (tnsnames.ora) 设置不正确 如果 `tnsnames.ora` 文件中的配置项有误,或者未正确定义目标数据库的服务名或主机地址,则可能导致此错误[^1]。 ##### 解决方案: 检查并确认 `tnsnames.ora` 文件的内容是否正确无误。确保服务名称、IP 地址以及端口号均匹配实际的数据库环境。例如: ```plaintext MYDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name_or_ip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service_name) ) ) ``` --- #### 可能原因 2:监听程序未启动或配置异常 Oracle 的监听程序负责接收来自客户端的连接请求。如果监听程序未运行或其配置文件 (`listener.ora`) 存在问题,则会引发此类错误[^2]。 ##### 解决方案: 验证监听程序的状态,并重新加载或重启它以应用最新的更改。 1. 使用以下命令检查监听状态: ```bash lsnrctl status ``` 2. 如果发现监听未启动,可以尝试启动监听: ```bash lsnrctl start ``` --- #### 可能原因 3:权限不足或其他操作系统层面的因素 某些情况下,由于防火墙阻止了特定端口上的流量,或是用户的访问权限受限,也可能导致 ORA-12560 错误发生[^3]。 ##### 解决方案: - 确认防火墙规则允许通过指定的端口(默认为 1521)进行通信。 - 检查当前用户是否有足够的权限执行相关操作。 --- #### 可能原因 4:恢复区域空间不足 当数据库的闪回恢复区 (`db_recovery_file_dest_size`) 容量耗尽时,可能会间接触发 ORA-12560 错误[^4]。 ##### 解决方案: 增加恢复区域的空间大小或将不必要的旧归档日志移除。 1. 修改参数以扩展存储容量: ```sql ALTER SYSTEM SET db_recovery_file_dest_size=NEW_SIZE_IN_BYTES SCOPE=BOTH; ``` 2. 删除过期的归档日志文件: ```sql RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; ``` --- ### 总结 针对 ORA-12560 错误,应逐一排查上述提到的各种可能性。具体措施包括但不限于校验 TNS 名称解析配置、激活监听进程、调整系统安全策略以及优化资源管理等方面的工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值