2022年4月29日 星期五

7. Switchover and Failover

Data Guard 的角色切換可以分為 Switchover 與 Failover 兩種, Switchover 指的是 Primary 與 Standby 的角色互換,例如原本的 Primary 為 orcl 、 Standby 為 orcls ,在進行完 Switchover 之後 Primary 變為 orcls 、 Standby 變為 orcl ,並且繼續同步,不會破壞原本 Data Guard 的機制, Switchover 使用上都是有計畫性的,例如 Primary 需要停機做維護,此時不想讓服務停止太久就可以使用 Switchover 將 Standby 轉換為 Primary 並且將服務導向這邊,等到原本的 Primary 維護完成後再切換回來; Failover 指的是直接將 Standby Activate 起來,使用的時機是在 Primary 無法使用時,將 Standby 緊急轉換為新的 Primary 所用,這種情況大多都是未預期事件所造成, Failover 會切斷原本 Primary 與 Standby 的同步機制,當 Standby 轉換為新的 Primary 之後就無法再接續同步,進行完 Failover 之後, Data Guard 的架構要重新建立。 Switchover 與 Failover 同樣是把 Standby 轉換為 Primary ,其中最大的差別就是 Switchover 不會破壞 Data Guard 的同步,而 Failover 則是會破壞 Data Guard 的架構。


  • Switchover

進行 Switchover 需要到 Primary 與 Standby 分別進行操作,如果是 RAC Database 的話,須先將其它的 Instance 停下,只留下一個 Instance 進行操作,首先將原本的 Primary 轉換為 Standby 並且重啟至 mount 狀態 :

SQL> alter database commit to switchover to physical standby;

SQL> shutdown immediate

SQL> startup mount


然後再到原本的 Standby 進行轉換為 Primary ,並且將資料庫 open :

SQL> alter database commit to switchover to primary;

SQL> alter database open;


完成 Switchover 切換後可以從 v$database 確認資料庫是屬於哪一個角色 :

SQL> select database_role from v$database;


確認完成後於新的 Standby 開啟 MRP 繼續進行同步。


如果有使用 Data Guard Broker 的話, Switchover 只需要一個簡單的命令就可以完成,例如原本的 Primary 為 orcl 、 Standby 為 orcls ,透過 Broker 將 orcls 轉為 Primary 、 orcl 轉為 Standby :

$ dgmgrl sys/welcome1@orcl

DGMGRL> switchover to 'orcls';


完成後以 show configuration 確認即可,這邊要注意的是,登入 dgmgrl 必須要提供完整的 sys 使用者名稱與密碼,如果沒有提供密碼,那麼 Broker 就無法登入到資料庫完成重啟的動作,此時就必須再回到上述 SQL*Plus 的操作來完成。


在 Oracle 12c 之後, SQL*PLUS 對於 Switchover 的命令進行簡化,只需要在 Primary 執行一個命令即可 :

SQL> alter database switchover to orcls verify;

   (使用 verify 先進行切換前檢查)

SQL> alter database switchover to orcls;

   (實際進行切換)


這個命令在執行了 switchover 之後, Primary 與 Standby 的角色就會進行互換,最後需要做的是將新的 Standby (原本的 Primary) 重啟到 mount 、新的 Primary (原本的 Standby) 將其 open 。


  • Failover

進行 Failover 等於是把 Primary 與 Standby 的關係切斷,直接將 Standby 變成 Primary 開起來用,一般都是在 Primary 不可用時且非得以的情況下才會進行 Failover ,由於 Primary 已不可用,所以 Failover 操作上只需在 Standby 端進行,首先將 MRP 停止並且執行 Finish 的動作 :

SQL> alter database recover managed standby database cancel;

SQL> alter database recover managed standby database finish force;


執行了 Finish 動作表示告訴 Data Guard 即將要執行 Failover ,它會 Apply 當下 Standby Redo Log 所有的資料並且切斷 RFS ,一旦執行了 Finish 就無法再重新啟動 MRP 了, Finish 之後就可以將 Standby Activate 起來並且 open ,完成 Failover 的操作 :

SQL> alter database activate standby database;

SQL> alter database open;


如果是使用 Data Guard Broker ,那麼只需連線到 Standby 執行簡單的 Failover 指令即可 :

$ dgmgrl sys/welcome1@orcls

DGMGRL> failover to 'orcls';


執行了 Failover 之後, Primary 與 Standby 的關係就會被切斷,若要還原成原本的 Data Guard 架構就必須要重建 Standby 。


沒有留言:

張貼留言