Navicat连接Oracle 19c必须满足三要素:OCI客户端版本匹配(需官网Instant Client 19c)、Navicat与oci.dll位数一致(同为64位)、服务名严格正确(如orclpdb,非SID或CDB名),缺一即报ORA-12154等错误。
Navicat 连接 Oracle 19c 不是填完地址密码就能通的,**必须配对 OCI 客户端、位数一致、服务名正确,三者缺一不可**。多数失败不是配置错,而是环境没对齐。
OCI 库路径必须手动指定且版本匹配
navicat 自带的 oracle 驱动只支持老版本(如 11g),连接 19c 必须用 oracle 官方 instant client。不配这个,点“测试连接”会直接报 ora-12154: tns:could not resolve the connect identifier 或更模糊的“无法初始化 oci”。
- 去 Oracle 官网下载
instantclient-basic-windows.x64-19.21.0.0.0.zip(推荐 19c 对应的 19.21 版,兼容性最稳) - 解压到纯英文路径,例如
C:\instantclient_19,确认里面有oci.dll - Navicat 中:工具 → 选项 → 环境 → OCI 库 → 浏览指向该目录下的
oci.dll - 关键检查项:Navicat 是 64 位?Oracle 19c 是 64 位?Instant Client 必须同为 64 位,混用必失败
服务名(Service Name)不能填 SID
Oracle 19c 默认启用多租户(CDB/PDB),tnsnames.ora 和 Navicat 里填的必须是 service_name,不是旧式 SID。填错会报 ORA-12514: TNS:listener does not currently know of service requested in connect descriptor。
- 登录服务器,用
sqlplus / as sysdba执行:SELECT value FROM v$parameter WHERE name = 'service_names'; - 常见返回是
orclpdb或ORCLPDB(注意大小写,Navicat 区分) - 如果查不到,说明 PDB 没 open,执行:
ALTER PLUGGABLE DATABASE ORCLPDB OPEN; - Navicat 连接界面中,“服务名”字段填这个值,**不要填
ORCL或orcl(那是 CDB 名,不是服务名)**
用户权限和角色要显式指定 SYSDBA(仅限 system/sys)
用 system 或 sys 登录时,Navicat 默认以普通用户身份连接,但这两个账号需要 SYSDBA 权限才能跨容器操作或查看系统视图。不设会报 ORA-01031: insufficient privileges。
- 新建连接 → “高级”选项卡 → “角色”下拉框选
SYSDBA - 普通业务用户(如自己建的
pmbook2)不需要勾选,否则反而连不上 - 确保该用户已解锁且密码正确:
ALTER USER pmbook2 ACCOUNT UNLOCK;,ALTER USER pmbook2 IDENTIFIED BY 新密码; - 如果用的是 PDB 用户,连接前必须确认当前容器是 PDB:
SHOW CON_NAME返回ORCLPDB才算到位
监听器和防火墙常被忽略但决定连接成败
所有客户端配置都对了,lsnrctl status 查不到服务名,或 Windows 防火墙拦了 1521 端口,照样连不上。这不是 Navicat 的问题,是服务端没通。
- 服务器上运行:
lsnrctl status,输出里必须有你填的服务名(如orclpdb),且状态为READY - 若没有,编辑
$ORACLE_HOME/network/admin/listener.ora,确保HOST值是服务器真实 IP(不是localhost或127.0.0.1) - Windows 防火墙 → 允许应用通过防火墙 → 勾选
OracleOraDB19Home1TNSListener,或手动放行 TCP 1521 端口 - 远程连接时,主机字段填服务器局域网 IP(如
192.168.1.100),别填localhost











