登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

飞哥的技术博客

世上无难事,只怕有心人!

 
 
 

日志

 
 
 
 

一步一步学DataGuard(18)逻辑standby之高级管理3 - 无名扫把 - CSDN博客  

2009-05-25 16:31:21|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 一步一步学DataGuard(18)逻辑standby之高级管理3收藏

我们前面提到,逻辑standby一个极具实用价值的特性即是可以边查询边应用,因此将其做为报表服务器专供查询是个很不错的想法,而且逻辑standby相对于物理standby而言更具灵活性,比如我们可以在逻辑standby上,对一些表创建primary库上并不方便创建的索引,约束,甚至可以做dml,ddl操作(当然,需要注意不要破坏了与primary之间同步的逻辑关系)。不过由于此时dg仍然控制着对逻辑standby表的读写操作,因此,如果你想对逻辑standby中的数据做些什么的话,alter session database disable|enable guard语句就必须牢记在心了,它拥有像“芝麻开门”一样神奇的能力,不信?下面我们就来感受一下吧。

JSSLDG2> create table tmp55 as select * From b;

create table tmp55 as select * From b

                                    *

JSSLDG2> alter session disable guard;

JSSLDG2> create table tmp55 as select * From b;

JSSLDG2> alter session enable guard;

提示:oracle建议还是尽可能不要在逻辑standby执行执行dml之类操作,以免破解其与primary之间同步的逻辑关系,当然,这只是个建议,如果你已经仔细看完了3.1章,并且对数据库表结构及存储结构了如指掌,那您就爱干嘛爱嘛。

如果说,某些表或者数据不需要dataguard保护(比如一些在逻辑standby端生成的统计表),这个时候就需要DBMS_LOGSTDBY.SKIP,前头已经介绍过了dbms_logstdby.skip的基本用法,下面我们来具体演示一下!

JSSLDG2> alter database stop logical standby apply;

JSSLDG2>  execute dbms_logstdby.skip('SCHEMA_DDL','JSS','TMP%');

JSSLDG2>  execute dbms_logstdby.skip('DML','JSS','TMP%');

JSSLDG2> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

JSSLDG2> select max(aa) from jss.tmp1;

JSSLDG2> select max(id) from jss.b;

JSSLDG2> select sequence#,applied from dba_logstdby_log;

JSSWEB> select max(aa) from jss.tmp1;

JSSWEB> insert into jss.tmp1 values ('i');

JSSWEB> insert into jss.b values (10);

JSSWEB> alter system switch logfile;

JSSWEB> select max(sequence#) from v$archived_log;

JSSLDG2> select sequence#,applied from dba_logstdby_log;

JSSLDG2> select max(id) from b;

JSSLDG2> select max(aa) from jss.tmp1;

     stmt                      IN VARCHAR2,

     schema_name               IN VARCHAR2,

     object_name               IN VARCHAR2);

JSSLDG2> select *from dba_logstdby_skip;

ERROR STATEMENT_OPT   OWNER      NAME            U E PROC

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

N     SCHEMA_DDL      JSS        TMP%            Y

N     DML             JSS        TMP%            Y

N     DML             JSS        TMP1            Y

JSSLDG2> alter database stop logical standby apply;

JSSLDG2> execute dbms_logstdby.unskip('DML','JSS','TMP1');

JSSLDG2>  execute dbms_logstdby.unskip('DML','JSS','TMP%');

JSSLDG2>  execute dbms_logstdby.unskip('SCHEMA_DDL','JSS','TMP%');

跳过同步已经取消了,紧接着我们需要再调用dbms_logstdby.instantiate_table过程重新同步一下跳地的对象,将skip这段时间,primary对tmp1表所做的操作同步过来(就俺看来,instantiate_table过程实际上是借助dblink重建了一遍对象),以保持与primary的一致。Dbms_logstdby.instantiate_table的语法如下:

DBMS_LOGSTDBY.INSTANTIATE_TABLE (

     schema_name         IN VARCHAR2,

     table_name          IN VARCHAR2,

     dblink              IN VARCHAR2);

JSSLDG2>  EXECUTE DBMS_LOGSTDBY.INSTANTIATE_TABLE('JSS','TMP1','GETJSSWEB');

JSSLDG2> select *from jss.tmp1;

JSSWEB> insert into jss.tmp1 values ('j');

JSSWEB> insert into jss.tmp1 values ('k');

JSSWEB> alter system switch logfile;

JSSWEB> select max(sequence#) from v$archived_log;

JSSLDG2> alter database start logical standby apply immediate;

JSSLDG2> select sequence#,applied from dba_logstdby_log;

JSSLDG2> select *from jss.tmp1;

一步一步学DataGuard(18)逻辑standby之高级管理3 - 无名扫把 - CSDN博客 - yangzhongfei - 中飞博客



引文来源  一步一步学DataGuard(18)逻辑standby之高级管理3 - 无名扫把 - CSDN博客
  评论这张
 
阅读(321)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018