data gurad物理備份方式中的failover轉換

eric0435發表於2012-12-04
切換分為switchover和failover,前者是無損切換,不會丟失資料,而後者則有可能會丟失資料,並且切換後原primary 資料庫也不再是該data guard 配置的一部分了.針對不同standby(邏輯或物理)的處理方式也不盡相同

角色轉換前的準備工作
檢查各資料庫的初始化引數,主要確認對不同角色相關的初始化引數都進行了正確的配置。
確保可能成為primary 資料庫的standby 伺服器已經處於archivelog 模式。
確保standby 資料庫的臨時檔案存在並匹配primary 資料庫的臨時檔案
確保standby 資料庫的RAC 例項只有一個處於open 狀態。(對於rac 結構的standby 資料庫,在角
色轉換時只能有一個例項startup。其它rac 例項必須統統shutdown,待角色轉換結束後再startup)

Switchover:
無損轉換,通常是使用者手動觸發或者有計劃的讓其自動觸發,比如硬體升級啦,軟體升級啦之類的。
通常它給你帶來的工作量非常小並且都是可預計的。其執行分兩個階段,第一步, primary 資料庫轉換為
standby 角色,第二步,standby 資料庫(之一)轉換為primary 角色,primary 和standby 只是簡單的角色互換.
Failover:
不可預知原因導致primary 資料庫故障並且短期內不能恢復就需要failover。
在執行failover 之前,儘可能將原primary 資料庫的可用redo 都複製到standby 資料庫。
注意,如果要轉換角色的standby 處於maximum protection 模式,需要你首先將其切換為maximum
performance模式.轉換standby 資料庫到MAXIMIZE PERFORMANCE 執行下列SQL 即可:
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
等standby 切換為新的primary 之後,你可以再隨意更改資料庫的保護模式。
maximum protection 模式需要確保絕無資料丟失,因此其對於提交事務對應的redo 資料一致性要求非常高,
另外,如果處於maximum protection 模式下primary 資料庫仍然與standby 資料庫有資料傳輸,此時alter
database 語句更改standby 資料庫保護模式會失敗,這也是由maximum protection 模式特性決定的。

下面演示failover的過程:
一物理standby的failover
注意幾點:
failover 之後,原primary 資料庫預設不再是data guard 配置的一部分。
多數情況下,其它邏輯/物理standby 資料庫不直接參與failover 的過程,
因此這些資料庫不需要做任何操作。
某些情況下,新的primary 資料庫配置之後,需要重新建立其它所有的standby 資料庫。
另外,如果待轉換角色的standby 處於maximum protection 或maximum availability 模式的話,
歸檔日誌應該是連續存在的.

一般情況下failover 都是表示primary 資料庫癱瘓,因此這種型別的切換基本上不需
要primary資料庫做什麼操作。
1、檢查歸檔檔案是否連續
查詢待轉換standby 資料庫的V$ARCHIVE_GAP 檢視,確認歸檔檔案是否連線:
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
未選定行
如果返回的有記錄,按照列出的記錄號複製對應的歸檔檔案到待轉換的standby 伺服器。這一步非常重
要,必須確保所有已生成的歸檔檔案均已存在於standby 伺服器,不然可能會資料不一致造成轉換時報錯。
檔案複製之後,透過下列命令將其加入資料字典:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filejytest1';
2、檢查歸檔檔案是否完整
分別在primary/standby 執行下列語句:
SQL> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;
該語句取得當前資料庫各執行緒已歸檔檔案最大序號,如果primary 與standby 最大序號不相同,必須將
多出的序號對應的歸檔檔案複製到待轉換的standby 伺服器。不過既然是failover,有可能primary 資料庫此時已經無法開啟,甚至無法訪問.
3、啟動failover執行下列語句:
SQL> alter database recover managed standby database finish force;
資料庫已更改。
FORCE 關鍵字將會停止當前活動的RFS 程式,以便立刻執行failover。
剩下的步驟就與前面switchover 很相似了
4、切換物理standby 角色為primary
SQL> alter database commit to switchover to primary;
資料庫已更改。
5、啟動新的primary 資料庫。
如果當前資料庫已mount,直接open 即可,如果處於read-only 模式,需要首先shutdown immediate,然
後再直接startup。
SQL> alter database open;
資料庫已更改

角色轉換工作完成。剩下的是補救措施(針對原primary 資料庫),由於此時primary 資料庫已經不再是
data guard配置的一部分,我們需要做的就是嘗試看看能否恢復原primary資料庫,將其改造為新的standby
伺服器。

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

相關文章