文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Oracle补充日志supplemental log的示例分析

2024-04-02 19:55

关注

这篇文章给大家介绍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  NO

SQL>
 
2,表级附加日志设置,分两类
2.1,可以通过以下语句设置命名日志组:
语法:
alter table table_name
add 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_name
add 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 test
add 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 NAME
SYS                            ENC$_LOG_GRP                   ENC$                           USER LOG GROUP               ALWAYS      USER NAME
SYS                            SYS_C0011095                   TEST                           ALL COLUMN LOGGING           ALWAYS      GENERATED NAME
SYS                            SYS_C0011096                   TEST                           PRIMARY KEY LOGGING          ALWAYS      GENERATED NAME
SYS                            SYS_C0011097                   TEST                           UNIQUE KEY LOGGING           CONDITIONAL GENERATED NAME
SYS                            SYS_C0011098                   TEST                           FOREIGN KEY LOGGING          CONDITIONAL GENERATED NAME
 
select * from dba_log_group_columns;

OWNER                          LOG_GROUP_NAME                 TABLE_NAME                     COLUMN_NAM   POSITION LOGGIN
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ------
SYS                            SEQ$_LOG_GRP                   SEQ$                           OBJ#                1 LOG
SYS                            ENC$_LOG_GRP                   ENC$                           OBJ#                1 LOG
SYS                            ENC$_LOG_GRP                   ENC$                           OWNER#              2 LOG

 
--删除附加日志
alter table test
drop 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 NAME
SYS                            ENC$_LOG_GRP                   ENC$                           USER LOG GROUP               ALWAYS      USER NAME
 
select * from dba_log_group_columns;

OWNER                          LOG_GROUP_NAME                 TABLE_NAME                     COLUMN_NAM   POSITION LOGGIN
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ------
SYS                            SEQ$_LOG_GRP                   SEQ$                           OBJ#                1 LOG
SYS                            ENC$_LOG_GRP                   ENC$                           OBJ#                1 LOG
SYS                            ENC$_LOG_GRP                   ENC$                           OWNER#              2 LOG

--增加命名附加日志
alter table test
add 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 NAME
SYS                            ENC$_LOG_GRP                   ENC$                           USER LOG GROUP               ALWAYS      USER NAME
SYS                            GROUP_A                        TEST                           USER LOG GROUP               CONDITIONAL USER NAME
 
select * from dba_log_group_columns;

OWNER                          LOG_GROUP_NAME                 TABLE_NAME                     COLUMN_NAM   POSITION LOGGIN
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ------
SYS                            SEQ$_LOG_GRP                   SEQ$                           OBJ#                1 LOG
SYS                            ENC$_LOG_GRP                   ENC$                           OBJ#                1 LOG
SYS                            ENC$_LOG_GRP                   ENC$                           OWNER#              2 LOG
SYS                            GROUP_A                        TEST                           X                   1 LOG
SYS                            GROUP_A                        TEST                           Y                   2 LOG
 
alter table test
drop 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 NAME
SYS                            ENC$_LOG_GRP                   ENC$                           USER LOG GROUP               ALWAYS      USER NAME

select * from dba_log_group_columns;

OWNER                          LOG_GROUP_NAME                 TABLE_NAME                     COLUMN_NAM   POSITION LOGGIN
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ------
SYS                            SEQ$_LOG_GRP                   SEQ$                           OBJ#                1 LOG
SYS                            ENC$_LOG_GRP                   ENC$                           OBJ#                1 LOG
SYS                            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 off


5、停止logmnr
    exec sys.dbms_logmnr.end_logmnr

 
6、取消补充日志
    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的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯