Oracle10g Supplemental Log(追加日志) [final]

在做Oracle10g Logical Standby 或 Oracle Stream的时候, 大多数时候,我们需要设置 Supplemental Log(追加日志) , 这个主要是因为Logical Standby或 Oracle Stream 是使用解析日志的方式得出DDL , DML 语句, 然后Apply到Standby 或 从库中 。      由于普通redo 日志只是记录rowid 及更改前后的列的值即可对数据库进行恢复或roll forward 等动作, 但是  类似 logical stand DB不是根据rowid 来做recover,    所以需要在redo里记录PK or unique index的信息来定位操作的data  行,  而只有pk或unique index对应的列被更改时才会被记录,所以 Supplemental Log 出现了 。  

 

物理Standby 在应用数据库块的时候,可以根据rowid 知道更新,插入或删除了哪些行, 但是 logical standby及stream 应用中都是采用解析log的方式Apply SQL , 而不是block ,  源数据库上做的操作需要反映到目标数据库上的table,  这里需要注意, 主库的redo在备库中解析出来后每一行数据的变更都会生成一条SQL (比如主库中的一个批量更新SQL , 在备库可能是 1000 条SQL 语句) , 这就要求备库能够唯一区别出每一条数据  , 由于主库备库只是逻辑上一致,ROWID属于物理结构,是不一样的 (block位置也许完全不一样了),  那么备库需要能够唯一区别出一条数据只有通过pk 或 unique index 来进行判断  。

情况一:     对于有pk 或unique index 的table  , 且pk 或 unique index 是由一个字段组成,不是组合索引。 如果每次更新的是PK列或unique index列,  那么可以不用启用 Supplemental Log , redo log 会附加记录这些pk 或unique index  , 以便logical standby 等进行恢复的时候能知道哪些行被更新了 。 这样生成的redo log也是最小的。 但是如果更新的不是PK或unique index列,那么还是需要启用Supplemental Log 的, 以便记录PK/FK , unique index信息 。

情况二 :     对于有但只有组合的pk 或组合的unique index 的table (index由多个字段组成) , 那么需要启用 Supplemental Log , 如果更新了pk 中的部分字段, Supplemental Log 的作用就是将pk的其余部分也记录到redo log 中 。 

情况三 :     对于没有pk 或 unique index  的table , 数据库需要启用Supplemental Logging,  对于更新操作, Oracle会同时附加一些能够唯一标识修改记录的列到redo log中 。  这种情况下oracle会将所有列(提示,非lob , long之类大字段类型的列)  都做为附加信息记录到redo中,这种情况下redo有可能增长迅速,并且在target端应用时也会受到一些影响。因此oracle建议最好为每个涉及到复制的表都创建主键或者唯一键。


 

对于选择的列和那些用于精确定位的附加列的组合,oracle也对其做了定义叫做supplemental log group。随后oracle又对supplemental log group做了分类,目的是更精确的设置redo  log中都记录些什么信息,分如下两类:


a.Unconditional Supplemental Log Groups:无条件记录指定列的前映像,而不管发生修改操作的是不是指定列。  因此它还有个外号,叫"老记录日志组"。
b.Conditional Supplemental Log Groups:只有至少一个指定列发生修改操作时被触发,并记录下修改列的前映像。

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

转载于:http://blog.itpub.net/35489/viewspace-630259/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值