Oracle DG 修改邏輯Standby端資料

來源:互聯網
上載者:User

相對物理Standby,邏輯Standby的管理要複雜一點點。這個就是管理一個半資料庫和管理兩個資料庫的差異(假設Data Guard環境為一主一備的情況下),畢竟邏輯Standby只是邏輯上,彷彿與Primary資料庫一致,其實它是一個獨立啟動並執行,甚至可能與Primary資料庫完全不同的資料庫系統,對於這種配置環境,管理上多花點工夫想想也是應該的。

推薦閱讀:

Data Guard 配置 Standby Redo Log 

RMAN duplicate for Standby失敗解決過程

Data Gurad物理備份方式下以READ ONLY/WRITE模式開啟物理Standby 

RAC primary+Single Standby DG配置實踐

Oracle Standby 策略 PPT 

1、指定對象跳過應用

在預設情況下,接收自Primary的REDO資料中,所有能夠被邏輯Standby資料庫支援的操作都會在邏輯Standby端執行。如果你希望跳過對某些對象的某些操作的話,DBMS_LOGSTDBY.SKIP就能派上用場了。


先來看看DBMS_LOGSTDBY.SKIP的文法:


DBMS_LOGSTDBY.SKIP (


stmt                      IN VARCHAR2,


schema_name                IN VARCHAR2 DEFAULT NULL,


object_name                IN VARCHAR2 DEFAULT NULL,


proc_name                  IN VARCHAR2 DEFAULT NULL,


use_like                  IN BOOLEAN DEFAULT TRUE,


esc                        IN CHAR1 DEFAULT NULL);


除stmt外,其他都是選擇性參數,並且看字面意義就能明白其所指。例如,你想跳過SCOTT使用者下對dept表的DML操作,可以通過執行下列語句實現(執行該過程前需要先停止REDO應用):


SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;


Database altered.


SQL> EXEC DBMS_LOGSTDBY.SKIP('DML', 'SCOTT', 'DEPT');


PL/SQL procedure successfully completed.


SQL>ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;


Database altered.

 


2、恢複對象同步


如果邏輯Standby中的某些表取消了與Primary的同步維護,現在希望再恢複同步,沒問題,DBMS_LOGSTDBY家大業大,它還有個叫UNSKIP的門生專幹這個。


我們來看一下DBMS_LOGSTDBY.UNSKIP的文法:


DBMS_LOGSTDBY.UNSKIP (


stmt                  IN VARCHAR2,


schema_name            IN VARCHAR2,


object_name                IN VARCHAR2);


三項均為必選參數,各參數的定義與SKIP過程相同。


下面示範恢複tmp1表的同步。


首先查看當前邏輯Standby都有哪些對象處於不同步狀態,可以通過DBA_LOGSTDBY_SKIP視圖查看,例如:


SQL> select * from dba_logstdby_skip;


ERROR STATEMENT_OPT                  OWNER      NAME  U E PROC


----- ------------------------------ ---------- ----- - - ----------


N    DML                            SCOTT      DEPT  Y


N    INTERNAL SCHEMA                SYSTEM    %    Y


N    INTERNAL SCHEMA                SYS        %    Y


N    INTERNAL SCHEMA                OLAPSYS    %    Y


N    INTERNAL SCHEMA                SI_INFORMT %    Y


N    INTERNAL SCHEMA                MGMT_VIEW  %    Y


N    INTERNAL SCHEMA                ORDPLUGINS %    Y


N    INTERNAL SCHEMA                XDB        %    Y


N    INTERNAL SCHEMA                SYSMAN    %    Y


N    INTERNAL SCHEMA                WMSYS      %    Y


N    INTERNAL SCHEMA                DBSNMP    %    Y


注意在執行DBMS_LOGSTDBY.UNSKIP過程前,要停止當前的SQL應用狀態:


SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;


Database altered.


執行DBMS_LOGSTDBY.UNSKIP過程,恢複前面停止的scott.tmp1表的應用:


SQL> execute dbms_logstdby.unskip('DML', 'SCOTT', 'dept');


PL/SQL procedure successfully completed.

 


3、添加或重建對象


指定對象跳過應用雖然被取消,但是有可能在此期間由於Primary資料庫做過資料修改,兩端此時已經不同步,如果Standby端繼續應用極有可能導致應用錯誤的資料。


對於這類情況,Oracle也早有預見,DBMS_LOGSTDBY包中還有一個過程叫INSTANTIATE_TABLE,專門用來同步一下跳過的對象,以保持與Primary資料庫的一致。


DBMS_LOGSTDBY.INSTANTIATE_TABLE的調用文法如下:


DBMS_LOGSTDBY.INSTANTIATE_TABLE (


schema_name            IN VARCHAR2,


table_name            IN VARCHAR2,


dblink                IN VARCHAR2);


除了SCHEMA名稱和表名稱外,還需要提供一個資料庫鏈,因此這裡我們首先在邏輯Standby端建立一個串連Primary資料庫的資料庫鏈:


SQL> CREATE DATABASE LINK PRE_TBL_DATA CONNECT TO SYSTEM IDENTIFIED BY ADMIN


USING 'ORCL_PD';


Database link created.


執行使用DBMS_LOGSTDBY.INSTANTIATE_TABLE過程,重新同步SCOTT.TMP1表(注意執行該過程前別忘了暫停當前的SQL應用):


SQL>EXEC DBMS_LOGSTDBY.INSTANTIATE_TABLE('SCOTT', 'DEPT', 'PRE_TBL_DATA');


PL/SQL procedure successfully completed.


SQL> SELECT * FROM SCOTT.DEPT;


對象已被重建,然後重新啟動SQL應用即可:


SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;


Database altered.

 

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.