Oracle
Oracle RAC 故障轉移無法正常工作
我在具有兩個節點的 RAC 環境中設置了 Oracle 11gR2。我設置了 SCAN,例如:我在 DNS 上設置了兩個條目,因此我可以 ping SCAN 名稱並到達任一節點。我也可以 ping 兩個
-vip
地址。理論上,新的 SCAN 功能應該比透明應用程序故障轉移 (TAF) 提供改進的功能,後者需要在每個客戶端中進行額外配置。使用 SCAN,我可以連接到 SCAN 地址,我應該能夠:
- 連接到數據庫並檢查我連接到的實例,例如(在 SQL*Plus 上):
select instance_name, host_name from v$instance;
- 關閉我連接使用的實例
shutdown abort
(在單獨的會話中)- 在我執行步驟 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
設置。