Oracle DG 修改邏輯Standby端資料

來源:互聯網
上載者:User

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

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應用):

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.