ORA-28547:connection to server failed,probable Oracle Net admin error (DBD ERROR: OCISessionBegin)
The listener.ora file's SID_LIST section may INCORRECTLY contain a "PROGRAM" line and/or an "ENVS" line for all database instances.
For example, for a listener called LISTENER1 the following may be set for a "static" SID_LIST section:
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(SID_NAME = ORCL1)
(ORACLE_HOME = E:\app\oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:E:\app\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\app\oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:E:\app\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
In the example above, the first section contains the SID_NAME and ORACLE_HOME values for the Database instance required for connection to.
However, it also contains a PROGRAM and an ENVS value which will also attach to client connections through the SID_NAME Value.
This can result in Oracle*Net connection errors such as ORA-28547.
官方文档中提到只要去掉和实例名相关的那个SID_LIST中的PROGRAM和ENVS的条目。
解决方法:
打开【listener.ora】文件,去除PROGRAM和ENVS,重启监听或者重启Windows
重启后如果仍然无法连接,说明是navicat自带的instantclient版本和要连接的数据库的版本不一致,解决方法如下:
1)下载对应的oracle instantclient安装包,11g可以直接用云盘里下载好的,地址如下:
下载好后解压到navicat对应的目录下,例如我的目录:D:\Program Files (x86)\PremiumSoft\Navicat Premium 12, 然后在Navicat中配置一下,选择工具-选项:
然后选择左边选项卡中的环境-OCI环境:
选择解压位置的oci.dll,确定后重启navicat软件即可正常连接到oracle: