从命令行成功连接数据库,但 Navicat 连接失败,通常由以下原因导致。请按顺序排查:
1. 监听器配置问题(最常见)
检查监听器状态:
lsnrctl status确认输出中是否包含您连接的服务名(如
orcl或PLM_TEST)。若无相关服务,需重新配置监听。手动注册服务(在 SQL*Plus 中执行):
ALTER SYSTEM REGISTER;
2. 连接类型不匹配
Navicat 需使用完整连接信息:
主机/IP: 数据库服务器地址(非localhost时需填真实IP) 端口: 1521(默认) 服务名/SID: orcl(根据实际填写)
示意图:Navicat 连接配置界面
3. 防火墙或网络限制
测试端口连通性(在客户端执行):
telnet 数据库IP 1521 # Windows需启用Telnet客户端若无法连通,需在服务器开放端口:
# Linux sudo firewall-cmd --add-port=1521/tcp --permanent sudo firewall-cmd --reload # Windows New-NetFirewallRule -DisplayName "Oracle" -Direction Inbound -Protocol TCP -LocalPort 1521 -Action Allow
4. 客户端配置缺失
配置 TNSNAMES.ORA(路径:
%ORACLE_HOME%\network\admin\tnsnames.ora):PLM_TEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) # 替换为实际服务名 ) )在 Navicat 中选择 "TNS" 连接方式,输入别名
PLM_TEST
5. 版本兼容性问题
- Oracle 11g 需在 Navicat 中启用 旧版认证:
Navicat 连接设置 → 高级 → 勾选 "Enable Oracle 10g R2 Authentication"
6. 权限问题
确保连接用户有远程登录权限:
GRANT CREATE SESSION TO PLM_TEST;
快速诊断脚本
在数据库服务器执行:
# 检查监听日志
tail -f $ORACLE_HOME/network/log/listener.log
# 捕获连接过程
lsnrctl set trc_level 16排查流程图
graph TD
A[Navicat连接失败] --> B{监听器状态?}
B -->|未运行| C[启动监听: lsnrctl start]
B -->|无服务| D[ALTER SYSTEM REGISTER]
B -->|正常| E{端口可访问?}
E -->|否| F[开放防火墙1521端口]
E -->|是| G{Navicat配置正确?}
G -->|主机/IP错误| H[使用服务器真实IP]
G -->|服务名错误| I[确认服务名: SELECT name FROM v$services]
G -->|协议错误| J[启用Oracle 10g R2认证]📌 关键提示:
若问题仍在,请提供以下信息进一步分析:
lsnrctl status完整输出- Navicat 报错截图(如 ORA-12154/ORA-12514)
- 服务器操作系统类型
- 数据库是否容器数据库(CDB)
C:\Users\Ericming>lsnrctl start
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-JUL-2025 14:29:20
Copyright (c) 1991, 2010, Oracle. All rights reserved.
TNS-01106: Listener using listener name LISTENER has already been started
C:\Users\Ericming>lsnrctl statu
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-JUL-2025 14:32:21
Copyright (c) 1991, 2010, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
Start Date 23-JUL-2025 18:29:23
Uptime 0 days 20 hr. 2 min. 58 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File C:\app\Ericming\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File c:\app\ericming\diag\tnslsnr\DESKTOP-KHT1N48\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-KHT1N48)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl.lan" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB.lan" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
C:\Users\Ericming>lsnrctl start
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-JUL-2025 14:29:20
Copyright (c) 1991, 2010, Oracle. All rights reserved.
TNS-01106: Listener using listener name LISTENER has already been started
C:\Users\Ericming>lsnrctl statu
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-JUL-2025 14:32:21
Copyright (c) 1991, 2010, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
Start Date 23-JUL-2025 18:29:23
Uptime 0 days 20 hr. 2 min. 58 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File C:\app\Ericming\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File c:\app\ericming\diag\tnslsnr\DESKTOP-KHT1N48\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-KHT1N48)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl.lan" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB.lan" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
构建联查语句
UPDATE "PLM_TEST1"."SA_USER" SET "DEFAULTGROUPGUID"='F026619914C946F398652C5EAC9F19D2' WHERE "USERID"='heyuming';
COMMIT;
UPDATE "PLM_TEST1"."SA_USER" SET "DEFAULTROLEGUID"='831BA48E898A4C56847CAA34467E1489' WHERE "USERID"='heyuming';
COMMIT;
UPDATE "PLM_TEST1"."SA_USER" SET "CREATEUSERGUID"='ADAA20C87CAB450ABAC48DBBD00D863A' WHERE "USERID"='heyuming';
COMMIT;
ADAA20C87CAB450ABAC48DBBD00D863A
FBB1495693AE4DB4B08346BE47C06D0B
9BCFDFAE839D4979B2D9E75B40F1EB4C
A4E1F9DC98A54D2D9F2D34F2EA2BC341
UPDATE "PLM_TEST1"."SA_GROUPROLE_USER" SET "ROLEGROUPGUID"='A4E1F9DC98A54D2D9F2D34F2EA2BC341' WHERE "USERGUID"='C25CD3712CEF4DBE96510179D1CEE2A7';
select GUID,MD_ID FROM BOMVIEW_0 where MD_ID='CN230XDT0001';
1
SELECT GUID, MD_ID
FROM BOMVIEW_0
WHERE MD_ID = 'CN230XDT0001';
2
SELECT VIEWFK, END2$MASTER
FROM BOMSTRUCTURE_0
WHERE VIEWFK IN (上一步查询得到的GUID值);
或者
SELECT VIEWFK, END2$MASTER
FROM BOMSTRUCTURE_0
WHERE VIEWFK IN (
SELECT GUID -- 仅返回单列
FROM BOMVIEW_0
WHERE MD_ID = 'CN230XDT0001'
)
3
SELECT MD_NAME, MD_ID
FROM ITEM_0
WHERE GUID IN (上一步查询得到的END2$MASTER值);
或者
SELECT MD_NAME, MD_ID
FROM ITEM_0
WHERE MASTERFK IN (SELECT END2$MASTER
FROM BOMSTRUCTURE_0
WHERE VIEWFK IN (
SELECT GUID -- 仅返回单列
FROM BOMVIEW_0
WHERE MD_ID = 'CN230XDT0001'
)
);
评论