邏輯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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【ASK_ORACLE】Oracle Data Guard(三)邏輯備庫的概念和優勢Oracle
- Oracle Data Guard Broker元件Oracle元件
- Oracle Data Guard簡介Oracle
- 單機搭建Data Guard
- bd_ticket_guard_client_dataclient
- Oracle Data Guard和Broker概述Oracle
- 【DG】Data Guard搭建(physical standby)
- 1 關於 Oracle Data GuardOracle
- 2 Oracle Data Guard 安裝Oracle
- 1 Oracle Data Guard Broker 概念Oracle
- 使用Data Guard Broker進行Data Guard物理備用庫配置(Oracle 19c)Oracle
- Java鎖的邏輯(結合物件頭和ObjectMonitor)Java物件Object
- Bd-Ticket-Guard-Client-Data逆向client
- 8 Oracle Data Guard Broker 屬性Oracle
- 9 Oracle Data Guard 故障診斷Oracle
- oracle 11g data guard維護Oracle
- 4.1.6 Oracle Restart 與 Oracle Data Guard 整合OracleREST
- 【DATAGUARD】Oracle19c Data Guard BrokerOracle
- 2 開始實用 Oracle Data GuardOracle
- 19 Oracle Data Guard 相關檢視Oracle
- 18 與Oracle Data Guard 相關的SQL語句OracleSQL
- 需要了解的Data Guard理論知識(一)
- 需要了解的Data Guard理論知識(二)
- 需要了解的Data Guard理論知識(三)
- MySQL-WHERE子句 以及 邏輯操作符MySql
- 6 Oracle Data Guard Protection Modes 保護模式Oracle模式
- 【DG】Data Guard主備庫Failove切換AI
- 【DG】Data Guard主備庫Switchover切換
- 15 Oracle Data Guard Scenarios 保護場景OracleiOS
- A Oracle Data Guard Broker 升級和降級Oracle
- 【ASK_ORACLE】Oracle Data Guard(一)DG架構Oracle架構
- Oracle 12.2 How to Generate AWRs in Active Data Guard Standby DatabasesOracleDatabase
- Oracle Data Guard Feature 12cR2系列(二)Oracle
- Oracle Data Guard Feature 12cR2系列(一)Oracle
- 2024.04.19每日收穫之連結串列與邏輯操作
- CAD屬性編輯操作——物件屬性教程物件
- 邏輯題
- 使用Broker管理Data Guard——停用、改保護模式等模式
- [20221111]19c配置Data Guard Broker問題.txt