Oracle最高可用性架構之Data Guard管理

fengpinDBA發表於2013-12-27
管理日誌傳輸服務
==================================
1.檢查日誌傳輸服務
  SQL> select thread#,instance_name from gv$instance;  --檢查例項名稱對應的執行緒號
  SQL> select thread#,dest_id,max(sequence#)           --查詢每個例項所有目的地生成的日誌的最大序列號
       from v$archived_log
       group by thread#,dest_id
       order by thread#;
  (注:dest_id等於1對應初始化引數配置中的log_archive_dest_1,表示本地歸檔目的地;等於2對應初始化引數配置中的
        log_archive_dest_2,表示遠端Standby資料庫目的地)
  
  測試例子:
  SQL> alter system archive log current;
  SQL> r
  SQL> select thread#,dest_id,max(sequence#)
       from v$archived_log
       group by thread#,dest_id
       order by thread#;
  (注:RAC所有例項的日誌成功歸檔到所有目的地,證明RAC的日誌傳送服務工作正常)

  問題排查:
  SQL> select error from v$archive_dest_status;
  (注:如果日誌傳輸服務沒有正常工作,可以通過此表檢視原因)

2.檢視Standby資料庫Standby Redo日誌的使用情況
  說明:在日誌的實時傳輸過程中,需要使用到Standby資料庫的Standby Redo日誌。
  SQL> select thread#,sequence#,archived,status from v$standby_log;  --stnadby資料庫端執行
  SQL> select thread#,sequence#,status from v$log;  --主資料庫端執行
  (注:如果主資料庫的current聯機Redo日誌與Standby資料庫的active狀態的Standby Redo日誌序列號相同,證明啟用了實時傳輸)

3.監控日誌傳輸效能
  a.在Redo源資料庫執行以下SQL語句顯示目的地2的響應時間柱狀圖
  SQL> select frequency,duration
       from v$redo_dest_resp_histogram
       where dest_id = 2
       and frequency > 1
  (注:可以看出響應時間為xx秒的命中率為xx秒)

  b.在Redo源資料庫執行以下SQL語句顯示目的地2的最慢響應時間
  SQL> select max(duration)
       from v$redo_dest_resp_histogram
       where dest_id = 2
       and frequency > 1;

  c.在Redo源資料庫執行以下SQL語句顯示目的地2的最快響應時間
  SQL> select min(duration)
       from v$redo_dest_resp_histogram
       where dest_id = 2
       and frequency > 1;

4.自動發現和解決日誌缺失
  當Redo傳送恢復時,Redo傳輸服務可自動察覺Redo缺失,以下為減少Redo缺失解決時間的方式:
  a.Redo傳輸壓縮
    使用LOG_ARCHIVE_DEST_n引數的COMPRESSION屬性,明確在傳輸到目的地之前壓縮Redo資料
  b.並行Redo傳輸網路會話
    使用LOG_ARCHIVE_DEST_n引數的MAX_CONNECTIONS屬性,明確建立更多的會話用於傳送Redo,解決Redo缺失

5.手動解決日誌缺失
  1)物理Standby資料庫日誌缺失
    SQL> select * from v$archive_gap;  --在物理Standby資料庫執行
    SQL> select name                   --在主資料庫執行
         from v$archive_log
         where thread# = 1
         and dest_id = 1
         and sequence# >= 7 and sequence# <= 10;
    拷貝日誌到物理Standby資料庫,並在物理Standby資料庫執行:
    SQL> alter database register logfile '/physical_standby/thread1_dest/arcr_1_7.arc';
    SQL> alter database register logfile '/physical_standby/thread1_dest/arcr_1_8.arc';
    SQL> alter database register logfile '/physical_standby/thread1_dest/arcr_1_9.arc';
    SQL> alter database register logfile '/physical_standby/thread1_dest/arcr_1_10.arc';
  2)邏輯Standby資料庫日誌缺失
    SQL> select thread#,sequence#,file_name  --在邏輯Standby資料庫執行
         from dba_logstdby_log L
         where next_change# not in
               (select first_change# from dba_logstdby_log where L.thread# = thread#)
         order by thread#,sequence#;
    拷貝日誌到邏輯Standby資料庫,並在邏輯Standby資料庫執行:
    SQL> alter database register logical logfile '/disk1/oracle/dba/log-129880008_7.arc';
    SQL> alter database register logical logfile '/disk1/oracle/dba/log-129880008_8.arc';
    SQL> alter database register logical logfile '/disk1/oracle/dba/log-129880008_9.arc';
    SQL> alter database register logical logfile '/disk1/oracle/dba/log-129880008_10.arc';

6.Redo傳輸服務等待事件

 
        等待事件                                                        描述   
LNS wait on ATTACH    建立連線到所有ASYNC和SYNC Redo傳輸目的地的Redo傳輸會話話費的總時間   
LNS wait on SENDREQ   Redo資料被寫到所有ASYNC和SYNC傳輸目的地話費的總時間   
LNS wait on DETACH     終止連線到所有ASYNC和SYNC Redo傳輸目的地的傳輸Redo資料話費的總時間  
  
==================================

監控/管理日誌應用服務
==================================
1.檢查告警日誌
  Fri Sep 21 00:42:36 2012
  alter database recover managed standby database disconnect
  Attempt to start background Managed Standby Recovery process (racdg)
  Fri Sep 21 00:42:36 2012
  MRP0 started with pid=24, OS id=4536 
  MRP0: Background Managed Standby Recovery process started (racdg)
  started logmerger process
  Fri Sep 21 00:42:41 2012
  Managed Standby Recovery not using Real Time Apply
  Parallel Media Recovery started with 8 slaves
  Waiting for all non-current ORLs to be archived...
  All non-current ORLs have been archived.

2.查詢資料字典
  SQL> select process,status,thread#,sequence#,block#,blocks  --在Standby資料庫執行
       from v$managed_standby where process!='ARCH';
  (注:MRP0為介質恢復程式)

3.啟動Redo Apply
  SQL> alter database recover managed standby database;  --在前臺啟動Redo Apply
  (注:如果開始一個前臺會話,控制權不會返回到命令提示符)
  SQL> alter database recover managed standby database disconnect from session;  --在後臺啟動Redo Apply
  (注:以上語句開始一個單獨的伺服器程式,立即返回控制權給使用者。當恢復程式在後臺執行時,執行RECOVER語句的視窗能繼續執行其它工作
        disconnect from session選項表示Redo Apply在後臺會話中進行,以上兩種方式都只會在發生日誌切換的時候才應用日誌)
  
  SQL> alter database recover managed standby database using current logfile;  --在前臺啟動實時應用
  (注:using current logfile子句,表示Redo在接收到的時候就應用)
  SQL> alter database recover managed standby database using current logfile disconnect from session;  --在後臺啟動Redo實時應用

4.停止Redo Apply
  SQL> alter database recover managed standby database cancel;
==================================

修改Data Guard保護模式
==================================
1.驗證引數配置
不同保護模式對應LOG_ARCHIVE_DEST_n引數的配置要求
 
最高可用性                      最大效能                    最大保護   
AFFIRM                          NOAFFIRM                    AFFIRM   
SYNC                               ASYNC                       SYNC   
DB_UNIQUE_NAME       DB_UNIQUE_NAME        DB_UNIQUE_NAME  

2.設定資料保護模式
  啟動主資料庫在MOUNT模式,如果是RAC資料庫,關閉所有的節點,只啟動一個節點在MOUNT模式
  SQL> alter database set standby database to maximize {availability|performance|protection};  --在主資料庫修改
  SQL> alter database open;
  最後開啟RAC的其它節點的例項

3.檢視資料庫保護模式
  SQL> select protection_mode,protection_level from v$database;  --在主資料庫執行檢視主資料庫的保護模式
  SQL> select dest_id,database_mode,recovery_mode,protection_mode  --在主資料庫執行檢視目的地的資料庫模式
       from v$archive_dest_status
       where dest_id = 2;
==================================

快照Standby資料庫
==================================
1.將物理Standby資料庫轉換為快照Standby資料庫
步驟1: 停止物理Standby資料庫的Redo Apply
步驟2: 如果物理Standby資料庫是RAC,關閉所有例項,只保留一個例項
步驟3: 確保Standby資料庫在MOUNT模式,且沒有被開啟
步驟4: 確保閃回恢復區被配置
步驟5: 執行以下命令將物理Standby資料庫轉換為快照Standby資料庫:
SQL> alter database convert to snapshot standby;

2.將快照Standby資料庫轉換為物理Standby資料庫
步驟1: 如果Standby資料庫是RAC,關閉所有例項只保留其中一個例項
步驟2: 確保資料庫在MOUNT模式,但是沒有開啟
步驟3: 執行以下命令將快照Standby資料庫轉換為物理Standby資料庫
SQL> alter database convert to physical standby;
(注:轉換之後資料庫被解除安裝,必須重啟。當Redo Apply開始啟用時,快照Standby資料庫接收到的Redo資料將自動被應用)
==================================

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

相關文章