查看: 7582|回复: 8

[原创] RedHat5.1 下 Oracle10gR2 RAC 下 ORA-12545 错误的处理方法

[复制链接]
论坛徽章:
41
马上加薪
日期:2014-02-19 11:55:14铁扇公主
日期:2012-02-21 15:02:402012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15ITPUB年度最佳BLOG写作奖
日期:2012-03-13 17:09:53
跳转到指定楼层
1#
发表于 2008-9-22 13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、问题描述

1.操作系统信息
$ uname -a
Linux racdb1 2.6.18-53.el5xen #1 SMP Wed Oct 10 16:48:44 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux

2.数据库版本信息
sys@orcl> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

3.问题现象
当RAC部署完成后,从客户端反复连接数据库时,出现时而能连通,时而断开连接的错误,连接数据库不稳定!
具体情况如下:
sys@orcl> conn system/system@tnsrac
已连接。
sys@orcl> conn system/system@tnsrac
ERROR:
ORA-12545: 因目标主机或对象不存在,连接失败

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

警告: 您不再连接到 ORACLE。

客户端 tnsnames.ora 配置情况如下:
tnsrac =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.21)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.22)(PORT = 1521))
      (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

服务器端hosts文件内容:
orcl1@racdb1 /home/oracle$ cat /etc/hosts
127.0.0.1          localhost.localdomain   localhost
# Public IP         - (eth0)
172.16.12.23    racdb1
172.16.12.24    racdb2
# Virtual IP (VIP) - (eth0)
172.16.12.21    racdb1-vip
172.16.12.22    racdb2-vip
# Private IP       - (eth1)
10.10.10.1         racdb1-priv
10.10.10.2         racdb2-priv

二、解决方法

1.使用 sqlplus / as sysdba 登陆数据库查看local_listener设置情况
sys@orcl> show parameter list
NAME                TYPE                 VALUE
------------------- -------------------- --------------------
local_listener      string               
remote_listener     string               LISTENERS_ORCL

2.在服务器端racdb1,racdb2上分别编辑tnsnames.ora和listener.ora文件,将两个文件中的host主机名字均修改为具体的VIP地址
如将下面部分
LISTENERS_ORCL =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = racdb1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = racdb2-vip)(PORT = 1521))
  )
改为:
LISTENERS_ORCL =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.21)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.22)(PORT = 1521))
  )

3.在racdb1节点的tnsnames.ora增加如下内容
local_listener_rac =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.21)(PORT = 1521))
  )

4.在racdb2节点的tnsnames.ora增加如下内容
local_listener_rac =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.22)(PORT = 1521))
  )

4.使用 sqlplus / as sysdba 登陆数据库修改local_listener参数

alter system set local_listener='local_listener_rac' scope=both;

5.重启两节点的实例和监听
sys@orcl> shutdown immediate;
sys@orcl> startup;

$ lsnrctl stop
$ lsnrctl start

三、测试
system@orcl> conn system/system@tnsrac
已连接。
system@orcl> select instance_name from v$instance;

INSTANCE_NAME
--------------------------------
orcl2

system@orcl> conn system/system@tnsrac
已连接。
system@orcl> select instance_name from v$instance;

INSTANCE_NAME
--------------------------------
orcl1

system@orcl> conn system/system@tnsrac
已连接。
system@orcl> select instance_name from v$instance;

INSTANCE_NAME
--------------------------------
orcl2

system@orcl> conn system/system@tnsrac
已连接。
system@orcl> select instance_name from v$instance;

INSTANCE_NAME
--------------------------------
orcl1

到此,该问题已经处理完成。

[ 本帖最后由 secooler 于 2008-9-22 13:52 编辑 ]
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
2#
发表于 2008-9-22 15:54 | 只看该作者

使用道具 举报

回复
论坛徽章:
98
2009日食纪念
日期:2009-07-22 09:30:002010新春纪念徽章
日期:2010-03-01 11:05:012010年世界杯参赛球队:美国
日期:2010-05-02 21:32:232010数据库技术大会纪念徽章
日期:2010-05-13 09:34:23ITPUB季度 技术新星
日期:2010-05-17 15:53:17数据库板块每日发贴之星
日期:2010-05-24 01:01:072010年世界杯参赛球队:意大利
日期:2010-05-31 20:55:432010年世界杯参赛球队:巴拉圭
日期:2010-07-03 13:06:582010世博会纪念徽章
日期:2010-08-18 23:53:44ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
3#
发表于 2008-9-22 22:37 | 只看该作者
一般来说在设置网络相关的参数时候,用IP是正道。

使用道具 举报

回复
论坛徽章:
41
马上加薪
日期:2014-02-19 11:55:14铁扇公主
日期:2012-02-21 15:02:402012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15ITPUB年度最佳BLOG写作奖
日期:2012-03-13 17:09:53
4#
 楼主| 发表于 2008-9-23 09:36 | 只看该作者



不在listener.ora中指定local_listener_rac内容,而只是单独在数据库中设置下面的内容,我试过后没有效果。
NODE1:
alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.21)(PORT = 1521))'  sid='orcl1';
NODE2:
alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.21)(PORT = 1521))'  sid='orcl1';

使用道具 举报

回复
论坛徽章:
2
咸鸭蛋
日期:2011-06-27 15:18:07茶鸡蛋
日期:2011-07-11 23:09:43
5#
发表于 2008-9-23 09:57 | 只看该作者
这个问题有多种解决办法,除了楼主的,在客户端hosts文件写入rac的节点的主机名和ip的对应也可以,另外分别在两个节点上执行下面语句,我多次测试,都是可以的
orcl1:
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.169.19.21)(PORT = 1521))'  SID = 'orcl1';
orcl2:
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.169.19.22)(PORT = 1521))'  SID = 'orcl2';

使用道具 举报

回复
论坛徽章:
3
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
6#
发表于 2008-9-23 10:14 | 只看该作者
哈哈,这个是老问题了

使用道具 举报

回复
论坛徽章:
0
7#
发表于 2008-10-22 13:03 | 只看该作者

请教

我刚开始学习安装rac,硬件环境和楼主得几乎一样,但是我老是安装不成功AS5.2+oracle10G rac  老出错。。

楼主能提供一下你得安装文档吗?谢谢。可以发email给我,junnylove@163.com


非常感谢。。

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
8#
发表于 2008-10-22 13:06 | 只看该作者
原帖由 secooler 于 2008-9-23 09:36 发表



不在listener.ora中指定local_listener_rac内容,而只是单独在数据库中设置下面的内容,我试过后没有效果。
NODE1:
alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.21)(PORT = 1521))'  sid='orcl1';
NODE2:
alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.12.21)(PORT = 1521))'  sid='orcl1';


local_listener是实例级别参数,你这样只是在orcl1上设置了,而orcl2没设置

使用道具 举报

回复
论坛徽章:
17
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442015年新春福章
日期:2015-03-06 11:57:31暖羊羊
日期:2015-03-04 14:50:37马上有钱
日期:2014-05-19 11:18:35马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:112013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:现代五项
日期:2012-10-16 23:29:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202012新春纪念徽章
日期:2012-01-04 11:50:44
9#
发表于 2010-4-2 11:47 | 只看该作者
这确实是个老问题,很多人都把他归类为BUG

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表