Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1027418
  • 博文数量: 159
  • 博客积分: 3063
  • 博客等级: 中校
  • 技术积分: 2703
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-01 01:51
文章分类

全部博文(159)

文章存档

2013年(48)

2012年(111)

分类: Oracle

2012-04-30 17:46:32

    最近,在安装数据库时遇到了不少问题,其中就有:TNS-12545 Connect failed because target host or object does not exist(因目标主机或对象不存在,连接失败),很明显,系统在通过TNS进行连接的时候,无法通过tnsnames.ora这个文件进行解析,网上查阅了很多相关资料,有人说是tnsname.ora没有,或配置错误么?答案是:不一定是配置错误!而且明明有时候通过PL/SQL去登录数据库完全没有问题,但当换了一台客户机,也通过同样的tnsname.ora去连接数据库,就报TNS-12545错误,这是为什么呢?

    而我本人遇到的问题则更加诡异,用SecureCRT连接到系统,能通过命令conn sys/oracle@orcl as sysdba进入到SQL>(证明tnsnames.ora这个时候是起作用的,也没有配置错误,否则是会报其他TNS错误的,如TNS-12514TNS-12154),但当我使用PL/SQL DEVELOPER登录数据库时,问题就出现了,报ORA-12545错误,而tnsnames.ora是从linux系统中拷贝过去,用的是同一个文件,但SecureCRT就可以登录,为什么到了PL/SQL DEVELOPER这就卡壳了呢?而我之前配置过的另一台虚拟机就两边都可以正常登陆到数据库。百思不得其解,也问了很多人,依然没有找到解决方法。

    后来,依旧借助google,搜索可能出现这一问题原因,有人提出修改本地主机HOSTS文件的方法,于是我尝试了一下,修改C:\WINDOWS\system32\drivers\etc\hosts文件,在末尾加入linux主机的IP地址和主机名,保存退出。然后再次用PL/SQL DEVELOPER连接数据库,问题解决,不报错直接连上数据库。

    下面我来分析一下出现这一问题的原因,其实后来我才发现:原来出问题的这台在配置tnsnames.ora文件时使用了主机名,如

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = RHEL5)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

而另外一台没有出问题的tnsnames.ora文件配置的是IP地址,如

ORCL10G =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.20)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl10g)
    )
  )

    大家有没有看出不同?其实已经很明显了,用了IP地址那台(SID=ORCL10G)并没有通过修改真实机的HOST也可以使用PL/SQL登陆,因为此处有了IP地址,而用了主机那台(SID=ORCL),也就是出问题的那台,并没有配置IP地址,这就是造成我们之前碰到的ORA-12545错误的关键。

    知道了问题原因,那解决起来也就简单了,有2种方法:

方法一:把出问题的那台(SID=ORCL)tnsnames.ora里的HOST部分改成用IP地址来命名,这样就无需在在真实机的HOSTS文件中加入虚拟机的IP地址或主机名了。

方法二:如果不想把出问题的虚拟机中tnsnames.oraHOST部分改成IP,那就必须要修改真实的HOSTS文件,在其中加入虚拟机的IP地址和主机名。

至于tnsnames.ora中到底是用IP地址好,还是用主机名好,我想这个可能还是有点区别的吧,如果为了方便,那就直接把它写成IP地址吧,毕竟写成主机名的话,要通过修改真实机的HOSTS文件才能连上数据库,而且如果更换了不同的客户端来登录数据库的时候,还要修改每台客户机上的HOSTS文件,那是非常麻烦的一件事情。

PS:很多问题,看似很难,难道无法解决,但其实只要静下心来,借助google等搜索工具,还是能找到一点启发的,借鉴别人的方法,再通过自己的实验,如果能把问题解决掉,那此刻的成就感是不言而喻的,留下的印象也是非常深刻的。希望能抛砖引玉,让大家养成一个良好的学习知识和解决问题习惯。

阅读(17011) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~