客户端连接Oracle RAC报错ORA-12545 的处理

连接到RAC数据库的时候经常会出现ORA-12545错误 针对这个问题Oracle没有认为这个是bug,只是认为是PROBLEM。解决办法可以有两种:修改客户端的hosts和tnsnames.ora或者修改oracle服务器数据库。前者称为客户端解决办法后者称为彻底的解决办法。两者都行。彻底的解决办法可以彻底的解决这个问题,而且对所有的连接都是有效的。不过缺点也是很明显的。需要修改初始化参数,重启实例,重启监听。 客户端解决办法:解决这个问题步骤如下:1. 修改客户端tnsnames.ora文件: RACDB = (DESCRIPTION =(ADDRESS_LIST =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.143.1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.143.2)(PORT = 1521)) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = racdb) ) ) 2. 查看数据库服务器lsnrctl配置: $ lsnrctl service LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.3.0 - Production on 11-JUL-2007 10:57:12 Copyright (c) 1991, 2006, Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))Services Summary...Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 LOCAL SERVERService "dbsr" has 2 instance(s). Instance "racdb1", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=shp_db1)(PORT=1521)) "DEDICATED" established:87 refused:0 state:ready LOCAL SERVER Instance "racdb2", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:43 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=shp_db2)(PORT=1521))Service "racdb" has 2 instance(s). Instance "racdb1", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=shp_db1)(PORT=1521)) "DEDICATED" established:87 refused:0 state:ready LOCAL SERVER Instance "racdb2", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:43 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=shp_db2)(PORT=1521))Service "racdbXDB" has 2 instance(s). Instance "racdb1", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: shp_db1, pid: 250102> (ADDRESS=(PROTOCOL=tcp)(HOST=shp_db1)(PORT=32805)) Instance "racdb2", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: shp_db2, pid: 185054> (ADDRESS=(PROTOCOL=tcp)(HOST=shp_db2)(PORT=32811))Service "racdb_XPT" has 2 instance(s). Instance "racdb1", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=shp_db1)(PORT=1521)) "DEDICATED" established:87 refused:0 state:ready LOCAL SERVER Instance "racdb2", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:43 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=shp_db2)(PORT=1521))The command completed successfully 3. 修改客户端hosts文件Windows系统:C:\WINDOWS\system32\drivers\etc\hostsLinux系统:/etc/hosts 增加相应项:10.32.143.1 db1_vip shp_db110.32.143.2 db2_vip shp_db2 此时oracle客户端可以正常通过racdb链接oracle而不报错了。 
彻底的解决方法: 连接到RAC数据库的时候经常会出现ORA-12545错误,在METALINK上查询了一下,是Oracle的一个小bug。在远端客户端连接RAC数据库时,通过统一的服务名连接时经常会出现ORA-12545错误。SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败警告: 您不再连接到 ORACLE。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败警告: 您不再连接到 ORACLE。本地数据库TNSNAMES的配置:RACDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.143.1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.143.2)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = RACDB)
(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 SYS@RACDB1 AS SYSDBA输入口令: ****已连接。
SQL> ALTER SYSTEM 
2 SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.143.1)(PORT = 1521))' 
3 SID = 'racdb1';系统已更改。SQL> CONN SYS@RACDB2 AS SYSDBA输入口令: ****已连接。
SQL> ALTER SYSTEM 
2 SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.143.2)(PORT = 1521))' 
3 SID = 'racdb2';系统已更改。设置之后,再次尝试连接数据库:SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。
SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。修改之后,没有再次出现同样的错误。

 

2008-04-21 14:26

在连接Oracle RAC 时,时常出现:ORA-12545:因目标主机或对象不存在,连接失败 的解决

在连接Oracle RAC 服务器时,时常出现:ORA-12545:因目标主机或对象不存在,连接失败的错误,

这种错误可能是Oracle RAC10g的一个bug,可以试一下以下的解决办法

修改你客户端的tnsnames.ora,将真实IP和虚拟IP都加上,如下例所示:

MYCON.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.27.2)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.27.3)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.27.8)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.27.9)(PORT = 1521))
)
(LOADBALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbsev)
)
)

 

你可能感兴趣的:(oracle,RAC)