游乐游手机版
首页/数据库/文章详情

Oracle RAC报错ORA-12514的原因分析与修复方法

时间:2026-08-20 18:32
如何确认SCAN Listener是否已经真正监听新的IP地址?需要检查lsnrctl status LISTENER_SCAN1命令输出中Listening Endpoints Summary里的IP是否已经变成新的SCAN地址。如果依然显示旧IP,就说明GI还没有同步DNS变更。此时可以执行sr

如何确认SCAN Listener是否已经真正监听新的IP地址?需要检查lsnrctl status LISTENER_SCAN1命令输出中Listening Endpoints Summary里的IP是否已经变成新的SCAN地址。如果依然显示旧IP,就说明GI还没有同步DNS变更。此时可以执行srvctl stop scan + srvctl start scan,或者使用srvctl modify scan -n rac-scan刷新配置,随后再核对srvctl config scan、nslookup rac-scan以及crsctl stat res -t | grep scan的结果是否一致。

Oracle RAC出现ORA-12514如何修复

确认SCAN Listener是否真正监听新IP

在Oracle RAC环境中,ORA-12514报错通常与SCAN IP变更后服务注册未及时更新有关。首先执行lsnrctl status LISTENER_SCAN1(也可以检查LISTENER_SCAN2等)命令,重点查看输出里的Listening Endpoints Summary部分,确认其中的IP是否已经是新的SCAN地址。如果这里仍显示旧IP(例如192.168.10.101:1521),通常说明GI尚未完成DNS变更同步。

接着验证DNS解析是否正确:执行nslookup rac-scan(替换成你的实际SCAN名称),确认返回的是新的IP地址;再检查GI网络资源配置:srvctl config scan。如果该命令输出的仍然是旧IP,就需要手动刷新GI网络配置:

  • 执行srvctl stop scan + srvctl start scan
  • 或者更彻底地使用srvctl modify scan -n rac-scan(强制触发DNS重新解析)
  • 再通过crsctl stat res -t | grep scan检查,确认所有ora.scan*.vip状态均为ONLINE

检查REMOTE_LISTENER参数是否指向当前SCAN

RAC实例通过REMOTE_LISTENER参数决定向哪个SCAN Listener注册数据库服务。如果该参数仍然指向旧的SCAN名称或旧IP,LREG进程就会持续向错误地址发送注册请求,最终导致服务看似已注册但实际无法正常响应。

登录任意一个数据库节点后,执行:

SELECT value FROM v$parameter WHERE name = 'remote_listener';

如果返回结果不是当前使用的SCAN全名(例如rac-scan:1521),应立即修正:

  • ALTER SYSTEM SET remote_listener='rac-scan:1521' SCOPE=BOTH;
  • 重启实例,或至少执行ALTER SYSTEM REGISTER;以触发立即注册
  • 注意:不要直接填写IP,必须使用SCAN主机名,这是Oracle RAC动态注册正常工作的基础

验证服务是否完成远程注册

即使SCAN Listener已经启动且REMOTE_LISTENER配置正确,数据库实例仍可能因为LREG进程异常、网络策略限制或通信拦截而导致注册失败。因此,还需要直接验证服务注册结果。

在任意节点执行lsnrctl status LISTENER_SCAN1,查看Services Summary中是否已经出现你的服务名(例如ORCL),并确认其后带有(DYNAMIC)标识。如果服务名存在但实例数为0,表示注册请求已经到达监听器但被拒绝;如果完全没有显示该服务,则说明注册请求根本没有到达SCAN Listener。

这时建议重点检查:

  • 防火墙是否已经放通SCAN Listener端口(默认1521)的UDP和TCP双向通信
  • tail -f $ORACLE_HOME/rdbms/log/alert_*.log中是否出现* SERVICE_REGISTRATION *注册成功记录
  • 是否存在ORA-00604或ORA-12537等前置报错影响服务注册流程

避免误用静态注册覆盖动态机制

在Oracle RAC环境中,不建议在listener.ora里为数据库实例添加SID_LIST_LISTENER静态注册条目。这类配置容易与LREG动态注册机制发生冲突,导致监听器同时识别到同名服务的静态与动态版本,并优先响应静态注册;而RAC实例本身并不依赖静态路径,最终就会出现“服务已注册但仍无法连接”的现象。

检查$GRID_HOME/network/admin/listener.ora(注意不是Oracle Home目录下的配置文件):

  • 删除所有包含SID_DESC、GLOBAL_DBNAME、SID_NAME的配置块
  • 仅保留包含LISTENER_SCAN和LISTENER的最简配置
  • 执行srvctl reload scan_listener,不要使用lsnrctl reload(该方式通常不会生效)

Oracle RAC中的服务注册完全依赖REMOTE_LISTENER、DNS解析以及GI网络资源之间的联动机制,任何绕过这套标准流程的手工配置,都可能带来不可预期的问题并影响连接稳定性。

来源:https://www.php.cn/faq/3019765.html
上一篇Oracle如何撤销用户对指定表的访问权限 下一篇低版本Redis中Lua脚本兼容性实现与适配方案
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis是什么:核心特性、架构与应用场景解析
数据库 · 2026-09-01

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

Windows 安装 MongoDB 完整图文教程
数据库 · 2026-09-01

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动
数据库 · 2026-09-01

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

MacOS安装MongoDB完整教程
数据库 · 2026-09-01

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

Ubuntu系统安装与配置Redis完整指南
数据库 · 2026-09-01

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。