java.sql.SQLRecoverableException: Listener refused the connection with the following error.ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
时间: 2025-04-30 16:39:43 浏览: 77
### Oracle 数据库连接问题解决方案
当遇到 `java.sql.SQLRecoverableException` 和 `ORA-12514` 错误时,这通常意味着客户端尝试连接到指定的服务名或SID,而监听器并不知道该服务的存在。以下是详细的排查和解决方法:
#### 1. 验证监听器状态和服务注册情况
确保Oracle监听器正在运行并已成功启动所有必要的数据库实例。可以使用命令行工具来验证监听器的状态。
```bash
lsnrctl status
```
此命令会显示监听器当前所知的所有服务名称列表。如果目标服务未在此处列出,则可能是由于监听器配置文件(通常是`listener.ora`)中的设置不正确或者静态注册失败[^1]。
#### 2. 检查tnsnames.ora 文件配置
确认应用程序使用的连接字符串与服务器端的`tnsnames.ora`定义相匹配。对于JDBC URL来说,应该特别注意主机地址、端口号以及服务名部分是否准确无误。
例如,在提供的案例中,连接URL为:
```plaintext
.option("url", "jdbc:oracle:thin:@//47.97.11.138:1522/XE")
```
这里假设XE是有效的服务名,并且位于给定IP地址上的默认ORACLE_HOME环境中[^3]。
#### 3. 使用Easy Connect命名方式调整连接串
有时直接修改成更简单的易连格式也可以解决问题。比如改为如下形式试试看能否正常工作:
```plaintext
.option("url", "jdbc:oracle:thin:@hostname:port/service_name")
```
其中 hostname 是实际机器的名字而不是 IP 地址;service_name 应替换为你想要访问的具体数据库实例的服务名[^4]。
#### 4. 动态注册检查
某些情况下,即使监听器已经知道了某个特定的服务,但如果它不是动态向监听器注册的话也可能引发此类错误。可以通过重启对应的数据库实例让其重新注册至监听器上[^5]。
#### 5. 日志分析
最后但同样重要的是查看相关的日志记录——包括但不限于alert log、trace files等位置的信息可以帮助进一步诊断具体原因所在。
通过上述措施应当能够有效处理大部分由ORA-12514引起的无法建立数据库连接的情况。
阅读全文
相关推荐


















