在远端客户端连接RAC数据库时,通过统一的服务名连接时经常会出现ORA-12545错误。在METALINK上查询了一下,竟是Oracle的一个小bug。
环境:ORACLE 11G R2 RAC数据库,两节点。
现象:
[oracle@ted35 ~]$sqlplus /nolog
 
SQL*Plus: Release 11.2.0.1.0 Production on 星期五 6月 15 11:57:00 2012
 
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
 
SQL> conn sys/ted@123e@prodb as sysdba;
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败

故障分析:用tnsping检查一下,发现可以ping通,这是因为tnsping只检查IP地址和端口是否能连通,至于数据库实例状态,监听注册了哪些服务这些,它是不检查的。

我们看一下本地数据库TNSNAMES的配置:
TESTRAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.124)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.125)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 10.58.12.124)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)

Oracle在文档Note:364855.1:RAC Connection Redirected To Wrong Host/IP ORA-12545中进行了描述,并给出了解决方法:修改数据库中的初始化参数LOCAL_LISTENER(注:这种方法在修改初始化参数后,需要重启监听,重启实例)
SQL>conn / as sysdba;
    Connected.
SQL> ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.124)(PORT = 1521)) 'SID = 'prodb1';
系统已更改。
登录另外一个节点
SQL>conn / as sysdba;
    Connected.
SQL> ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.125)(PORT = 1521))' SID = 'prodb2';
系统已更改。

设置之后,再次尝试连接数据库:
SQL> conn sys/ted@123e@prodb as sysdba;
     Connected.
SQL> conn sys/ted@789e@prodb as sysdba;
     Connected.

修改之后,没有再次出现同样的错误。

我们也可以通过只修改客户端hosts文件的方式,来解决这个问题。
首先在linux主机上修改HOSTS文件
root@prodb1 # vi /etc/hosts
#
10.58.12.120            prodb1-public   # Public
10.58.12.124            prodb1          # Virtual
23.23.23.120            prodb1-priv     # Private

10.58.12.121            prodb2-public   # Public
10.58.12.125            prodb2          # Virtual
23.23.23.121            prodb2-priv     # Private

10.58.12.126            prodb-scan      # SCAN

然后客户端的tnsnames.ora中的配置如下:
$ more $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /data/oracle/product/11.2/database/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENERS_prodb =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.124)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.125)(PORT = 1521))
)
LISTENER_prodb1 =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.124)(PORT = 1521))
LISTENER_prodb2 =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.125)(PORT = 1521))

prodb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.124)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.125)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prodb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
prodb1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.124)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prodb)
(INSTANCE_NAME = prodb1)
)
)
prodb2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.125)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prodb)
(INSTANCE_NAME = prodb2)
)
)

下面尝试连接远端RAC数据库:

SQL> conn sys/ted@123e@prodb as sysdba;已连接。
SQL> conn sys/ted@789e@prodb as sysdba;已连接。

其实在本地hosts文件中加上RAC实例所在服务器的ip和主机名信息,就可以避免这个错误。
另外注意在RAC环境中,任何修改都一定要谨慎。RAC 环境一旦安装好后,主机名就不能随意修改,除非先删除节点,修改Hostname,再添加节点。还有一点主机名必须和public名一致,这一点也非常重要。

ora-12545连接错误解决一例相关推荐

  1. 柯美smb扫描出现服务器连接错误_柯尼卡美能达bizhub283服务器连接错误解决办法.pdf...

    柯尼卡美能达bizhub283 可以打印,无法扫描 提示"服务器连接错误"的解决办法 近日,不知是何原因,bizhub283 出现了扫描故障,仔细检 查网线连接和网络设置均未发现问 ...

  2. [WinError 10061] 由于目标计算机积极拒绝,无法连接错误解决办法

    爬虫的时候会经常出现"[WinError 10061] 由于目标计算机积极拒绝,无法连接"错误这种情况,有可能是LAN口设置不正确 我是在爬取全国天气情况的时候出现的这种错误,后面 ...

  3. Nginx 的recv() failed 错误解决一例

    本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2012-11/75149.htm L同学又一次把soc ...

  4. oracle ping 超时_Oracle连接错误解决方法(TNS-12535: TNS: 操作超时)

    今天在win7上连接centos的oracle 10g一直连接不上.通过如下过程解决了. 1.登录到centos 执行 tnsping orcl 执行是成功的(orcl是oralce的全局数据库名). ...

  5. mysql本地连接错误解决办法

    今天公司同事在测试服务器上死活不能用一个账号在本地登陆,但是远程就可以,于是我帮忙看了下,测试服务器的IP是10.10.2.226,错误如下: linux-0fdr:/home1/mysql_data ...

  6. linux下mysql连接错误解决

    一些朋友经常在linux下启动mysql时,会遇到下面的错误 ERROR 2002 (HY000): Can't connect to local MySQL server through socke ...

  7. outlook 2010邮件传输接口错误解决一例

    现象: 打开OFFICE OUTLOOK 2010时,报邮件传输接口返回未知错误,导致无法使用OUTLOOK. 故障截图: 解决:尝试用OFFICE软件自带的检测和修复功能重装OUTLOOK发现不行, ...

  8. VS 编译出现,LNK2005 连接错误解决办法

    编译链接时出现以下错误: 1>nafxcwd.lib(dllmodul.obj) : error LNK2005: DllMain 已经在 LIBCMTD.lib(dllmain.obj) 中定 ...

  9. mac版vpn连接错误解决

    错误描述: 创建一个文件 sudo vim /etc/ppp/options 然后在文件中输入: plugin L2TP.ppp l2tpnoipsec 保存退出之后,再连接就可以了

最新文章

  1. 第一讲 网络安全概述笔记
  2. solidity智能合约[37]-以太坊虚拟机数据存储
  3. java none怎么用tomcat_JavaWeb学习——在Eclipse里使用Tomcat
  4. Direct3D播放RGB(通过Texture)
  5. python爬取内容为空怎么剔除_用scrapy爬取网站内容时,如何忽略某些内容为空的值;...
  6. 中国石油大学《安全管理学》第二阶段在线作业
  7. 汉语转拼音(带音调和多音字识别)
  8. python葡萄酒数据集_葡萄酒数据集数据分析
  9. 什么?你居然不会微信分身
  10. 【python学习】自定义三维向量类 加减乘除查看值和长度
  11. 网络爬虫全解析(JAVA)--目录
  12. Win11右键菜单还原Win10
  13. 编译原理课程设计-对pl0语言进行扩充
  14. 最差的算法工程师能差到什么程度呢?
  15. 抓娃娃机按钮按几下_揭秘娃娃机抓娃娃技巧全攻略
  16. 【数据库复习】 模式分解例题
  17. android mtk6592 添加led三色灯,红色蓝色绿色
  18. ARP欺骗攻击的检测和防御
  19. 天涯论坛的经典回帖!!!
  20. java 依赖倒置_设计模式之三依赖倒置原则(DIP)

热门文章

  1. 行业|深度解析:医疗机器人商用要过几道坎
  2. 国际互联网协会(ISOC)提出未来互联网十项原则
  3. 从数据库到迁移调优,鲲鹏高校行太原站正式启动
  4. TIOBE 12 月编程语言:Python 有望第四次成为年度语言!
  5. 有理想的程序员必须知道的15件事
  6. DIV + CSS布局的一些知识汇总
  7. 解读2016全球ICT 50强榜单:谁动了传统通信产业的奶酪?
  8. CFA考试一二三级经验,我写的很仔细......
  9. jQuery选择器之动态列表显示Demo
  10. golang的mongodb操作(mgo)