ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE 11G stream概念(3)

ORACLE 11G stream概念(3)

原创 Linux操作系统 作者:sinanwei 时间:2011-09-06 14:38:32 0 删除 编辑
5.4 追加日志Supplemental Logging
当一个字段变动时,supplemental logging记录哪个字段发生哪些变化到redo日志中,当capture进程去获取一个字段上发生的变化时,会将这些信息也写入到LCRs中,后续在dest db中,apply进程需要这些信息。
Log Group类型:
1.uncondition log goup:只要表上有变动,即记录指定字段的image,即使没有任何一个指定字段发生过变化,所以这种类型又叫做always log group;
2.condition log goup:至少有一个log group中的字段发生变化时,将为指定字段记录image;
Supplemental Logging类型:
1. Database级:for整个数据库
2. Table级:for单个表。它可以选择使用uncondition log goup,也可选择condition log goup;
对apply进程,那么必须激活以下类型的字段的该日志:
1. 在source db中用以定义为主键的字段,必须建立uncondition log group;
2.如果dst db中的apply进程并行度大于1,并且值为唯一性的字段、或者作为外键的字段、或者作为bitmap索引的字段、,如果它的数据来源于source db中的多个表的多个字段,那么必须为该字段定义condition log group,如果来源于source db中的一个字段,那么可以不指定supplemental logging;
3.在source db与dest db中不同名称的字段,必须执行uncondition log group。可以用DBMS_STREAMS_ADM的SET_KEY_COLUMNS为表的替代字段指定;
4.在source db的冲突解决列表中的字段,必须指定condition log group;
5.任何使用了dml hander、change handler、procedure DML handler、error handler必须指定unconditional log group;
6.在source db中,任何被用于rule或rule-based的字段都必须指定unconditional log group;
7.使用了虚拟字段以及相关的字段都需要指定unconditional log group;
8.任何在dest db中复制行子集的表及字段,必须指定unconditional log group;
如果不做相应的指定,那么source db中的变化就可能同步不到dest db中;
指定uncondition log group的方法:
给一个表的主键指定,名称由系统自动生成:
SQL> alter table table_name add supplemental log data (primary key) columns;
给一个表的所有字段指定:
SQL> alter table table_name add supplemental log data (all) columns;
给一个表的指定字段指定,并指定名称group_name:
SQL> alter table table_name add supplemental log group group_name(field1,field2) always;
这里always是区分uncondition和condition的标识。
指定condition log group的方法:
给一个表的外键指定,名称由系统自动生成:
SQL> alter table table_name add supplemental log data (foreign key) columns;
给一个表的唯一值字段指定,名称由系统自动生成:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10129726/viewspace-706740/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-08-10

  • 博文量
    28
  • 访问量
    71493