物理DG與邏輯DG的區別與邏輯DG同步異常處理方法

wzhalal發表於2013-12-12
一、物理DG與邏輯DG的區別
官方文件是這樣說明的

The main difference between physical and logical standby databases is the manner
in which log apply services apply the archived redo logs:
    For physical standby databases, Data Guard uses redo apply technology, which
applies redo data on the standby database using standard recovery techniques
of the Oracle database server.
     For logical standby databases, Data Guard uses SQL apply technology, which
first transforms the received redo data into SQL statements and then executes
the generated SQL statements on the logical standby database.

實現機制不同,一個是基於block的,一個是基於SQL statement.
物理dg是通過傳日誌的形式block對block的完全把主庫複製,複製出來的從庫和主庫完全一樣
10g的物理dg只能只讀開啟,但11g可以讀寫開啟
從庫名必須和主庫名相同

邏輯dg是通過傳日誌,再應用logmin的技術將日誌中的sql挖出,處理,並重新執行
主庫和從庫可以不完全相同
邏輯dg從庫可以讀寫開啟
邏輯dg有些表和資料是不能同步的,從庫名可以和主庫名不同
另外邏輯dg出現問題的時候比較多,bug比較多

物理備資料庫通過重做應用與主資料庫保持同步.
邏輯備資料庫通過SQL應用與主資料庫保持同步.
物理備資料庫與主資料庫SCN保持一致.邏輯備資料庫只需要資料保持一致.

二、關於邏輯DG表不同步同步異常可以利用 dbms_logstdby 包跳過表
1> 檢查邏輯DG事件,確認是否存在異常
   select * from dba_logstdby_events  order by event_time desc;
   說明:如果status報錯,event列有詳細的觸發操作語句,常見的多數是主庫有新的DDL語句
2> 同步程式是否存在,一般異常終止,同步程式是不存在的
   SELECT * FROM v$logstdby_process;
3> 檢視日誌是否都已經同步完成
   select sequence#,applied from dba_logstdby_log order by sequence# desc ;


1> 同步程式不存在,主庫資料沒有同步到備庫
   select * from dba_logstdby_events  order by event_time desc;
   說明:檢視報錯資訊和導致報錯的事件,進行跳過處理
   --停止資料庫日誌應用
   alter database stop logical standby apply;
   --跳過DML操作 
   begin
        DBMS_LOGSTDBY.SKIP('DML','CXF','TMP_SAME_FILE');  --注意,表名要大寫哦,否則還會報錯的
   end;
   --跳過DDL 
   begin
        DBMS_LOGSTDBY.SKIP('SCHEMA_DDL','CUECM','TMP_1024');--注意,表名要大寫哦,否則還會報錯的
   end;
   --在主庫端對索引做ANALYZE,如果索引在備庫不存在,也會導致DG同步異常中斷,這個時候就不能用DDL和
     DML兩種跳過了,必須用下面這種方法跳過
   --跳過ANALYZE TABLE操作
   begin
        DBMS_LOGSTDBY.SKIP('ANALYZE TABLE','%','%',NULL);
   end;
   --跳過ANALYZE INDEX操作
   begin

       DBMS_LOGSTDBY.SKIP('ANALYZE INDEX','%','%', NULL);
   end;
   --啟動應用日誌
   alter database start logical standby apply immediate;
2> 同步程式存在,其它表都能同步,個別表無法同步
   這種情況,很可能是設定了表級別的對像跳過,可以通過以查查詢確認是否手動設定跳過同步
   select * from DBA_LOGSTDBY_SKIP; 
   然後通過DBMS_LOGSTDBY.UNSKIP()重新同步

三、無法在邏輯DG端進行DDL和DML操作


--進行DML操作前
   alter session disable guard;
   --操作過後
   alter session enable guard;

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

相關文章