邏輯Data Guard的物件操作
邏輯Data Guard的物件管理
一、指定物件跳過應用
使用DBMS_LOGSTDBY.SKIP(
stmt IN VARCHER2,
schema_name IN VARCHER2 DEFAULT NULL,
object_name IN VARCHER2 DEFAULT NULL,
proc_name IN VARCHER2 DEFAULT NULL,
use_like IN BOOLEAN DEFAULT TURE,
esc IN CHAR1 DEFAULT NULL
)
比如要跳過SCOTT使用者下對DG_TEST的DML操作
指定跳過物件之前需關閉SQL應用
SQL> alter database stop logical standby apply;
Database altered.
SQL> exec dbms_logstdby.skip(stmt => 'DML',schema_name => 'SCOTT', object_name => 'DG_TEST');
PL/SQL procedure successfully completed.
SQL> select OWNER,STATEMENT_OPT,NAME,USE_LIKE from dba_logstdby_skip;
OWNER STATEMENT_OPT NAME USE_LIKE
-------------------- -------------------- ---------- ----------
SCOTT DML DG_TEST Y
SYSTEM INTERNAL SCHEMA % Y
SYS INTERNAL SCHEMA % Y
OLAPSYS INTERNAL SCHEMA % Y
BI INTERNAL SCHEMA % Y
SI_INFORMTN_SCHEMA INTERNAL SCHEMA % Y
MGMT_VIEW INTERNAL SCHEMA % Y
SQL> alter database start logical standby apply immediate;
Database altered.
此時在primary端插入測試資料:
PRIMARY > select count(*) from scott.dg_test;
COUNT(*)
----------
8
PRIMARY > insert into scott.dg_test
2 select * from scott.dg_test
3 /
8 rows created.
PRIMARY > commit;
Commit complete.
PRIMARY > select count(*) from scott.dg_test;
COUNT(*)
----------
16
standby端檢視該DML操作將跳過應用
SQL> select count(*) from scott.dg_test;
COUNT(*)
----------
8
二、取消物件跳過應用
使用DBMS_LOGSTDBY.UNSKIP(
stmt IN VARCHAR2,
schema_name IN VARCHAR2,
object_name IN VARCHAR2)
SQL> select OWNER,STATEMENT_OPT,NAME,USE_LIKE from dba_logstdby_skip;
OWNER STATEMENT_OPT NAME USE_LIKE
-------------------- -------------------- ---------- ----------
SCOTT DML DG_TEST Y
SYSTEM INTERNAL SCHEMA % Y
具體步驟:
SQL> alter database stop logical standby apply;
Database altered.
SQL> exec dbms_logstdby.unskip('DML','SCOTT','DG_TEST');
PL/SQL procedure successfully completed.
SQL> select OWNER,STATEMENT_OPT,NAME,USE_LIKE from dba_logstdby_skip;
OWNER STATEMENT_OPT NAME USE_LIKE
-------------------- -------------------- ---------- ----------
SYSTEM INTERNAL SCHEMA % Y
SYS INTERNAL SCHEMA % Y
SQL> alter database start logical standby apply immediate;
Database altered.
再次在primary端插入資料看一些效果:
PRIMARY > select count(*) from scott.dg_test;
COUNT(*)
----------
16
PRIMARY > insert into scott.dg_test
2 value(‘DG_TEST_1’);
3 /
1 row created.
PRIMARY > commit;
Commit complete.
PRIMARY > select count(*) from scott.dg_test;
COUNT(*)
----------
17
standby端檢視結構:
SQL> select count(*) from scott.dg_test;
COUNT(*)
----------
9
一條資料已經傳輸到stanbyd,表的記錄總數不同是因為上次在練習跳過物件應用時插入的幾條資料無法在取消跳過後傳入到standby端
三、恢復物件資料
透過上述的測試可以看出,先是跳過某物件應用,再去啟用,這樣,在跳過應用期間的資料就無法同步到standby,針對這樣的問題,如若想恢復standby的資料與primary一致,可以透過DBMS_LOGSTDBY.INSTANTIATE_TABLE來恢復表中的資料:
DBMS_LOGSTDBY.INSTANTIATE_TABLE(
schema_name IN VARCHAR2,
table_name IN VARCHAR2,
dblink IN VARCHAR2
)
透過上面的語法格式可以看出,在使用dbms_logstdby.instantiate_table對錶中的資料進行恢復時,需要建立一個可以連線到primary端的資料庫鏈:
SQL> create database link dg_table_reco connect to system identified by oracle using 'orcl_p.tns';
Database link created.
其中,dg_table_reco是連線名,system是連線使用者,oracle使用者的密碼
測試資料庫連線是否可用:
SQL> select sysdate from dual@dg_table_reco;
SYSDATE
---------
11-MAR-14
開始重新同步資料:
SQL> set sqlprompt 'STADNDBY > '
STADNDBY > select count(*) from scott.dg_test;
COUNT(*)
----------
9
同步之前在dg_test表中共有9條記錄
STADNDBY > alter database stop logical standby apply;
Database altered.
STADNDBY > exec dbms_logstdby.instantiate_table('SCOTT','DG_TEST','DG_TABLE_RECO');
PL/SQL procedure successfully completed.
注意模式名和表名的大小寫
再次檢視測試表的資料,發現已完全同步至standby
STADNDBY > select count(*) from scott.dg_test;
COUNT(*)
----------
17
四、邏輯Standby端修改資料:
首先介紹一下standby的保護狀態
SQL> select guard_status from v$database;
GUARD_S
-------
NONE
DG對standby資料的保護狀態有三種:
ALL:資料庫將對所有物件啟動修改保護,出了SYS使用者,其他使用者不允許直接修改資料。
STANDBY:對處於邏輯Standby維護關係的物件啟動修改保護,仍然是出了SYS使用者其他使用者均不能直接修改資料。
NONE:不啟動資料保護。
修改Standby端資料庫的保護狀態:
SQL> alter database guard standby;
Database altered.
SQL> select guard_status from v$database;
GUARD_STAUS
---------------------
STANDBY
在STANDBY狀態要實現在DG環境中邏輯standby端修改資料,就要暫時釋放DG對該standby的控制:
alter session disable guard;
資料修改完成後別忘了將DG切換為啟用狀態:
alter session enable guard;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29320885/viewspace-1107742/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 搭建邏輯Data Guard 12c
- 邏輯Data Guard主備庫的轉換
- 管理邏輯STANDBY資料庫——DATA GUARD概念和管理資料庫
- 建立邏輯STANDBY資料庫——DATA GUARD概念和管理資料庫
- 【ASK_ORACLE】Oracle Data Guard(三)邏輯備庫的概念和優勢Oracle
- 邏輯Data Guard 中 Standby啟動實時應用沒效果 怎麼辦
- oracle 10g物理data guard 操作Oracle 10g
- Oracle data guard常用維護操作命令(轉)Oracle
- DATA GUARD部署模式——DATA GUARD概念和管理模式
- 介紹ORACLE DATA GUARD——DATA GUARD概念和管理Oracle
- physical data guard 的原理
- Data guard搭建
- oracle data guard!!Oracle
- Data Guard Broker系列之二:Data Guard Broker配置實戰
- physical data guard 的原理 (zt)
- DATA GUARD 簡介
- Data Guard 建立(ASM)ASM
- Oracle Data Guard配置Oracle
- Oracle 11g Data Guard Enabling Active Data GuardOracle
- [Data Guard]Oracle10g Data Guard學習筆記(一)Oracle筆記
- [Data Guard]Oracle10g Data Guard學習筆記(二)Oracle筆記
- [Data Guard]Oracle10g Data Guard學習筆記(三)Oracle筆記
- Java鎖的邏輯(結合物件頭和ObjectMonitor)Java物件Object
- oracle 邏輯物件與物理物件對應關係圖Oracle物件
- 物件導向——意圖與邏輯(四)物件
- 物理data guard原理的理解(zt)
- [轉]物理data guard原理的理解
- Oracle Data Guard Broker元件Oracle元件
- Oracle Data Guard簡介Oracle
- 單機搭建Data Guard
- Active Data Guard初探(一)
- DATA GUARD架構(一)架構
- Oracle Data Guard 介紹Oracle
- Data Guard Wait EventsAI
- ORACLE Data Guard--IOracle
- data guard switchover on solaris 10
- MySQL-WHERE子句 以及 邏輯操作符MySql
- DATA GUARD物理STANDBY的 SWITCHOVER切換