Oracle 补充日志(Supplemental Logging)说明


补充日志:只要是针对 UPDATE 命令的,是对重做日志记录中 变更矢量块的补充信息,增加了变更矢量记载的记录量。日志挖掘器(LogMiner)、闪回事务查询、闪回事务等都需要 补充日志的支持。尤其是 日志挖掘器如果发现未启用补充日志,就拒绝服务。也就是说补充日志主要是为UPDATE 命令服务的,补充的目的是高度还原 UPDATE 命令,避免因为update  命令造成的行迁移和行移动,让LogMiner 通过分析重做日志中识别 update 命令 不是 由 insert 和 delete  完成的。如果未启用补充日志,重做日志只将 UPDATE 命令更改的字段的旧值保存在撤销数据块的变更矢量中。而在数据块中的变更矢量中记载被修改后的字段的新值。同行中的未被修改的字段,不会被记载。如果启用了补充日志,重做日志中的撤销数据块的变更矢量中会记录 被修改字段前的值和修改后的值,而且还会记录修改字段的那个条件的值。即变更矢量中会记载:几号数据文件+几号文件中的几号块+第几个字段+修改后的值+修改前的值+“where 条件” 的值。


行移动: 指 update 命令执行时时,在索引组织表中有时会导致整行被转移至另一个索引块中。该情况或过程称为行移动。

行迁移:如果是在堆栈表中,update 命令导致行太长,在数据块空间不足的情况下会将部分(行头部除外)迁移到另一个数据块中,行头任然保留在原数据块中。


补充日志分为:数据库级补充日志、 表级补充日志

其他补充日志都是基于数据库级最小补充日志之上的,如果未启用数据库级最小补充日志,在启用或使用其他补充日志时,会自动启用数据库的最小补充日志(Implicit)。


数据库级补充日志分为:最小补充日志、标识关键字段补充日志

最小补充日志:是最基本的一种数据库级补充日志,而 LogMiner 正是依赖最小补充日志工作服务的(即识别 行移动 行迁移)。
启用最小补充日志命令: ALTER DATABASE ADD Supplemental LOG DATA ;

关闭最小补充日志命令:ALTER DATABASEDROP SupplementalLOG DATA;

标识关键字段补充日志:分为主键、外键、唯一索引、全体字段 补充日志4种。


主键补充日志:

在update 命令的重做记录中添加被修改行的主键字段的旧值,无论是否被修改,都记录。

如果表没有主键,则由长度最小的唯一索引字段代替,若连唯一索引也没有,则记录该行所有字段。
alter database add supplemental log data (Primary key) columns ;

唯一索引补充日志:

唯一索引主要是为 复合索引(唯一)服务的。只有唯一索引的字段被 update 时,才会记录该字段被修改前的值。

alter database add supplemental log data (unique) columns ;

外键补充日志:

同唯一索引补充日志一样,只有外键字段被 update 时,才会记录被修改前的旧值,即也是为复合外键服务的。

alter database add supplemental  log data (foreign key ) columns ;

全体字段补充日志:

顾名思义就所有字段的值不论是否被修改都记录。会导致磁盘快速增长,LGWR进程繁忙。不建议使用。

alter database add supplemental log data (all) columns ;

这 4 种补充日志可以并行使用,效果累加。


表级补充日志分为: 主键、唯一索引、外键、全体字段、用户自定义字段 5种。

前 4 种 同数据库级标识关键字段补充日志效果用法一样。只不过是在特定表上启用补充日志

1、 alter table tb_name add supplemental log data (primary key) columns ;
2、alter  table tb_name add supplemental log data (unique) columns ;
3、 alter table tb_name add supplemental log data (foreign key) columns ;
4、 alter table tb_name add supplemental log data (all) columns ;
5、 alter table tb_name add supplemental log group group_name  (col01,col02,col05,col09) | always ;     

自定义字段表级补充日志:

用户可以任意指定哪些字段的旧值需要被补充日志记录。

有条件日志组:只要补充日志组中至少一个列被修改(update),那么就要记录所有(日志组)指定列的前镜像(旧值)

无条件日志组:当表被修改时要记录所有(日志组)指定列的前镜像(旧值),无论改变是否对任一(日志组)指定列造成影响。需添加 always 关键字。

官方文档说明:

conditional log group

supplemental log group that logs the before images of all specified columns only if at least one of the columns in the supplemental log group is modified.

unconditional log group

supplemental log group that logs the before images of specified columns when the table is changed, regardless of whether the change affected any of the specified columns.


表级补充日志的情况 通过 dba_log_groups 和 dba_log_group_columns 视图查询获得


补充日志不是独立的日志,而是对重做日志变更矢量的补充。LogMiner、闪回事务、闪回事务查询等功能需要开启补充日志才能正常工作。

补充日志可分为两类数据库级别补充日志和表级别补充日志,数据库级别补充日志可分为最小补充日志、主键补充日志、唯一索引补充日志、外键补充日志、全体补充日志6种,表级别补充日志在数据库级别补充日志的基础上增加了一种自定义补充日志,没有最小补充日志。

因为insert会记录所有修改后字段,delete会记录所有修改前字段,所以补全日志只对update产生影响,开启补全日志时共享池中的SQL游标都会失效,他们的影响和功能如下:

  
  

最小补充日志



主键补充日志



唯一补充日志



Update操作的影响



产生特殊的日志信息,可以识别update命令产生的行迁移和行转换。Logminer和闪回事务查询功能需要最小补全日志支持。打开最小补全日志会使共享池SQL游标失效。



无条件补充日志,无论主键是否被修改旧值都会被记录到日志中。没有主键则记录长度最小唯一非空索引,没有非空唯一索引则记录所有字段。依赖最小补全日志,开启主键补充日志自动开启最小补充日志。关闭最小补全日志自动关闭主键补全日志



有条件补充日志,当复合唯一索引的其中一个字段被修改时,唯一索引的所有字段旧值都会被记录。唯一补充日志专门为复合唯一索引服务。



开启/关闭



开启/关闭:

  

alter database add/drop supplemental log  data



开启/关闭(数据库级)

  

alter database add/drop supplemental log  data (primary key)  columns

  

开启/关闭(表级)

  

alter table T1 add/drop supplemental log  data (primary key)  columns



开启/关闭(数据库级)

  

alter database add/drop supplemental log  data (unique)  columns

  

开启/关闭(表级)

  

alter table T1 add/drop supplemental log  data (unique)  columns



依赖





依赖最小补全日志



依赖最小补全日志



  
  

外键补充日志



全体补充日志



自定义补充日志()



Update操作的影响



有条件补充日志,当复合外键索引的其中一个字段被修改时,外键索引的所有字段旧值都会被记录。唯一补充日志专为复合外键索引服务。



无条件补充日志,表的所有字段旧值都会被记录(除了LOBLONG类型)。



/无条件补充日志,设置多个字段为日志组,日志组中的任何字段被修改,整个日志组字段的旧值都记录在日志中。



开启/关闭



开启/关闭(数据库级)

  

alter database add/drop supplemental log  data (foreign key)  columns

  

开启/关闭(表级)

  

alter table T1 add/drop supplemental log  data (foreign key)  columns



开启/关闭(数据库级)

  

alter database add/drop supplemental log  data (all) columns

  

开启/关闭(表级)

  

alter table T1 add/drop supplemental log  data (all) columns



开启/关闭(表级)

  

alter table T1 add/drop supplemental log  group GROUPNAME(C1,C2,C3) allways



依赖



依赖最小补全日志



依赖最小补全日志



依赖最小补全日志



原文链接:

http://blog.csdn.net/zhaowenzhong/article/details/9623937

http://www.itpub.net/thread-1790897-1-1.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值