您的位置:首页 > 数据库 > Oracle

Oracle10gR2 RAC 下 ORA-12545 错误的处理方法

2015-01-06 23:54 513 查看

一、问题描述

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

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

此文转自:http://www.itpub.net/thread-1060068-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle RAC ORA-12545