ORA-28547:connection to server failed 的问题分析与解决
描述
navicat连接oracle数据库异常,报错
ORA-28547: connection to server failed,probable Oracle Net admin error.
这里是由于客户端 Oci.dll版本不对 导致的。
过程
连接信息
# 内网地址
oracle:192.168.XXX.XXX 实例:OXX 用户名/密码:USER/PASSWORD
# nginx转发tcp端口,公司通过公网地址访问
1xx.xxx.xxx.xxx 1xxxx通过navicat连接oracle报错
连接类型: Basic
主机:1xx.xxx.xxx.xxx
端口:1xxxx
服务名:OXX
类型:服务名
用户名:USER
密码:PASSWORD连接失败,提示
ORA-28547: connection to server failed,probable Oracle Net admin error.原因
参考:使用NAVICAT连接Oracle数据库出现错误ora-28547:连接服务器失败,可能是Oracle Net admin错误
Oci.dll版本不对。因为Navicat是通过Oracle客户端连接Oracle服务器的,而Oracle的客户端分为两个,一个标准版,一个精简版,也就是Oracle Install客户端。我们在使用Navicat的时候,一般会在自己的安装路径下包含多个版本的OCI,而如果使用Navicat连接Oracle服务器出现ORA-28547错误,大部分都是因为NAVICAT本地的OCI版本和Oracle Server服务器不匹配导致的。所以我们要做的就是下载与我们安装的Oracle服务器匹配的OCI。
OCI:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
另外需要注意的是,oracle9i以上版本,需要安装install Client11以下版本,Oracle8或8i server,需要安装install CLIENT10以下版本。这个没什么大问题,因为我们现在用的都是Oracle 10或11,只要小心一点就行。
然后在Navicat中进行配置,选择Tools-Options
然后在左侧选项卡中选择 other-oci。
在 OCI 库中,找到刚刚下载的文件夹中的 Oci.dll。
这样就完成了Navicat的配置,并且让Navicat中的Oci.dll版本和Oracle中的版本一致,需要重启navicat才能生效。这样整个配置就完成了。
解决方法
1.下载oracle的basic包
windows 64 下载地址
https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
这里的电脑是windows,64位,oracle的版本不清楚,这里从最小版本开始尝试,下载instantclient-basic-win64-10.2.0.5.zip
解压后的目录是instantclient_10_2
里面包含一些dll文件和java文件,oci.dll就在其中
2.调整navicat的ocr.dll版本
navicat -> 工具 -> 选项 -> 环境 -> OCI环境 -> OCI library(oci.dll)
之前是:
D:\Program Files\PremiumSoft\Navicat Premium 16\instantclient_11_2\oci.dll
这里将下载解压后的的文件instantclient_10_2 放在了 D:\Program Files\PremiumSoft\Navicat Premium 16 目录中
所以这里选择了:
D:\Program Files\PremiumSoft\Navicat Premium 16\instantclient_10_2\oci.dll
确认保存即可
3.重启navicat后测试连接
修改oci.dll后需要重启navicat才能生效,这里关闭navicat,重新打开navicat
再次尝试连接,正常连接