安裝完RAC以後dba需要2點手工操作

zhanglei_itput發表於2009-03-19

    今天完成了第三次在vm上安裝RAC的測試環境搭建,這次除了一些硬體故障耽誤一些時間以外,其他的工作都還算是蠻順利的。但是在安裝完RAC以後,有2個工作是需要dba在產品上線之前做好測試工作的:

    1.解決ORA-12545: 因目標主機或物件不存在問題
       這個問題是在修改資料庫內部local_listener時,如果沒有使用串,而是識別符號導致的一個錯誤,屬於oracle的一個bug。
有兩個關於listener的引數:
SQL> conn sys/oracle@devdb as sysdba
已連線。   
 SQL> show parameter listener
             NAME                                     TYPE       VALUE
             ------------------------------------ ----------- ------------------------------
             local_listener                        string
             remote_listener                    string      LISTENERS_DEVDB
 此時需要分別修改兩個instance的local_listener引數,修改為靜態註冊,即:SQL>  show parameter instance_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      devdb1
SQL> alter system set local_listener='LISTENERS_DEVDB1'scope=both sid='devdb1';
System altered.
SQL> show parameter listener
NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
local_listener        string  LISTENERS_DEVDB1
remote_listener        string  LISTENERS_DEVDB
但是此時在連線時會出現下面的錯誤
SQL> conn
sys/oracle@devdb as sysdba
已連線。
SQL> conn
sys/oracle@devdb as sysdba
ERROR:
ORA-12545: 因目標主機或物件不存在, 連線失敗
警告: 您不再連線到 ORACLE。
SQL> conn
sys/oracle@devdb as sysdba
ERROR:
ORA-12545: 因目標主機或物件不存在, 連線失敗
這個問題是oracle的一個bug導致的
meitalink的相關id:364855.1
subject: RAC connection redirected to wrong host/ip ora-12545
解決方法:把引數修改成帶vip地址的串(雙節點)
SQL> alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.230.68)(PORT = 1521))' scope=both sid='devdb1';
System altered.
SQL> show parameter listener
NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
local_listener        string  (ADDRESS = (PROTOCOL = TCP)(HO
       ST = 192.168.230.68)(PORT = 15
       21))
remote_listener        string  LISTENERS_DEVDB
SQL> conn
sys/oracle@devdb as sysdba
已連線。
SQL> conn
sys/oracle@devdb as sysdba
已連線。
SQL> conn
sys/oracle@devdb as sysdba
已連線。
SQL> conn
sys/oracle@devdb as sysdba
已連線。

    2.(TAF)透明故障切換測試
      
  叢集有一個十分強大的功能,就是可以實現例項間的透明故障切換,如果一個例項down掉的話,只要在客戶端配置了TAF,那麼客戶不會發現連線中斷,而是繼續之前的操作,但是後臺已經把例項切換到另外一個例項了。安裝完叢集,我們需要在客戶端修改tnsnames.ora中的引數,從而實現TAF的目的。
DEVDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.230.68)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.230.69)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = devdb)
    
  (FAILOVER_MODE = 
                      (TYPE = SELECT)
                      (METHOD = BASIC)     /*新增這3行表示配置TAF*/
      ) ) )
測試結果如下:
SQL> conn sys/oracle@devdb as sysdba
已連線。
SQL> show parameter instance_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      devdb1
此時在另外一個視窗shutdown例項1
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> show parameter instance_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      devdb2 /*此時連線沒有中斷,但是客戶連線的例項自動切換到另外一個可用的例項了*/
注:此時想到一個問題,oracle尋找可用的例項是按照順序查詢麼?這種查詢方法是否類似於hp的serviceguard?當主節點切換到備用節點後,即使主節點好了,當備用節點失效的時候,hp的package是不會自動再切回來的,需要手工切換,那麼oracle是否也是這樣?當節點1失敗,客戶端連線會自動切換到節點2,那麼當節點1好了,節點2down掉的話,客戶端的連線是否會自動再切換回節點1?測試的結果是,oracle會自動再次切換回可用的例項。測試結果如下:(停掉節點2,啟動節點1)
SQL> show parameter instance_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      devdb2

SQL> conn sys/oracle@devdb1 as sysdba
Connected.
SQL> startup
ORACLE instance started.
Total System Global Area  230686720 bytes
Fixed Size      1266752 bytes
Variable Size    104860608 bytes
Database Buffers   121634816 bytes
Redo Buffers      2924544 bytes
Database mounted.
Database opened.
SQL> conn
sys/oracle@devdb2 as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> show parameter instance_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      devdb1

備註:在TAF切換的時候,後臺的alert日誌會有一些有關cache fusion的複製資訊,具體還要進一步在學習和研究:
Reconfiguration started (old inc 12, new inc 14)
List of nodes:
 0
 Global Resource Directory frozen
 * dead instance detected - domain 0 invalid = TRUE
 Communication channels reestablished
 Master broadcasted resource hash value bitmaps
 Non-local Process blocks cleaned out
Thu Mar 19 15:53:50 2009
 LMS 0: 0 GCS shadows cancelled, 0 closed
 Set master node info
 Submitted all remote-enqueue requests
 Dwn-cvts replayed, VALBLKs dubious
 All grantable enqueues granted
 Post SMON to start 1st pass IR
Thu Mar 19 15:53:50 2009
 LMS 0: 3035 GCS shadows traversed, 0 replayed
Thu Mar 19 15:53:50 2009
 Submitted all GCS remote-cache requests
 Fix write in gcs resources
Reconfiguration complete
Thu Mar 19 15:53:50 2009
Instance recovery: looking for dead threads
Instance recovery: lock domain invalid but no dead threads
參考文獻:

Article-ID: Note 453293.1
Title: 10g & 11g :Configuration of TAF(Transparent Application Failover) an
d Load Balancing
Article-ID: Note 226880.1
Title: Configuration of Load Balancing and Transparent Application Failover

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

相關文章