使用 Navicat 远程连接 Oracle 11g 报错:
ORA-28547: connection to server failed, probable Oracle Net admin error
这个错误意味着 Oracle 客户端在通过 Net 服务连接数据库时失败了,可能是由于 TNS 配置错误、监听器未配置或网络通信异常等原因。下面是详细的排查和解决步骤。
✅ 一、推荐使用 Navicat 的 Basic 连接模式
Navicat 支持三种连接方式,强烈推荐用 Basic 模式 来避免依赖 TNS 配置。
连接方式:Basic(推荐)
打开 Navicat → 新建 Oracle 连接 → 选择 连接类型:Basic:
字段 | 示例 |
---|---|
Host Name | 远程 IP (如:192.168.1.100) |
Port | 1521 (Oracle 默认端口) |
Service Name | orcl (与你数据库的实际 service name 保持一致) |
User Name | 如 scott 或 system |
Password | 用户密码 |
点击 “测试连接”,应能连接成功。
❌ 二、使用 TNS 连接模式时易触发 ORA-28547
如果你使用的是 Navicat 的 TNS 模式,则需确认本机已正确安装并配置 Oracle 客户端,包括:
1. 安装 Oracle Instant Client(或 Full Client)
- Oracle 客户端必须与你的 Navicat 位数一致(64 位 vs 32 位)
- 建议使用 Instant Client + 配置 tnsnames.ora
2. 配置 tnsnames.ora
位置示例(Windows):
C:\oracle\instantclient_19_11\network\admin\tnsnames.ora
内容示例:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
注意:SERVICE_NAME 和你的数据库实际
show parameter service_names
一致。
3. 设置环境变量
添加系统环境变量(如果使用 TNS 模式):
TNS_ADMIN=C:\oracle\instantclient_19_11\network\admin
✅ 三、Oracle 服务器端的检查步骤
在远程 Oracle 11g 主机上,确认以下配置:
1. 确保监听器正常运行
lsnrctl status
如果未启动:
lsnrctl start
2. 检查监听器是否监听了正确的服务名(listener.ora)
$ORACLE_HOME/network/admin/listener.ora
中应包含:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(GLOBAL_DBNAME = orcl)
)
)
如果你数据库实际使用的是 Service Name(而非 SID),建议也配置 GLOBAL_DBNAME
3. 检查 Oracle 是否启用了远程连接
登录 SQLPlus,执行:
show parameter remote_login;
应看到:
remote_login_passwordfile EXCLUSIVE
如果是 NONE
,可能会有认证问题。
4. 防火墙配置
确保 Oracle 的监听端口(默认 1521)未被防火墙屏蔽:
telnet 192.168.1.100 1521
如果不能连接,请在远程主机上开放端口或关闭防火墙测试:
sudo ufw disable # Ubuntu
sudo systemctl stop firewalld # CentOS/RHEL
✅ 四、验证连接是否正常
- 使用 SQLPlus 本地连接:
sqlplus scott/tiger@//192.168.1.100:1521/orcl
- 使用
tnsping
工具:
tnsping orcl
✅ 五、Navicat 推荐配置方式(避开 TNS)
最稳定的方法是:Basic 模式 + 使用 Service Name + 指定 IP 和端口
✅ 六、总结快速排查表
检查项 | 操作 |
---|---|
Oracle 监听器是否正常 | lsnrctl status |
监听端口是否开放 | telnet ip 1521 |
Navicat 是否用 Basic 模式 | 是,避免用 TNS |
服务名是否正确 | 用 show parameter service_names 确认 |
是否用了 TNS 配置 | 检查 tnsnames.ora 是否匹配 |
客户端是否与 Navicat 位数一致 | 64 位 Navicat → 64 位 Oracle Client |
如果你仍然无法解决,请提供以下信息,我可以进一步协助你排查:
- Navicat 版本(32 位 or 64 位)
- Oracle 数据库版本
- 你是用 Basic 还是 TNS 模式连接?
- 报错截图或配置截图
我可以根据你的实际环境写一个精准配置方案。
发表回复