解决Oracle客户端无法连接RAC(ORA-12545)

RAC建好后,以为能像单机版的oracle实例一样,服务器端建立服务监听,客户端用netca创建个本地监听就能连接了实际则不是,客户端连接rac着实费了一番功夫;

根据http://www.oracleonlinux.cn/2012/03/resolve-11gr2-rac-client-ora-12545/

这篇文章解决了问题,原来虽然客户端能解析全域名称scan和vip(虚拟ip)但是端主机名却是在不同的区域中,即使在安装grid infrastructure 过程中使用了fqdn形式就是主机名+域名的方式,由于错误9150053的规定导致了DBCA在创建数据库时是用主机的段号虚拟IP来设置数据库参数local_listener的,因此只要把数据库实例参数local_listener内的host改为vip的IP地址即可;


bug-9150053这是11.2.0.1的小bug:“ORA-12545 or ORA-12537 while connecting to RAC through SCAN name[ID 970619.1]”,
Client is able to resolve all Fully Qualified Domain Name (FQDN) SCAN and VIP name but not short ones(without domain name) as its in different domain; even though FQDN names were specified during Grid Infrastructure setup, due to bug 9150053 by default DBCA set database parameter local_listener to short node VIP name while database is created.


11.2.0.2及之后的版本就修复好了 ;

 

[grid@node1 ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 13-MAY-2013 19:49:27

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                13-MAY-2013 16:38:45
Uptime                    0 days 3 hr. 10 min. 42 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/node1/listener/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.75.10)(PORT=1521)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.75.11)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
 Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "racdb" has 1 instance(s).
 Instance "racdb1", status READY, has 1 handler(s) for this service...
Service "racdbXDB" has 1 instance(s).
 Instance "racdb1", status READY, has 1 handler(s) for this service...
The command completed successfully



SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/racdb/spfileracdb.ora
SQL> show parameter listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
listener_networks                    string
local_listener                       string      (DESCRIPTION=(ADDRESS_LIST=(AD
                                                DRESS=(PROTOCOL=TCP)(HOST=node
                                                1-vip)(PORT=1521))))
remote_listener                      string      scan-cluster.wenxi.com:1521
SQL>


SQL>
SQL> show parameter listener;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
listener_networks                    string
local_listener                       string      (DESCRIPTION=(ADDRESS_LIST=(AD
                                                DRESS=(PROTOCOL=TCP)(HOST=node
                                                1-vip)(PORT=1521))))
remote_listener                      string      scan-cluster.wenxi.com:1521
SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.75.11)(PORT=1521))))' sid='racdb1';

System altered.

SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.75.21)(PORT=1521))))' sid='racdb2';

System altered.

SQL> commit;

Commit complete.

SQL> show parameter listener;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
listener_networks                    string
local_listener                       string      (DESCRIPTION=(ADDRESS_LIST=(AD
                                                DRESS=(PROTOCOL=TCP)(HOST=192.
                                                168.75.11)(PORT=1521))))
remote_listener                      string      scan-cluster.wenxi.com:1521
SQL> show user;
USER is "SYS"



[oracle@node2 ~]$ sqlplus / as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on Mon May 13 18:22:59 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> show parameter listener;  

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
listener_networks                    string
local_listener                       string      (DESCRIPTION=(ADDRESS_LIST=(AD
                                                DRESS=(PROTOCOL=TCP)(HOST=192.
                                                168.75.21)(PORT=1521))))
remote_listener                      string      scan-cluster.wenxi.com:1521
SQL>


这时用普通的oracle创建客户端的创建本地监听就可以了


C:\>sqlplus  system/Oracle123@racscan

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 5月 13 18:32:20 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options

SQL> select * from dual;

DU
--
X


你可能感兴趣的:(RAC,ora-12545)