共计 1485 个字符,预计需要花费 4 分钟才能阅读完成。
在使用 navicat 上连接 Oracle 正确用户名和密码,oracle 常用服务也启动的情况下依然无法建立连接。但是 sqlPus 上输入用户名和密码可以连接通过,百思不得其解(菜鸟本质 好奇)。
这种情况下查看了 navicat 的历史日志:ORA-12514: TNS:listener does not currently know of service requested in connect。
通过网上搜索查到说 navicat 工具是 32 位,oracle64 位不匹配,心想很有可能是这原因。因此通过博友给出的路径 http://www.oracle.com/technetwork/topics/winsoft-085727.html 下载到 instantclient-basic-nt-11.2.0.3.0.zip (51,149,941 bytes) 解压(对于需要到的资料记住目录)。但是在 navicat 工具 - 选项 -OCI 更改路径。重新连接,失败!重启再试,依然连接报错。问题回到报错ORA-12514: listener does not currently know of service requested in connect 侦听器目前并不知道连接的服务请求。既然listener 不知道怎么让它知道呢?为什么不知道?好难懂呀难道是安装 oracle 失败了 但是 sqlPus 上连接又为什么又通过了?为解决疑问重新安装了 oracle 在安装前了卸载,控制面板上没有此软件,软件管家倒是有,总之问题多多。卸载 删除 清理注册表(运行 regedit 大致在 services 下面)否则无法重装 oracle。重新安装连接依然不行。问题还是回到了 listener does not currently know of service requested in connect 侦听器目前并不知道连接的服务请求, 怎样能让listener know?
通过上网查到可通过修改 listener.ora 文件解决。
添加了一段在安装目录 E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN 下文件修改了家上一段复制的代码(蓝色部分):
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = “EXTPROC_DLLS=ONLY:E:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll”)
)(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
)
关掉 Service 和 LISTENER,再启动 Service 和 LISTENER。最开始复制未留意到 ORACLE_HOME = 目录,复制目录不是本机文件目录,因此失败,细节真的很重要!。。。庆幸的是改过来后连接成功了!
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133613.htm