为什么Java程序连接Oracle时会提示ORA-12514错误?

落涛君_9229

落涛君_9229

2026-09-08

820人浏览

原创

ora-12514错误本质是oracle监听器未注册客户端请求的服务名,需确保jdbc url中的service_name与v$parameter.service_names值严格一致,并通过lsnrctl status/services确认监听器已运行且服务已注册(含rac环境的local_listener和remote_listener配置)。

为什么java程序连接oracle时会提示ora-12514错误?

Java连接Oracle报ORA-12514,本质是监听器“没看见”你请求的服务名

这个错误不是Java或驱动的问题,而是Oracle监听器在说:“你告诉我要连叫XE(或ORCL、orclpdb1)的服务,但我压根没注册过这个名字”。客户端URL里写的SERVICE_NAME或SID,必须和监听器当前已知的服务完全一致——大小写、拼写、甚至是否带域名都不能错。

检查JDBC URL里的服务标识是否匹配监听器实际注册的服务

Java用的是jdbc:oracle:thin:@//host:port/service_name这种格式时,service_name部分必须和数据库里v$parameter.service_names查出来的值严格一致。如果连的是PDB(Oracle 12c+),service_name通常不是实例名(如ORCL),而是PDB名(如orclpdb1)。

  • 先登录数据库执行:SELECT value FROM v$parameter WHERE name = 'service_names';,记下返回值(比如orclpdb1)
  • 确认你的JDBC URL中//47.97.11.138:1522/XE里的XE是否等于上面查到的值;不等就立刻改掉
  • 如果用的是@host:port:sid老格式(如@47.97.11.138:1521:orcl),得确保监听器的listener.ora里有对应SID_DESC静态注册,且GLOBAL_DBNAME与SID_NAME都设对了
  • Linux/Unix环境下注意大小写敏感;Windows下虽不敏感,但跨平台部署时仍建议统一用小写或大写保持一致

监听器状态和服务注册是否就绪,Java无法绕过这个环节

即使URL写对了,如果监听器没运行、或服务还没来得及注册上去,Java照样报ORA-12514。这不是重试几次就能解决的“临时抖动”,而是基础链路缺失。

Crypto Sniper Oracle
Crypto Sniper Oracle

机构级量化市场预言机,提供订单簿失衡(OBI)、VWAP分析、自动化报告及Telegram预警。

下载
  • 在数据库服务器上跑:lsnrctl status,看输出里有没有你的服务名,状态是不是READY
  • 如果没出现,再跑:lsnrctl services,确认服务是否以(DYNAMIC)方式注册;没有就说明PMON没完成注册,常见于刚启库后几秒内
  • 手动触发注册:ALTER SYSTEM REGISTER;(需DBA权限),然后等10秒再试
  • 若lsnrctl status直接报TNS-12541,说明监听器根本没启:lsnrctl start

RAC环境要额外盯住local_listener和remote_listener配置

单机库出ORA-12514,大概率是URL或监听器问题;RAC下八成是local_listener指向了localhost或物理IP,导致实例只往本地监听器注册,而Java连的是SCAN地址,自然找不到服务。

  • 查当前设置:SHOW PARAMETER local_listener;,如果是空值或(HOST=localhost),立刻修正
  • 正确值应为本节点VIP+端口,例如:(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521)))
  • 再查SHOW PARAMETER remote_listener;,它必须指向SCAN全名(如scan-cluster.example.com:1521),不能是IP
  • 改完后执行:ALTER SYSTEM REGISTER;,再用lsnrctl status LISTENER_SCAN1确认服务是否出现在Services Summary里

最容易被忽略的是:监听器日志($ORACLE_HOME/network/log/listener.log)里那句Service "xxx" has been registered——没看到这行,就别急着改Java代码。注册延迟、VIP解析失败、防火墙拦1521端口,都可能让这行永远不出现。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9577

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6742

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

5972

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1044

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

868

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1256

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2509

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19851

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1135

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程