最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Navicat连接Oracle时服务名和SID如何选择
时间:2026-08-10 17:28:49 编辑:袖梨 来源:一聚教程网
应根据Oracle版本和监听器注册信息选择:12c及以上多租户环境优先填服务名(如ORCLPDB1),仅当lsnrctl status显示SID且无服务名时才填SID(如ORCL);填错导致ORA-12514等错误,需通过lsnrctl status确认实际注册名称。
服务名(Service Name)和SID在Navicat连接中的实际区别
服务名和SID不是可互换的别名,它们指向数据库的不同抽象层级:SID标识一个具体的数据库实例(比如ORCL),而服务名是Oracle监听器对外暴露的逻辑服务标识(比如ORCLPDB1或orcl.example.com)。从Oracle 12c起,尤其启用多租户(CDB/PDB)后,绝大多数新部署默认只注册服务名,不注册SID。直接填SID反而会连不上。
Navicat里该填Service Name还是SID?看你的Oracle版本和部署模式
判断依据不是“习惯”或“教程示例”,而是你实际数据库的监听状态。最可靠的方法是登录服务器执行:
lsnrctl status
观察输出中Services Summary部分:
- 如果看到类似
Service "ORCLPDB1" has 1 instance(s)—— 填ORCLPDB1(服务名) - 如果看到
Instance "ORCL", status READY且没有服务名条目 —— 才考虑填ORCL(SID) - 若两者都存在,优先用服务名;SID仅用于兼容旧应用或非CDB环境
填错服务名/SID时的典型报错和快速验证法
常见错误信息包括:ORA-12514: TNS:listener does not currently know of service requested in connect descriptor 或 Navicat提示“连接超时”但用户名密码无误。这时不要反复试错,立刻做两件事:
- 确认监听器是否运行:
lsnrctl status,若提示“TNS-12541: No listener”,先启动监听:lsnrctl start - 检查服务名拼写是否完全一致(区分大小写、空格、域名后缀),例如
ORCL≠orcl≠ORCL.local - 临时切换连接类型为
TNS,手动配置tnsnames.ora,把服务名/SID封装进别名,绕过Basic模式的字段歧义
OCI版本不匹配会让服务名/SID选择失效
即使服务名填对,若Navicat加载的oci.dll版本与Oracle服务器不兼容(比如用10g的oci.dll连19c数据库),会出现Cannot create oci environment或静默失败。这不是服务名问题,但会让人误以为填错了。
- Oracle 12c及以上建议使用同版本Instant Client的
oci.dll(如12.1.0.2或19.21.0.0) - Navicat Premium 16+ 内置了较新OCI,但若手动指定了路径,务必核对文件版本:
右键oci.dll → 属性 → 详细信息 → 文件版本 - 64位Navicat必须配64位
oci.dll,混用必报Access violation
lsnrctl status,比反复修改Navicat表单快得多。
相关文章
- 迅捷 FWR310 无线路由器端口映射设置指南 08-11
- 迅捷 FW150R 无线路由器端口映射设置指南 08-11
- 迅捷 FWD105 无线路由器一体机WDS桥接设置 08-11
- 迅捷 FW325R 无线路由器IP与MAC地址绑定设置 08-11
- 方舟生存进化琥珀获取指南 08-11
- 迅捷 FW150R 无线路由器作为交换机设置 08-11