Azure部署Oracle Server连接报ORA-12514错误求排查方案
ORA-12514错误排查方案
ORA-12514错误和网络连通性、防火墙无关,核心是Oracle监听器未识别到应用连接串中指定的服务名,可按以下步骤依次排查:
步骤1:确认监听器已注册的服务列表
登录Oracle所在的Linux服务器,切换到oracle用户,执行命令:lsnrctl status
查看输出末尾的Services Summary段落,核对列出的服务名是否和应用连接串中填写的服务名完全一致(注意区分大小写)。
注意:不要混淆服务名(SERVICE_NAME)和实例ID(SID),大部分用户报错都是误将SID填到了连接串的服务名位置。
步骤2:修复服务未注册问题
如果步骤1中没有找到你需要的服务名,可选以下两种方案配置:
方案A:配置动态注册
- 以管理员身份登录数据库:
sqlplus / as sysdba - 手动触发服务注册:
alter system register; - 等待60秒后重新执行
lsnrctl status查看服务是否出现。如果仍未出现,检查local_listener参数配置:
show parameter local_listener; -- 若参数为空或指向地址错误,执行以下修改,替换为你Oracle服务器的实际IP alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.x.x)(PORT=1521))' scope=both; -- 重新触发注册 alter system register;
方案B:配置静态注册(更稳定,适合固定对外提供服务的场景)
- 编辑监听器配置文件
$ORACLE_HOME/network/admin/listener.ora,添加以下内容:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = 对外暴露的服务名,可自定义,需和连接串一致) (ORACLE_HOME = 你的Oracle安装路径,示例:/u01/app/oracle/product/19c/dbhome_1) (SID_NAME = 数据库实例SID,示例:orcl) ) )
- 重启监听器生效:
lsnrctl restart - 执行
lsnrctl status确认静态服务已注册。
步骤3:核对应用连接串配置
以JDBC连接串为例,正确的服务名连接格式为:jdbc:oracle:thin:@//<Oracle服务器IP>:1521/<服务名>
不要使用SID格式的连接串:jdbc:oracle:thin:@<Oracle服务器IP>:1521:<SID>
补充:你已经正确开放了1521端口,且连通性测试正常,不需要关闭Linux端防火墙,关闭防火墙反而会带来安全风险。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

