ORA-12560报错时,OracleService显示“正在运行”不等于实例真在运行,必须验证任务管理器中是否存在匹配SID的oracle.exe进程;若进程缺失或SID不匹配、注册表与环境变量ORACLE_SID不一致、BEQ连接受sqlnet.ora干扰、或21c未正确注册服务,均会导致该错误。
OracleService服务是否真的在运行
ora-12560 报错时,很多人打开 services.msc 看到 oracleserviceorcl(或你自定义的 sid 名)显示“正在运行”,就以为没问题——但实际可能只是服务状态卡在假启动。windows 服务管理器有时会缓存状态,或服务进程已崩溃但 windows 还没更新 ui 显示。
真正判断依据是:任务管理器中是否存在 oracle.exe 进程,且其命令行参数包含你的 SID。可右键任务管理器 → “详细信息” → 查看所有用户的进程 → 搜索 oracle.exe,双击查看“命令行”列。若没有、或命令行里 SID 不匹配(比如显示 -ora ORA19C 但你期望的是 ORCL),说明实例根本没起来。
实操建议:
- 不要只信服务面板的“运行中”字样,必须验证
oracle.exe进程存在且参数正确 - 如果进程存在但连接仍失败,用
sqlplus / as sysdba尝试本地 BEQ 连接;若也报 ORA-12560,则基本排除监听问题,直指实例本身 - 检查 Windows 事件查看器 → Windows 日志 → 应用程序,筛选来源为
OracleService的错误事件,常有“无法读取控制文件”“参数文件缺失”等底层原因
ORACLE_SID 环境变量与注册表值是否一致
Oracle 21c 在 Windows 上默认不依赖 ORACLE_SID 环境变量,而是从注册表读取。但如果你手动设置了该变量,它会覆盖注册表值——而一旦两者不一致,sqlplus / as sysdba 或 oradim 工具就会连错实例,触发 ORA-12560。
关键路径是:HKEY_LOCAL_MACHINESOFTWAREORACLEKEY_ 下的 ORACLE_SID 字符串值。这个值必须和你启动服务时使用的 SID 完全一致(大小写敏感、无空格)。
实操建议:
- 运行
echo %ORACLE_SID%,如果输出非空,记下值;再打开注册表比对,不一致就删掉环境变量或修正注册表 - 多个 Oracle Home 共存时,
PATH中的bin目录顺序决定调用哪个oradim.exe,错误的顺序会导致创建/启动了别的 SID 实例 - 安装 Oracle 21c 后首次建库,推荐全程使用
dbca图形向导,避免手工执行oradim -new时拼错 SID 或漏写-startmode auto
监听服务(TNSListener)是否干扰了本地 BEQ 连接
ORA-12560 常被误判为“监听没开”,但它在本地 BEQ(Bequeath)连接场景下和监听完全无关。sqlplus / as sysdba 默认走 BEQ,绕过 TNS 协议栈,只依赖 Windows 命名管道和实例进程通信。此时即使 OracleOraDb21c_home1TNSListener 停着,也不该报这个错。
直播话术巡检系统(Windows版) — 实时语音转写、关键词检测、场景自动切换、告警推送、大屏可视化。支持 Windows VB-Cable 虚拟声卡音频采集,阿里云 ASR 实时识别。一键启动脚本,自动安装环境。
但如果 sqlnet.ora 中配置了 SQLNET.AUTHENTICATION_SERVICES = (NTS),且系统策略禁用了本地 NT 认证(如组策略关闭了“网络访问: 本地账户的共享和安全模型”),BEQ 通道就会退化失败,回退到尝试 TCP 连接,结果因监听未响应而抛出 ORA-12560。
实操建议:
- 临时重命名
%ORACLE_HOME% etworkdminsqlnet.ora,再试sqlplus / as sysdba;若成功,说明是sqlnet.ora配置干扰 - 确认
sqlnet.ora中没有NAMES.DIRECTORY_PATH强制启用 TNSNAMES 或 LDAP,这会让 BEQ 连接也去查tnsnames.ora - BEQ 连接要求客户端和数据库在同一台机器上,且用户属于
ora_dba组;检查net localgroup ora_dba输出是否含当前用户名
Oracle 21c 安装后实例未自动注册到服务列表
Oracle 21c 使用新的统一架构,安装程序默认可能不创建 Windows 服务,尤其当选择“仅软件”或“高级安装”时。此时 services.msc 里压根找不到 OracleService,但你又确信数据库已建好——这就是典型的服务注册遗漏。
不同于旧版本,21c 的 oradim 工具行为更严格:SID 必须全大写、不能含下划线或数字开头、且需显式指定 -startmode auto 才能注册为自启服务。漏掉任一条件,服务就创建失败,只留一个静默的数据库文件集。
实操建议:
- 以管理员身份运行 CMD,执行:
oradim -new -sid ORCL -startmode auto -spfile(注意ORCL全大写,且确保%ORACLE_HOME%指向 21c 路径) - 创建后立刻检查服务列表,若仍无,运行
sc query OracleServiceORCL;返回“不存在”说明注册失败,常见原因是 SID 非法或权限不足 - 安装完立刻运行
%ORACLE_HOME%inoradim -edit -sid ORCL -startmode auto补注册,比重装快得多
最常被忽略的一点是:Oracle 21c 的 BEQ 连接默认绑定到 Windows 命名管道 \.pipeORCL,而这个管道名严格等于 SID 字符串。哪怕注册表里 SID 是 orcl(小写),管道也叫 \.pipeorcl,但客户端工具内部硬编码按大写找——大小写不一致直接导致协议适配器找不到对应端点,稳稳报 ORA-12560。










