微前端架构如何改变企业的开发模式与效率提升
202
2023-12-28
这篇文章给大家介绍Oracle补充日志supplemental log的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
Oracle 补充日志(supplemental log)附加日志(supplemental log)可以指示数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,如逻辑standby、streams、GoldenGate、LogMiner。可以在数据库和表上设置。1.数据库级设置,分两类:1.1最小附加日志(minimal supplemental logging):DATA选项启用最小附加日志。启用最小日志可以确保LogMiner(或其他任何基于LogMiner的产品)可以支持行链接、簇表、索引组织表等。语法如下:alter database {add|drop} supplemental log data;1.2标识键日志(identification key logging):DATA(all,primary key,unique,foreign key) columns选项启用最小日志及列数据日志。在源库日志为变化来源同步其他数据库的情况下,比如逻辑备用数据库,受影响的数据行必须以列数据标识(而不是rowid),必须启用此种附加日志。语法如下:alter database {add|drop} supplemental log {data(all,primary key,unique,foreign key) columns};缺省情况下,Oracle不启用以上任何附加日志。当使用ALL,PRIMARY,UNIQUE或FOREIGN附加日志时最小补全日志默认开启(即检查结果为IMPLICIT)。 在删除所有导致IMPLICIT最小化附加日志的附加日志后,最小化附加日志变为NO。查询当前设置是否开启最小补充日志:SELECT supplemental_log_data_min min, supplemental_log_data_pk pk,supplemental_log_data_ui ui, supplemental_log_data_fk fk, supplemental_log_data_all allc FROM v$database;MIN PK UI FK ALL-------- --- --- --- ---NO NO NO NO NOSQL> 2,表级附加日志设置,分两类2.1,可以通过以下语句设置命名日志组:语法:alter table table_nameadd supplemental log group group_a(column_a [no log],column_b,...) [always];NO LOG选项用于指定在日志中排除哪些列。在命名日志组中,至少存在一个无”NO LOG“的定长列。比如,对LONG列使用 no log选项,可以在更改LONG列时,记录其他列的内容(LONG列本身不能存在日志里)。ALWAYS选项, 在更新时,日志组中的所有列都会记录在日志中。这就是所谓的”无条件“日志组,有时也叫”always log group“。如果不指定该选项,只有在日志组中的任何列被修改时,所有列才会出现在日志中。这就是所谓的”有条件“日志组。说明:同一列可以在多个日志组中存在,但日志中只记录一次;同一列在“无条件”与“有条件”日志组中存在时,该列将“无条件”记录。2.2,可以通过以下语句设置所有列或主键/外键/唯一键组合日志组:语法:alter table table_nameadd supplemental log data(all,primary key,unique,foreign key) columns;oracle将生成无条件或有条件日志组。对于无条件日志组,日志中将记录该日志组中的所有列;对于有条件日志组,只有日志组中的列有变化时,才会记录日志组中的所有列。 如果指定“ALL”列,日志中将包含所有最大大小固定长度的列。这种日志是系统创建的无条件日志组。如果指定“PRIMARY KEY”列,只要有更新,组成主键的所有列都会记录在日志中。这种日志是系统创建的无条件日志组。Oracle使用如下顺序确定附加记录哪些列:*组成主键的列(主键有效,或rely且非DISABLED or INITIALLY DEFERRED状态)*最小的、至少有一个非空列的唯一索引*记录所有标量列如果指定“UNIQUE”列,如果任何组成唯一键或位图索引的列被修改,组成该唯一键或位图索引的其他列都会记录在日志中。这种日志是系统创建的有条件日志组。如果指定“FOREIGN KEY”列,如果任何组成外键的列被修改,组成该外键的其他列都会记录在日志中。这种日志是系统创建的有条件日志组。2.3表级测试drop table test;create table test(x int,y int);--增加附加日志alter table testadd supplemental log data(all,primary key,unique,foreign key) columns;select * from dba_log_groups;OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE ALWAYS GENERATED------------------------------ ------------------------------ ------------------------------ ----------------------------SYS SEQ$_LOG_GRP SEQ$ USER LOG GROUP ALWAYS USER NAMESYS ENC$_LOG_GRP ENC$ USER LOG GROUP ALWAYS USER NAMESYS SYS_C0011095 TEST ALL COLUMN LOGGING ALWAYS GENERATED NAMESYS SYS_C0011096 TEST PRIMARY KEY LOGGING ALWAYS GENERATED NAMESYS SYS_C0011097 TEST UNIQUE KEY LOGGING CONDITIONAL GENERATED NAMESYS SYS_C0011098 TEST FOREIGN KEY LOGGING CONDITIONAL GENERATED NAMEselect * from dba_log_group_columns;OWNER LOG_GROUP_NAME TABLE_NAME COLUMN_NAM POSITION LOGGIN------------------------------ ------------------------------ ------------------------------ ---------- ---------- ------SYS SEQ$_LOG_GRP SEQ$ OBJ# 1 LOGSYS ENC$_LOG_GRP ENC$ OBJ# 1 LOGSYS ENC$_LOG_GRP ENC$ OWNER# 2 LOG--删除附加日志alter table testdrop supplemental log data(all,primary key,unique,foreign key) columns;select * from dba_log_groups;OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE ALWAYS GENERATED------------------------------ ------------------------------ ------------------------------ ----------------------------SYS SEQ$_LOG_GRP SEQ$ USER LOG GROUP ALWAYS USER NAMESYS ENC$_LOG_GRP ENC$ USER LOG GROUP ALWAYS USER NAMEselect * from dba_log_group_columns;OWNER LOG_GROUP_NAME TABLE_NAME COLUMN_NAM POSITION LOGGIN------------------------------ ------------------------------ ------------------------------ ---------- ---------- ------SYS SEQ$_LOG_GRP SEQ$ OBJ# 1 LOGSYS ENC$_LOG_GRP ENC$ OBJ# 1 LOGSYS ENC$_LOG_GRP ENC$ OWNER# 2 LOG--增加命名附加日志alter table testadd supplemental log group group_a(x,y);select * from dba_log_groups;OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE ALWAYS GENERATED------------------------------ ------------------------------ ------------------------------ ---------------------------- ----------- --------------SYS SEQ$_LOG_GRP SEQ$ USER LOG GROUP ALWAYS USER NAMESYS ENC$_LOG_GRP ENC$ USER LOG GROUP ALWAYS USER NAMESYS GROUP_A TEST USER LOG GROUP CONDITIONAL USER NAMEselect * from dba_log_group_columns;OWNER LOG_GROUP_NAME TABLE_NAME COLUMN_NAM POSITION LOGGIN------------------------------ ------------------------------ ------------------------------ ---------- ---------- ------SYS SEQ$_LOG_GRP SEQ$ OBJ# 1 LOGSYS ENC$_LOG_GRP ENC$ OBJ# 1 LOGSYS ENC$_LOG_GRP ENC$ OWNER# 2 LOGSYS GROUP_A TEST X 1 LOGSYS GROUP_A TEST Y 2 LOGalter table testdrop supplemental log group group_a; select * from dba_log_groups;OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE ALWAYS GENERATED------------------------------ ------------------------------ ------------------------------ ---------------------------- ----------- --------------SYS SEQ$_LOG_GRP SEQ$ USER LOG GROUP ALWAYS USER NAMESYS ENC$_LOG_GRP ENC$ USER LOG GROUP ALWAYS USER NAMEselect * from dba_log_group_columns;OWNER LOG_GROUP_NAME TABLE_NAME COLUMN_NAM POSITION LOGGIN------------------------------ ------------------------------ ------------------------------ ---------- ---------- ------SYS SEQ$_LOG_GRP SEQ$ OBJ# 1 LOGSYS ENC$_LOG_GRP ENC$ OBJ# 1 LOGSYS ENC$_LOG_GRP ENC$ OWNER# 2 LOG====补充====================== Oracle 附加日志select supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui from v$database;如果某列的值为YES就是开了那种附加日志。执行以下sql打开最小附加日志(supplemental_log_data_min)。alter database add supplemental log data;执行了alter database add supplemental log data;语句后需要把数据库重新启动。取消附加日志alter database drop supplemental log data;1、10g需要激活补充日志select supplemental_log_data_pk,supplemental_log_data_ui from v$database;alter database drop supplemental log data (primary key, unique index) columns; alter database add supplemental log data;2、将redo日志文件添加到logmnr分析日志列表exec sys.dbms_logmnr.add_logfile(logfilename=>redo日志1, options=>sys.dbms_logmnr.new);exec sys.dbms_logmnr.add_logfile(logfilename=>redo日志2, options=>sys.dbms_logmnr.addfile);exec sys.dbms_logmnr.add_logfile(logfilename=>redo日志n, options=>sys.dbms_logmnr.addfile);3、启动并分析redo日志exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);4、查看分析结果 spool c:\log.txt select * from v$logmnr_contents ; spool off5、停止logmnr exec sys.dbms_logmnr.end_logmnr6、取消补充日志alter database drop supplemental log data (primary key) columns; alter database drop supplemental log data (unique) columns;alter database drop supplemental log data;
关于Oracle补充日志supplemental log的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~