ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SUPPLEMENTAL LOG

SUPPLEMENTAL LOG

原创 Linux操作系统 作者:rocky_gao 时间:2010-07-20 15:25:13 0 删除 编辑

事实上,目前最有可能用到Supplemental Logging的也只有逻辑standby和streams这两项特性。我们都知道,这两项特性的数据应用都属于逻辑应用,类似source database执行update语句之类,结果也要反映到target database,如何准确判断出source端修改的列,在target端中应该更新到哪条记录上呢?根据rowid?显然不靠谱啊,都说了是逻辑的,块的位置完全不一样,rowid已无用武之地。通过表中的唯一键?在更新表中记录时,将主键或唯一键做为附加的信息,与被修改的列一起存入redolog中,对于没有主键唯一键的表,则将表中所有列统统组合做为附加信息存入redolog,这样target端在分析redolog时,就知道该更新表中的哪些记录了。

数据库启用了Supplemental Logging之后,对于修改操作,oracle就会同时附加一些能够唯一标识修改记录的列到redolog中,对于拥有主键或唯一键的表,这个操作最简单,只需要附加主键或唯一键即可,这样生成的redo也是最小的,当然这只是一个理想状态,现实情况下某些表可能无法创建主键/唯一键,或者历史原因确无主键/唯一键,这种情况下oracle会将所有列(提示,非log,long之类大字段类型的列)都做为附加信息记录到redo中,这种情况下redo有可能增长迅速,并且在target端应用时也会受到一些影响。因此oracle建议最好为每个涉及到复制的表都创建主键或者唯一键。

对于选择的列和那些用于精确定位的附加列的组合,oracle也对其做了定义叫做supplemental log group。随后oracle又对supplemental log group做了分类,目的是更精确的设置redolog中都记录些什么信息,分如下两类:
a.Unconditional Supplemental Log Groups
:无条件记录指定列的前映像,而不管发生修改操作的是不是指定列。因此它还有个外号,叫"老记录日志组"。
b.Conditional Supplemental Log Groups
:只有至少一个指定列发生修改操作时被触发,并记录下修改列的前映像。

Supplemental Logging可以在数据库级设置,也可以精确到表级设置,对于数据库级有两种类型:minimal logging和identification key logging,其主要区别就在于写入redolog中的数据详尽程度不同。

参考:

http://space.itpub.net/7607759/viewspace-462640

http://www.youyus.com/2009/08/09/oracle-supplemental-%e8%a1%a5%e5%85%a8%e6%97%a5%e5%bf%97%e4%bb%8b%e7%bb%8d/

PS:

1,Database Supplemental Logging Can be enabled:

For all columns

For primary key columns

For unique columns

For foreign key columns;

2,All columns are included with the exception of:

LONG

LOB

LONG RAW

Abstract Data Types

Collections

3,To monitor database level supplemental logging:

SELECT
    supplemental_log_data_min,
    supplemental_log_data_pk,
    supplemental_log_data_ui,
    supplemental_log_data_fk,
    supplemental_log_data_all
FROM v$database;

4,To specify a conditional supplemental log group for unique  key column(s) and/or bitmap index column(s):

ALTER TABLE t1
ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;

5,To specify a conditional supplemental log group that includes all foreign key columns:

ALTER TABLE t1
ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;

6,To specify a conditional supplemental log group that includes selected columns:

ALTER TABLE t1
ADD SUPPLEMENTAL LOG GROUP t1_g1 (c1,c3);

7,To check whether minimal supplemental logging is enabled:

SELECT supplemental_log_data_min
FROM v$database;

8,DBA_LOG_GROUPS view Describes currently configured supplemental log groups

9,DBA_LOG_GROUP_COLUMNS view Describes columns in currently configured supplemental log groups

 

 

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

上一篇: ORA-03136
请登录后发表评论 登录
全部评论

注册时间:2010-04-09

  • 博文量
    112
  • 访问量
    299800