排错记录:plsql无法连接oracle ora-12154 ora-12560

对oracle各种各样的错误还真是不熟悉,记录一次困扰很久问题的最终排查记录。

一、症状描述:

plsql无法连接数据库,提示:“ORA-12154:TNS:无法解析指定的连接标识符”

 

二、排查过程

  1. tnsnames.ora 填写没有错误
  2. 监听服务已经启动:管理工具--服务,OracleOraDb10g_home1TNSListener服务。
  3. 服务器orcl实例已经启动:管理工具---服务,OracleServiceORCL
  4. 服务器能ping通:网络连接良好
  5. 实例能tnsping通:能够ping通,则说明客户端能解析listener的机器名,而且lister也已经启动,但是并不能说明数据库已经打开,而且tsnping的过程与真正客户端连接的过程也不一致。
  6. oracle客户端oracle net Manager测试通过,表明确实能连接
  7. 环境变量path值设置已经修改好。
  8. sqlplus提示 ORA-12154:sqlplus 用户名/密码@192.168.164.132:1521/orcl。
  9. plsql-preference-oracle home人工设置正确。

 

已经过程经过N次重复始终无法连接,始终报错“ORA-12154"。

 

三、解决方案

经过以上反复修改,终于有一天用sqlplus远程连接时报了个新错误:

"ORA-12560: TNS: 协议适配器错误"

总算有个眉目了,服务器端在环境变量中设置orcle_sid=orcl。

   网上百度解决方法如下

在运行中输入regedit,进入注册表,然后到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0将该环境变量ORACLE_SID设置为****,****database SID。

或者右击我的电脑,属性--高级系统设置--环境变量---系统变量--新建变量名=oracle_sid,变量值=****,****database SID。或者进入sqlplus前,在command line下输set oracle_sid=********database SID。

但我进入注册表后发现,我的ORACLE_SID=orcl,没有问题。

继续尝试下面的设置环境变量的方式,新建变量:ORACLE_SID=orcl,问题解决。

 

有待探讨

那么问题来了:

这台服务器中注册表中设置了ORACLE_SID也不能保证完全可以连接,最好设置ORACLE_SID;而跟他完全同样配置的另一台服务器(这两台其实是虚拟机,复制过来的,完全一样),并未在环境变量中设置ORACLE_SID却能连接。这是为什么?

 

参考

ORA-12560: TNS: 协议适配器错误

ORA-12154: TNS: 无法解析指定的连接标识符

“ORA-12154: TNS: 无法解析指定的连

SQL plus连接远程Oralce数据库

posted @ 2015-08-21 10:30  AllenRobin  阅读(4615)  评论(0编辑  收藏  举报