Navicat 连接 Oracle RAC 必须配置 OCI(oci.dll)并使用 TNS 模式,不可用 Basic 模式;需下载匹配版本的 Instant Client,设置 TNS_ADMIN 指向含 tnsnames.ora 的目录,TNS 描述符或别名中必须包含正确的 SERVICE_NAME 及多节点地址。
Navicat 连接 Oracle RAC 需要 OCI 支持,不是填个地址就能连
navicat 默认不带 oracle 客户端能力,连接 rac 前必须先配置好 oci.dll。rac 不是单实例,它依赖 tns 名称解析和负载均衡机制,仅靠 basic 模式填主机+端口+sid 会直接失败——因为 rac 没有固定 sid,服务名才是关键入口。
你得先下载匹配位数(32/64)和 Oracle 版本的 Oracle Instant Client Basic,解压后记住路径,比如 C:\oracle\instantclient_21_10。这个路径后续要填进 Navicat 的 OCI 设置里。
常见错误现象:ORA-12154: TNS:could not resolve the connect identifier specified 或直接提示 “OCI library not found”。前者说明 TNS 解析失败,后者说明 Navicat 根本没加载 oci.dll。
必须用 TNS 连接方式,不能选 Basic
RAC 的连接字符串本质是 TNS 描述符,包含多个节点地址、failover、load balancing 等策略。Navicat 的 Basic 模式只支持单地址+SID,无法表达 RAC 的高可用结构。
操作步骤:
- 在 Navicat 新建连接时,连接类型选 TNS(不是 Basic)
- “TNS” 输入框里填完整 TNS 描述符,例如:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=node1.example.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=node2.example.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=racdb.example.com)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC))))
- 用户名、密码照常填写;服务名字段留空(TNS 描述符里已含
SERVICE_NAME) - 测试前确保本地能解析
node1.example.com和node2.example.com(检查C:\Windows\System32\drivers\etc\hosts或 DNS)
TNS 名称可简化:用本地 tnsnames.ora 文件
手写长串 TNS 描述符容易出错。更稳妥的方式是复用 Oracle 官方推荐的 tnsnames.ora 文件。
做法:
- 把服务器上的
tnsnames.ora(通常在$ORACLE_HOME/network/admin/)复制到本地,比如存为C:\oracle\network\admin\tnsnames.ora - 在 Navicat 的 TNS 连接中,“TNS” 输入框直接填别名,如
RACDB(对应文件里RACDB = (DESCRIPTION=...的开头) - Navicat 会自动读取该文件——前提是已在「工具 → 选项 → 环境」中正确设置了
TNS_ADMIN路径为C:\oracle\network\admin - 注意:
TNS_ADMIN必须指向包含tnsnames.ora的**父目录**,不是文件本身
连接测试失败时优先查这三处
RAC 连接失败往往不是 Navicat 问题,而是环境链断了一环:
-
oci.dll路径是否指向 Instant Client 解压目录下的oci.dll?路径里不能有中文或空格 - Instant Client 版本是否与数据库主版本一致?比如 Oracle 19c 数据库,建议用 Instant Client 19.x,混用 21.x 可能导致
ORA-24315: invalid attribute type - 防火墙是否放行两个节点的 1521 端口?RAC 客户端可能随机连接任一节点,只开一个节点的端口会导致间歇性失败
真正麻烦的点在于:TNS 描述符里的 SERVICE_NAME 必须和 RAC 实际注册的服务名完全一致(区分大小写),而这个值通常由 DBA 配置,不是默认的 ORCL。如果不确定,让 DBA 提供 lsnrctl status 输出里的 Service "xxx" 行。


















