本文整理自网络。感谢原作者:云卷云舒
一、什么是Supplemental Logging。
oracle对supplemental log group做了分类,目的是更精确的设置redolog中都记录些什么信息,分如下两类:
1、Unconditional Supplemental Log Groups:无条件记录指定列的前映像,而不管发生修改操作的是不是指定列。
2、Conditional Supplemental Log Groups:只有至少一个指定列发生修改操作时被触发,并记录下修改列的前映像。
supplemental logging又分为数据库级别和表级。
二、数据库级supplemental logging
数据库级有两种类型:
minimal supplemental logging和identification key logging
其主要区别就在于写入redolog中的数据详尽程度不同。Minimal supplemental logging不会强加太多的信息到redo log;identification key logging会强加大量的信息到redo log。使用LogMiner,oracle建议至少开启minimal supplemental logging。
如何启用数据库级别的minimal supplemental logging
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
如何数据库级别的Identification Key Logging
1、ALL system-generated uncondititional supplemental log group
一行被更新,所有列都写入redo log(除LOBs, LONGS, ADTs)
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
2、PRIMARY KEY system-generated uncondititional supplemental log group
一行被更新,主键写入redo log,即使没有更新主键。
如果表没有主键,但是有一个或多个non-null unique索引,oracle选择一个unique索引的键值写入到redo log;
如果表既没有主键,也没有non-null unique索引,则所有列(除LONG and LOB)都写入到redo log,等价于ALL。因此oracle建议如果使用数据库primary key supplemental logging,所有或大部分表应该有主键或唯一索引。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
3、UNIQUE system-generated conditional supplemental log group
唯一索引或bitmap 索引中的任何一列改变,则唯一索引键或bitmap索引键写入到redo log。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
4、FOREIGN KEY system-generated conditional supplemental log group
外键的任何一列被修改,则外键写入到redo log
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;
注意:
如果数据库处于open状态,启用了identification key logging,游标缓冲区的所有DML游标都会无效,可能会影响到性能。
如果是数据库级别启用了identification key logging,则minimal supplemental logging被隐式开启。
When you enable identification key logging at the database level, minimal supplemental logging is enabled implicitly.
Supplemental logging语句是累积的,如果执行了如下两个语句,则primary key和unique key supplemental logging都开启。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
如何禁用Supplemental Logging?drop子句。
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;
三、表级Supplemental Logging
和数据库级一样,只不过仅限于指定的表,如:
ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
另外oracle允许用户自己定义supplemental log groups,如:
ALTER TABLE HR.EMPLOYEES
ALTER TABLE HR.EMPLOYEES
注意:
一列可以属于多个supplemental log group,但前镜像只会记录到redo log一次;
如果你对一列指定无条件和有条件的supplemental log,则这些列会无条件记录到redo log。