熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle] Data Guard 之 淺析Switchover與Failover

2013-11-13 22:26:11  來源: Oracle 
以下是對Oracle中Switchover與Failover的使用進行了詳細的分析介紹需要的朋友參考下  

  Data Guard主從庫之間的角色切換分為以下兩種
)Switchover
Swithchover通常都是人為的有計劃的進行角色互換比如升級等它通常都是無損的即不會有數據丟失其執行主要分為兩個階段
Primary轉為Standby
Standby(之一)轉為Primary
)Failover
Failover是指由於Primary故障無法短時間恢復Standby不得不充當Primay的角色如果處於最高性能模式這種切換很有可能導致數據丟失

  下面分別演示物理Standby的Switchover和Failover(邏輯Standby的切換類似)

   物理Standby執行Switchover
) 確認pirmary是否可以切換為standby
PRIMARY>select switchover_status from v$database;
SWITCHOVER_STATUS

TO STANDBY
) 切換primary為standby
PRIMARY>alter database commit to switchover to physical standby;
) 啟動原primary到mount狀態
此時原primary就是以standby身份在運行了
) 確認standby是否可以切換為primary
STANDBY>select switchover_status from v$database;
SWITCHOVER_STATUS

TO PRIMARY
) 切換standby為primary
STANDBY>alter database commit to switchover to primary;
Database altered
STANDBY>alter database open;
Database altered
) 驗證
PRIMARY>select database_role from v$database;
DATABASE_ROLE

PHYSICAL STANDBY
STANDBY>select database_role from v$database;
DATABASE_ROLE

PRIMARY
可以看到原來的primary現在變成standby原來的standby變成primary了
檢查新的primary的log_archive_dest參數的設置是否正確
STANDBY>show parameter log_archive_dest_
NAME                                 TYPE        VALUE

log_archive_dest_            string      service=ODMS ARCH VALID_FOR
                                                              =(ONLINE_LOGFILESPRIMARY_ROLE
                                                               ) DB_UNIQUE_NAME=ODMS
STANDBY>show parameter log_archive_dest_state_
NAME                                 TYPE        VALUE

log_archive_dest_state_             string      ENABLE
在新primary端做log switch:
STANDBY>alter system switch logfile;
System altered
STANDBY>select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)

          
在新standby端查看
PRIMARY>select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)

          
兩邊的歸檔日志的最大序號吻合說明switchover成功

   物理Standby執行Failover
檢查standby歸檔文件是否連續
STANDBY>SELECT THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
no rows selected
這一步很重要必須確保所有已生成的歸檔文件都已傳到standby服務器
如果上述語句有返回結果則必須把缺失的歸檔文件從primary端復制到standby端然後通過以下命令將其加入數據庫
STANDBY>alter database register physical logfile filespec
檢查standby歸檔文件是否完整
STANDBY>SELECT UNIQUE THREAD# AS THREAD MAX(SEQUENCE#) OVER (PARTITION BY threa
d#) AS LAST from V$ARCHIVED_LOG;
    THREAD       LAST

                
通過上述語句可以查出standby目前序號最大的歸檔日志為如果在primary端有比更大的歸檔日志把它們拷貝過來然後通過以下命令將其加入數據庫
STANDBY>alter database register physical logfile filespec
)啟動failover
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;)切換為primaryTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;STANDBY>select database_role from v$database;DATABASE_ROLEPRIMARY


From:http://tw.wingwit.com/Article/program/Oracle/201311/19104.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.