ora-12560 错误源于未连通 oracle 实例的 windows 服务层,主因是 oracleservicesid 服务未运行、oracle_sid 环境变量不匹配或 path 中 sqlplus 路径指向 instant client 而非服务端。

ORA-12560 不是 Navicat 配置错了,也不是 Oracle 密码或服务名填错了——它压根没走到验证那步。这个错误说明 Navicat 根本连不上本地 Oracle 实例的“操作系统级入口”,问题一定出在 Windows 服务、环境变量或客户端路径上。
检查 OracleServiceSID 服务是否运行
Navicat 本地连接(比如用 localhost 或空主机名 + / as sysdba 类似逻辑)依赖 Windows 服务,而不是监听器。ORA-12560 出现时,90% 的情况是这个服务停了。
- 按
Win+R→ 输入services.msc→ 回车 - 在服务列表里找形如
OracleServiceORCL、OracleServiceXE或你实际 SID 名称的服务(不是OracleOraDbXX_homeX TNSListener) - 如果状态是“已停止”,右键 → “启动”;如果是“正在运行”,建议先“重新启动”一次再试
- 启动后立刻在 CMD 中执行
sqlplus / as sysdba验证:能进SQL>就说明服务层通了,Navicat 也大概率能连上
确认 ORACLE_SID 环境变量是否匹配实例
Navicat 启动时会读取系统环境变量,若 ORACLE_SID 为空、拼错,或被其他 Oracle 安装覆盖,就会找不到对应服务,直接报 ORA-12560。
- 打开 CMD,运行
echo %ORACLE_SID%—— 如果输出为空、或不是你数据库的真实 SID(比如你实例叫ORCL,却显示TEST),就是它了 - 临时修复:在当前 CMD 中运行
set ORACLE_SID=ORCL(把ORCL换成你的 SID),再启动 Navicat - 永久修复:系统属性 → 高级 → 环境变量 → 系统变量 → 新建 → 变量名:
ORACLE_SID,变量值:ORCL - 注意:多实例共存时,第二个 Oracle 安装常会悄悄覆盖该变量;Instant Client 安装也可能干扰
验证 Navicat 调用的是服务端 sqlplus 而非 Instant Client
Navicat 底层有时会调用系统 PATH 中的 sqlplus 来做连接预检。如果 PATH 里 Instant Client 的 bin 目录排在服务端前面,它就会走网络协议路径而非本地 OS 认证,从而触发 ORA-12560。
- 在 CMD 中运行
where sqlplus,看返回路径是不是服务端目录(例如D:\app\oracle\product\12.1.0\dbhome_1\bin\sqlplus.exe) - 如果不是,说明 PATH 顺序有问题:进入系统环境变量,把服务端
bin目录(如D:\app\oracle\product\12.1.0\dbhome_1\bin)移到 Instant Client 路径之前 - 改完 PATH 后必须重启 Navicat(不是仅关闭连接窗口),否则缓存仍可能调用旧路径
- 注册表中
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDbXX_homeX\ORACLE_SID的值也应与你设置的环境变量一致,否则可能冲突
真正麻烦的不是服务没启,而是多个 Oracle 安装混在一起时,ORACLE_SID 和 PATH 的优先级谁覆盖谁、注册表 KEY 名是否对应正确——这些细节不手动查,只靠重启服务或重装 Navicat 是绕不过去的。











