附加日志(supplemental log)(转)
[backcolor=inherit]]平常添加表级附加日志都是在实施OGG实施顺便添加,今天在未部署OGG时候要添加表附件日志,所以从网上找到这个文档,感觉很不错,转载分享一下[backcolor=inherit]]
[backcolor=inherit]]附加日志(supplemental log)可以指示[backcolor=inherit]]数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,如逻辑standby、streams、GoldenGate、LogMiner。可以在数据库和表上设置。[color=rgb(111, 111, 111)]1.数据库级设置,分两类:[color=rgb(111, 111, 111)]1.1最小附加日志(minimal supplemental logging):[backcolor=inherit]]DATA选项启用最小附加日志。启用最小日志可以确保LogMiner(或其他任何基于LogMiner的产品)可以支持行链接、簇表、索引组织表等。[color=rgb(111, 111, 111)]语法如下:[color=rgb(111, 111, 111)]alter database {add|drop} supplemental log data;[color=rgb(111, 111, 111)]1.2标识键日志(identification key logging):[color=rgb(111, 111, 111)]DATA(all,primary key,unique,foreign key) columns选项启用最小日志及列数据日志。在源库日志为变化来源同步其他数据库的情况下,比如逻辑备用数据库,受影响的数据行必须以列数据标识(而不是rowid),必须启用此种附加日志。[color=rgb(111, 111, 111)]语法如下:[color=rgb(111, 111, 111)]alter database {add|drop} supplemental log {data(all,primary key,unique,foreign key) columns};[color=rgb(111, 111, 111)]1.3缺省情况下,Oracle不启用以上任何附加日志。当使用ALL,PRIMARY,UNIQUE或FOREIGN附加日志时最小补全日志默认开启(即检查结果为IMPLICIT)。在删除所有导致IMPLICIT最小化附加日志的附加日志后,最小化附加日志变为NO。[color=rgb(111, 111, 111)]1.4查询当前设置[color=rgb(111, 111, 111)]SELECT supplemental_log_data_min min,[color=rgb(111, 111, 111)] supplemental_log_data_pk pk,[color=rgb(111, 111, 111)] supplemental_log_data_ui ui,[color=rgb(111, 111, 111)] supplemental_log_data_fk fk,[color=rgb(111, 111, 111)] supplemental_log_data_all allc[color=rgb(111, 111, 111)] FROM v$database;[color=rgb(111, 111, 111)]MIN PK UI FK ALLC[color=rgb(111, 111, 111)]YES NO NO NO NO[color=rgb(111, 111, 111)]2,表级附加日志设置,分两类[color=rgb(111, 111, 111)]2.1,可以通过以下语句设置命名日志组:[color=rgb(111, 111, 111)]语法:[color=rgb(111, 111, 111)]alter table table_name[color=rgb(111, 111, 111)]add supplemental log group group_a(column_a [no log],column_b,...) [always];[color=rgb(111, 111, 111)]NO LOG选项用于指定在日志中排除哪些列。在命名日志组中,至少存在一个无”NO LOG“的定长列。比如,对LONG列使用 no log选项,可以在更改LONG列时,记录其他列的内容(LONG列本身不能存在日志里)。[color=rgb(111, 111, 111)]ALWAYS选项, 在更新时,日志组中的所有列都会记录在日志中。这就是所谓的”无条件“日志组,有时也叫”always log group“。如果不指定该选项,只有在日志组中的任何列被修改时,所有列才会出现在日志中。这就是所谓的”有条件“日志组。[color=rgb(111, 111, 111)]说明:同一列可以在多个日志组中存在,但日志中只记录一次;同一列在“无条件”与“有条件”日志组中存在时,该列将“无条件”记录。[color=rgb(111, 111, 111)]2.2,可以通过以下语句设置所有列或主键/外键/唯一键组合日志组:[color=rgb(111, 111, 111)]语法:[color=rgb(111, 111, 111)]alter table table_name[color=rgb(111, 111, 111)]add supplemental log data(all,primary key,unique,foreign key) columns;[color=rgb(111, 111, 111)]Oracle将生成无条件或有条件日志组。对于无条件日志组,日志中将记录该日志组中的所有列;对于有条件日志组,只有日志组中的列有变化时,才会记录日志组中的所有列。[color=rgb(111, 111, 111)]如果指定“ALL”列,日志中将包含所有最大大小固定长度的列。这种日志是系统创建的无条件日志组。[color=rgb(111, 111, 111)]如果指定“PRIMARY KEY”列,只要有更新,组成主键的所有列都会记录在日志中。这种日志是系统创建的无条件日志组。Oracle使用如下顺序确定附加记录哪些列:[color=rgb(111, 111, 111)]*组成主键的列(主键有效,或rely且非DISABLED or INITIALLY DEFERRED状态)[color=rgb(111, 111, 111)]*最小的、至少有一个非空列的唯一索引[color=rgb(111, 111, 111)]*记录所有标量列[color=rgb(111, 111, 111)]如果指定“UNIQUE”列,如果任何组成唯一键或位图索引的列被修改,组成该唯一键或位图索引的其他列都会记录在日志中。这种日志是系统创建的有条件日志组。[color=rgb(111, 111, 111)]如果指定“FOREIGN KEY”列,如果任何组成外键的列被修改,组成该外键的其他列都会记录在日志中。这种日志是系统创建的有条件日志组。[color=rgb(111, 111, 111)]2.3表级测试[color=rgb(111, 111, 111)]drop table test;[color=rgb(111, 111, 111)]create table test(x int,y int);[color=rgb(111, 111, 111)]--增加附加日志[color=rgb(111, 111, 111)]alter table test[color=rgb(111, 111, 111)]add supplemental log data(all,primary key,unique,foreign key) columns;[color=rgb(111, 111, 111)]select * from dba_log_groups;[color=rgb(111, 111, 111)]OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE ALWAYS GENERATED[color=rgb(111, 111, 111)]SYS SYS_C0037555 TEST ALL COLUMN LOGGING ALWAYS GENERATED NAME[color=rgb(111, 111, 111)]SYS SYS_C0037556 TEST PRIMARY KEY LOGGING ALWAYS GENERATED NAME[color=rgb(111, 111, 111)]SYS SYS_C0037557 TEST UNIQUE KEY LOGGING CONDITIONAL GENERATED NAME[color=rgb(111, 111, 111)]SYS SYS_C0037558 TEST FOREIGN KEY LOGGING CONDITIONAL GENERATED NAME[color=rgb(111, 111, 111)]select * from dba_log_group_columns;[color=rgb(111, 111, 111)]no row selected[color=rgb(111, 111, 111)]--删除附加日志[color=rgb(111, 111, 111)]alter table test[color=rgb(111, 111, 111)]drop supplemental log data(all,primary key,unique,foreign key) columns;[color=rgb(111, 111, 111)]select * from dba_log_groups;[color=rgb(111, 111, 111)]no row selected[color=rgb(111, 111, 111)]select * from dba_log_group_columns;[color=rgb(111, 111, 111)]no row selected[color=rgb(111, 111, 111)]--增加命名附加日志[color=rgb(111, 111, 111)]alter table test[color=rgb(111, 111, 111)]add supplemental log group group_a(x,y);[color=rgb(111, 111, 111)]select * from dba_log_groups;[color=rgb(111, 111, 111)]OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE ALWAYS GENERATED[color=rgb(111, 111, 111)]SYS GROUP_A TEST USER LOG GROUP CONDITIONAL USER NAME[color=rgb(111, 111, 111)]select * from dba_log_group_columns;[color=rgb(111, 111, 111)]OWNER LOG_GROUP_NAME TABLE_NAME COLUMN_NAME POSITION LOGGING_PROPERTY[color=rgb(111, 111, 111)]SYS GROUP_A TEST X 1 LOG[color=rgb(111, 111, 111)]SYS GROUP_A TEST Y 2 LOG[color=rgb(111, 111, 111)]alter table test[color=rgb(111, 111, 111)]drop supplemental log group group_a;
[color=rgb(89, 89, 89)][size=8pt]源文档 <[backcolor=inherit]http://space.itpub.net/18922393/viewspace-697625>[backcolor=inherit]