RAC連線的問題ORA-12545(二)

yangtingkun發表於2007-04-09

連線到RAC資料庫的時候經常會出現ORA-12545錯誤,在METALINK上查詢了一下,是Oracle的一個小bug

RAC連線的問題ORA-12545http://yangtingkun.itpub.net/post/468/273645


上一篇文件已經給出這個問題的解決方法了,不過今天發現另外一個解決方案。

文件一中給出的解決方法可以徹底的解決這個問題,而且對所有的連線都是有效的。不過缺點也是很明顯的。需要修改初始化引數,重啟例項,重啟監聽。有的時候,這個操作的代價太大了。這篇文章介紹的方法可以透過只修改客戶端hosts檔案的方式,來解決這個問題。

客戶端的tnsnames.ora中的配置如下:

SQL> host
$ more $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /data/oracle/product/10.2/database/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_TESTRAC2 =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))


LISTENER_TESTRAC1 =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))


TESTRAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)

TESTRAC2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
(INSTANCE_NAME = testrac2)
)
)

TESTRAC1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
(INSTANCE_NAME = testrac1)
)
)

LISTENERS_TESTRAC =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))
)

下面嘗試連線遠端RAC資料庫:

$ exit

SQL> CONN NDMAIN/NDMAIN@TESTRAC已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
ERROR:
ORA-12545:
因目標主機或物件不存在, 連線失敗

警告: 您不再連線到 ORACLE
SQL> CONN NDMAIN/NDMAIN@TESTRAC
ERROR:
ORA-12545:
因目標主機或物件不存在, 連線失敗


SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
ERROR:
ORA-12545:
因目標主機或物件不存在, 連線失敗

警告: 您不再連線到 ORACLE
SQL> CONN NDMAIN/NDMAIN@TESTRAC
ERROR:
ORA-12545:
因目標主機或物件不存在, 連線失敗

可以看到,連線失敗的機率還是很高的。其實只有在本地hosts檔案中加上RAC例項所在伺服器的ip和主機名資訊,就可以避免這個錯誤:

SQL> host
$ su -
Password:
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
Sourcing //.profile-EIS.....
root@ahrac1 # vi /etc/hosts
#
# Internet host table
#
172.25.198.224 racnode1-vip
172.25.198.225 racnode2-vip

root@ahrac1 # exit
$ exit

SQL>

下面再次嘗試連線RAC資料庫:

SQL> CONN NDMAIN/NDMAIN@TESTRAC已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
已連線。

問題已經解決。不過由於只修改當前客戶端的配置,所以這種方法也只對當前客戶端有效。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69231/,如需轉載,請註明出處,否則將追究法律責任。

相關文章