程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle] Data Guard 之 淺析Switchover與Failover

Oracle] Data Guard 之 淺析Switchover與Failover

編輯:關於Oracle數據庫
    以下是對Oracle中Switchover與Failover的使用進行了詳細的分析介紹,需要的朋友參考下  

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

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

    1. 物理Standby執行Switchover
    1) 確認pirmary是否可以切換為standby
    PRIMARY>select switchover_status from v$database;
    SWITCHOVER_STATUS
    --------------------
    TO STANDBY
    2) 切換primary為standby
    PRIMARY>alter database commit to switchover to physical standby;
    3) 啟動原primary到mount狀態
    此時原primary就是以standby身份在運行了。
    4) 確認standby是否可以切換為primary
    STANDBY>select switchover_status from v$database;
    SWITCHOVER_STATUS
    --------------------
    TO PRIMARY
    5) 切換standby為primary
    STANDBY>alter database commit to switchover to primary;
    Database altered.
    STANDBY>alter database open;
    Database altered.
    6) 驗證
    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_2
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    log_archive_dest_2            string      service=O01DMS0 ARCH VALID_FOR
                                                                  =(ONLINE_LOGFILES,PRIMARY_ROLE
                                                                   ) DB_UNIQUE_NAME=O01DMS0
    STANDBY>show parameter log_archive_dest_state_2
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ---------------------
    log_archive_dest_state_2             string      ENABLE
    在新primary端做log switch:
    STANDBY>alter system switch logfile;
    System altered.
    STANDBY>select max(sequence#) from v$archived_log;
    MAX(SEQUENCE#)
    --------------
               479
    在新standby端查看:
    PRIMARY>select max(sequence#) from v$archived_log;
    MAX(SEQUENCE#)
    --------------
               479
    兩邊的歸檔日志的最大序號吻合,說明switchover成功。

    2. 物理Standby執行Failover
    1). 檢查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'
    2). 檢查standby歸檔文件是否完整
    STANDBY>SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY threa
    d#) AS LAST from V$ARCHIVED_LOG;
        THREAD       LAST
    ---------- ----------
             1        479
    通過上述語句可以查出standby目前序號最大的歸檔日志為479,如果在primary端有比479更大的歸檔日志,把它們拷貝過來,然後通過以下命令將其加入數據庫:
    STANDBY>alter database register physical logfile 'filespec'
    3)啟動failover
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;4)切換為primaryTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
    ALTER DATABASE OPEN;STANDBY>select database_role from v$database;DATABASE_ROLE----------------PRIMARY

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved