Oracle

Oracle RAC 故障轉移無法正常工作

  • December 12, 2016

我在具有兩個節點的 RAC 環境中設置了 Oracle 11gR2。我設置了 SCAN,例如:我在 DNS 上設置了兩個條目,因此我可以 ping SCAN 名稱並到達任一節點。我也可以 ping 兩個-vip地址。

理論上,新的 SCAN 功能應該比透明應用程序故障轉移 (TAF) 提供改進的功能,後者需要在每個客戶端中進行額外配置。使用 SCAN,我可以連接到 SCAN 地址,我應該能夠:

  1. 連接到數據庫並檢查我連接到的實例,例如(在 SQL*Plus 上):
select instance_name, host_name from v$instance;
  1. 關閉我連接使用的實例shutdown abort(在單獨的會話中)
  2. 在我執行步驟 1 的同一會話中,如果我重新執行相同的select語句,它應該會自動反彈到倖存的節點。

相反,我得到:

ORA-03113: end-of-file on communication channel
Process ID: XXXXX
Session ID: YYY Serial number: ZZ

這是怎麼回事?

注意:在第 2 步之後,我可以退出 SQL*Plus 並重新連接就好了。如果我嘗試留在同一個會話上,它就是行不通的。


如果我將客戶端中的 tnsnames.ora 修改為:

RAC =
 (DESCRIPTION =
   (LOAD_BALANCE = YES)
   (ADDRESS = (PROTOCOL = TCP)(HOST = cluster-scan)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = orcl)
     (FAILOVER_MODE =
      (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5)
      )
   )
 )

然後它按我期望的方式工作。這是在 11gR2 之前必須做的事情,但是 SCAN 應該自動處理所有這些,所以一個簡單的條目如下:

RAC =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = cluster-scan)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = orcl)
   )
 )

應該以完全相同的方式工作。

SCAN 應該為您提供連接時故障轉移,而不是執行時故障轉移(如 TAF)。您從哪裡獲得 SCAN 也意味著 TAF 的(錯誤)資訊?

SCAN 與“更好的故障轉移”沒有直接關係,唯一的區別是您不必指定多個HOST=條目,因為在內部它會將名稱後面的所有地址添加到主機列表中。因此它只是為了便於管理(基本上使用 DNS 作為服務目錄)。

如果你想要 TAF,除了 SCAN 之外,你還需要配置它。好消息是您可以在服務上配置它,因此您不需要更改連接字元串。

DBMS_SERVICE.CREATE_SERVICE()具體有failover_type=BASIC, failover_retries=100, failover_delay=5設置。

引用自:https://dba.stackexchange.com/questions/7476