tns-12545

why tns-12545?

转载


ORC1 =tns如下配置:

  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 133.200.9.*)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orc)
      (INSTANCE_NAME = orc1)
    )
  )

sqlplus system/root@orc1连接正常。

而注释掉   (INSTANCE_NAME = orc1)后,会报tns-12545。提示无法找到主机。

因为host指定的是ip地址,所以一开始比较糊涂。后来发现,在c:\winnt\system32\drv\etc\hosts里面加上 133.200.9.*   jfa01,其中jfa01是服务器的主机名,就不会出现12545错误了。

看来问题还是出现在解析hostname上了。

问题是tnsnames里面用的是ip地址,那么为什么还要hostname呢?

在metlink上找到了这篇文档:

Note:131658.1   How MTS and DNS are related, MTS_DISPATCHER and ORA-12545

其中有:

When the client sends a connection request to a MTS-configured database server,
the following steps occur:

1.- The client sends a packet to the listener, using the address specified in
    the client TNSNAMES.ORA file
2.- The listener receives this packet,  then sends back a packet to the client
    machine containing information about the dispatcher address. This is because the listener redirects this client to a dispatcher process.
    The information sent inside this packet is the same as that seen in the listener services summary. In this example, the listener will send a packet with:
    (ADDRESS=(PROTOCOL=tcp)(HOST=rtcsol1.us.oracle.com)(PORT=59034))
                                      ^^^^^^^^^^^^^^^^^^^^^
3.- Finally, when the client receives this packet, it sends a conection request to the dispatcher using the address received from the listener.

说明虽然客户端指定了ip地址,但是在和服务器的listener交互的时候,服务器又把hostname发给了客户端了。这才出现tns-12545。

那么为什么在tnsnames.ora里面指定了instance-name就好了呢?

我想这可能是因为oracle在2种情况下,互相握手的步骤不一样吧。

至于握手过程到底怎么样,还需要研究一下。

 

继续看文档,发现如下论述:

把默认的mts_dispatchers = "(protocol=TCP)"改成mts_dispatchers = "(ADDRESS=(protocol=TCP)(HOST=<ip address>))。

这样在握手过程中,listener就不会向客户端发送主机名,而是发送ip了。这样也可以避免tns-12545。

 

试着修改了几次,总是不能正确修改这个参数。

于是把listener里面的hostname改成ip,就可以了。

 

***********************************************

2008年2月新增:

10G默认配置里,如果做service的双机负载均衡,在一个连接被重新定向到另外一个intance的时候,也会报这个错误

解决方法是设置instance的local_listener参数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值