关于supplemental logging,Oracle是这样解释的:
Redo log files are generally used by for instance recovery and media recovery.The data needed for such operations is automatically recorded in the redo log files.However,a redo-based application may require that additional columns be logged in the redo log files.The process of logging these additional columns is called supplemental logging.
默认情况下,Oracle数据库是不开启任何supplemental logging的,那么意味着LogMiner缺省是无法使用的。因此,如果需要使用LogMiner分析日志,则至少需要开启minimal supplemental logging。
下面介绍下supplemental log group,supplemental log group意思就是当启用了supplemental logging后,需要被额外记录的列的集合,有两种类型:
Unconditional supplemental log groups:在任何时候,不管更新的columns是否为指定的columns,都要在redo log中记录指定列的前镜像(before-images),有时也被称为Always log group。
Conditional supplemental log groups:在指定列中,至少有一个列被更新了,那么就会记录所有指定列的前镜像。
supplemental logging group除了有两种类型,还有两种级别:
Database-Level Supplemental Logging和Table-Level Supplemental Logging
Database-Level Supplemental Logging
在Database-level Supplemental Logging中又分为两种类型:
minimal supplemental logging和identification key logging。需要说明的是,启用minimal logging不会给数据库在产生redo log files时带来严重的性能开销;而启用identification key logging会带来一定的性能影响。如果要使用LogMiner的话,Oracle建议你至少要启用minimal supplemental logging。
Minimal supplemental logging:
Minimal supplemental logging会收集最少数量的信息来满足LogMiner的需要,不过可以确保LogMiner拥有足够的信息去支持chained rows和各种storage arrangements,如簇表和索引组织表。
启用minimal supplemental logging:
SQL> alter database add supplemental log data;
注意:在Oracle9.0.1版本中,minimal supplemental logging默认开启;而在9.2之后的版本中,默认是不开启任何supplemental logging的。
Database-level Identification Key Logging:
使用identification key logging,可以通过alter database add supplemental log语句指定某些选项,可以使数据库在数据库范围内记录所有被更新的前镜像。
ALL system-generated unconditional supplemental log group
该选项指定了当一行被更新后,那么改行的所有列的前镜像都会被记录到redo log file中(当然,LOBs、LONGS和ADTs除外)。
在数据库级启用all columns logging的语句为:
SQL> alter database add supplemental log data (all) columns;
PRIMARY KEY system-generated unconditional supplemental log group
该选项会使数据库在一包含主键的行被更新时,数据库记录行的所有主键列的前镜像到redo log中(即使主键的值没有发生改变,也会被记录)。
如果一张表没有主键,但是有一个或者多个non-null unique index key constraints或者index key,那么一个或者多个的unique index key将会被认为是可以唯一标识更新行的列被记录。
如果一张表既没有primary key,也没有non-null unique index key,那么所有列将会被记录(除了LOB)。这个时候就跟ALL选项的效果是一样的了。因此Oracle建议当你选择使用database-level primary key supplemental logging时,尽量使所有的表都定义primary key或者unique index keys.
启用数据库级启用primary key logging的语句为:
SQL> alter database add supplemental log data (primary key) columns;
UNIQUE system-generated conditional supplemental log group
如果属于composite unique key或者bitmap index的任何列被更新,那么数据库就会在redo log中记录改行的所有列。
启用数据库级的unique index key和bitmap index logging的语句为:
SQL> alter database add supplemental log data (unique) columns;
FOREIGN KEY system-generated conditional supplemental log group
当任何属于foreign key的列被修改时,那么数据库就会在redo log中记录改行的所有列。
在数据库级启用foreign key logging的语句为:
SQL> alter database add supplemental log data (foreign key) columns;
你选择使用identification key logging时,需要记住:
1、如果在数据库为open状态时启用identification key logging,在cursor cache中的所有DML cursor都将失效,此时,性能将会受到影响,知道cursor cache被重新载入。
2、如果在数据库级启用了identification key logging,那么minimal supplemental logging将会被隐式启用。
3、在数据库中执行的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;
禁用Database-level supplemental logging
需要逐步的禁用supplemental logging,你必须首先禁用掉所有的identification key logging,然后才能禁用minimal supplemental logging,如下面这个例子:
SQL>alter database add supplemental log data (primary key) columns;
SQL>alter database add supplemental log data (unique) columns;
SQL>alter database drop supplemental log data (primary key) columns;
SQL>alter database drop supplemental log data (unique) columns;
SQL>alter database drop supplemental log data;
如果不按照这个顺序的话,就会报错,如:
ORA-32589: unable to drop minimal supplemental logging
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25834554/viewspace-709217/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25834554/viewspace-709217/