oracle supplemental log 作用

来源:互联网 发布:重庆爱知日语培训班 编辑:程序博客网 时间:2024/05/06 14:53

在oracle 中,有个supplemental log 的概念 ,又称为附加日志 ,他主要用来设置oracle 是否在redolog 中增加额外的一些信息 。
这些信息大致分为两种 :
1. 包括行连接,行迁移转化成sql 语句的一些信息。例如当一个行在数据文件中占据了两个数据块,这时候 我需要对第二个数据块中的某些列进行更新,由于oracle 只记录数据块的变更信息,因此redolog 中只记录了变更块的信息。 那么如果你有一个需求,需要得到变更行的rowid 信息 ,这时候怎么办? rowid 需要得到第一个块的地址信息才行,这时候就需要supplemental log 信息了,他会记录首个数据块的地址和行的slot 信息。
2. 指定列的信息。当把redolog 解析成sql 语句的时候,sql 语句的where 条件拼凑是一个问题,例如如果想用primary key 作为where 条件。但是oracle 只记录了变更数据块的信息,很显然,主键列一般不会变,这时候就可以要求oracle 将主键数据或者一些不变更列的数据 记录到redolog 中,这也是supplemental log;

如何设置 让oracle 记录 supplemental log ?
select SUPPLEMENTAL_LOG_DATA_MIN , SUPPLEMENTAL_LOG_DATA_PK from v$database;
SUP SUP
— —
YES YES
SUPPLEMENTAL_LOG_DATA_MIN 称为最小附加日志,如果想把redolog 翻译成sql 语句,那么这个参数必须设上,设置上这个参数后,他主要会记录一些翻译成行连接所需要的必要信息记录下来。
在9i 中 SUPPLEMENTAL_LOG_DATA_MIN 默认打开, 10g 中式默认关闭的 ,这也是为什么10g 中默认情况下logmnr 是解析不了 redolog 中的DML 信息,只能解析DDL 信息,就是因为某些特殊信息没有记录下来;
打开SUPPLEMENTAL_LOG_DATA_MIN 的语句如下:

ALTER DATABASE add SUPPLEMENTAL LOG DATA ;

注: 10g 中打开该选项后,会禁用IMU 特性
执行该sql 的时候 数据库中不能有分布式事务,否则sql 语句会执行不成功

SUPPLEMENTAL_LOG_DATA_PK

这个参数设置后,oracle 将会把主键信息记录到redolog 中,如果某个表没有主键,那么整条记录都会被记录到redolog 中,设置命令为:

ALTER DATABASE add SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

当然在数据库中还可以设置增加 unique key ,外键 或者 按单个表指定记录某个列 到redolog 中,这里不再一一讲解,可以看一下oracle 文档

0 0
原创粉丝点击