zoukankan      html  css  js  c++  java
  • oracle 錯誤

    問題:
        連線都會出現 ORA-12545  連接失敗是因為目標主機或物件不存在

       解:在LISTENER刚启动的时候,数据库还末向LISTENER注册其SERVICE,所以联接并没有通过MTS,而是直接通过TNSNAME上的地址联接到数据库。
    等一段时间过后,数据库向LISTENER注册其SERVICE,如果客户端发出联接请求,请求会被LISNTER以一个包的形式返发到客户端(这个包中 就是Dispather的地址),让客户端联接到Dispather上去。由于你的INIT中的MTS_DISPATCHERS参数没有加上IP地址,所 以,DISPATCHERS地址中包含是你的主机全名,如:(ADDRESS=(PROTOCOL=tcp)(HOST= rtcsol1.us.oracle.com)(PORT=59034))而你的客户端由于没有配置DNS(即无法解析rtcsol1.us.oracle.com),所以会报出ORA-12545 错误。

    解决方法有以下几种:
    1)在你的客户端的HOST文件中注册服务器的IP地址与带域名的机器名全称
        HOST文件路徑:"C:\WINDOWS\system32\drivers\etc"目錄下的Hosts文件,用文本編輯器編加入地址,如:192.168.0.132   sh2
    2)将MTS_DISPATCHERS参数中加上HOST=IP地址。使Listener返回的DISPATCHERS地址包中不再使用计算名而改用IP地址。
       MTS_DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.9))(DISPATCHERS=1)"
      
    不行的話試一下下邊語句
      
    MTS_DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.9)(PORT=xxxx))(DISPATCHERS=1)"
    3)在INIT中使用LOCAL_LISTENER参数,如
      LOCAL_LISTENER=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxxx))
      注:8i的话,不需要local_listener这个参数

    轉:http://www.itpub.net/21889.html

    oracle10g rac 报ora-12545错误的解决方案
    一、问题描述
    操作系统Windows 2003 ,oracle 10g 10.2.0.2
    当客户端连过来时客户端有时能连通,有时却断开提示错误
    已连接。
    SQL> conn
    system/oracle@gzmdc
    ERROR:
    ORA-12545: 因目标主机或对象不存在,连接失败


    警告: 您不再连接到 ORACLE。
    SQL> conn
    system/oracle@gzmdc
    已连接。
    SQL> conn
    system/oracle@gzmdc
    已连接。
    SQL> conn
    system/oracle@gzmdc
    ERROR:
    ORA-12545: 因目标主机或对象不存在,连接失败
    警告: 您不再连接到 ORACLE。
    SQL>

    客户端tns配置
    GZMDC=
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.18)(PORT = 5880))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.20)(PORT = 5880))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = test)
    )
    )

    服务器端
    201.150.14.18 node1-vip
    201.150.14.20 node2-vip 是虚拟ip(vip)
    201.150.14.5 node1
    201.150.14.7 node2 是公网ip

    二、解决方案
    有人提议把客户端hosts文件中加入对两个服务名的名字解析,经测试的确能解决问题,但总觉得不是很好,维护上百台电脑的hosts文件是很困难的.
    下面的方法是我测试成功的.
    1, 服务器2个节点群集 机器名为 node1,node2.
    2,在服务器端用system用户登录

    SQL> show parameter list
    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    local_listener string
    remote_listener string LISTENERS_TEST
    可以看到这两个参数,remote_listener为 LISTENERS_TEST
    3,在node1,node2上分别编辑服务器端tnsname.ora (注意,是服务器端的)
    将下面部分
    LISTENERS_TEST =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 5880))
    (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 5880))
    )

    改为:
    LISTENERS_TEST =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.18)(PORT = 5880))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.20)(PORT = 5880))
    )
    也就是将host主机名改为ip地址

    在node1上增加以下部分
    LOCAL_TEST =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.5)(PORT = 5880))
    )

    在node2上增加以下部分
    LOCAL_TEST =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.7)(PORT = 5880))
    )
    保存退出
    查看两个节点的 listener.ora文件,最好将里面的主机名都改为ip地址

    4,用system用户登录
    执行 alter system set local_listener='LOCAL_TEST' scope=both;

    5 重启所有实例 所有监听.
    再从客户端连接 正常,
    每次连接用 show parameter instance_name查看实例名, 负载均衡已经生效.
    有人把remote_listener 参数置空 虽然连接正常但已经破坏了负载均衡.


    轉:http://tolywang.itpub.net/post/48/435333

  • 相关阅读:
    团队管理 - 团队发展五阶段
    信息系统开发平台OpenExpressApp - 支持差异保存
    MDSF:Mendix介绍
    需求入门 - 获取需求方法:Nine Boxes
    个人管理 - 第四代时间管理
    需求入门 - 业务需求分析入门(公司研发峰会演讲ppt)
    个人管理 - Learn More,Study Less!
    如何培养一个人:从育儿谈起
    个人管理 - 如何演讲
    企业架构 - ADM方法概要介绍
  • 原文地址:https://www.cnblogs.com/scottckt/p/1025519.html
Copyright © 2011-2022 走看看