逻辑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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29320885/viewspace-1107742/