zoukankan      html  css  js  c++  java
  • Oracle-suppelmental log

    概述

    附加日志(suppelmental log)是指在数据库的redo记录中添加额外的信息,以支持基于日志类工具正常工作,如:logminer, streams, goldengate, logical standby。

    附加日志主要针对update命令,避免因update命令造成行迁移和行移动。

    按设置对象分类

    • 数据库级设置
    • 表级设置

    数据库级设置

    最小附加日志(minimal supplemental logging)
    -- 语法:
    alter database {add|drop} supplemental log data;
    

    启用或禁用最小附加日志

    标识键日志(identification key logging)

    标识键有如下类型:all, primary key, unique key, foreign key

    标识键日志是对指定columns启用或关闭最小日志及列数据日志。当开启 all, primary, unique和foreign 附加日志时,若最小补充日志尚未启用,则oracle会隐式开启最小补充日志,其状态为IMPLICIT。

    -- 语法
    alter database {add|drop} supplemental log {data(all,primary key,unique,foreign key) columns};
    
    alter database add supplemental log data(primary key) columns;
    

    image-20210826100232253

    查看当前设置
    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;
    

    如果某一列的值为"YES",表明开启了对应的附加日志。如果开启标识键日志时,对应列的值为"YES",同时

    supplemental_log_data_min列的值为"IMPLICIT"

    注意事项
    • 启用或关闭数据库级别的附加日志时,都会导致共享池中SQL语句的游标失效,从而导致短期解析明显增加
    • 可能导致日志量暴增,建议每张表有主键或至少一个非空的唯一键

    表级附加日志设置

    设置命名日志组
    alter table table_name 
    {add|drop} supplemental log group group_a(column_a [no log],column_b,...) [always];
    
    • no log:用于指定在日志中排除的列,在命名日志组中,至少存在一个无"no log"选项的定长列
    • always:在更新时,日志组中的所有列都会记录在日志中。也称为“无条件”日志组。如果不指定always选项,只有在日志组中任何列被修改时,才会记录到日志中,称为“有条件”日志组。
    设置所有列或主键/外键/唯一键组合日志组
    alter table table_name 
    {add|drop} supplemental log data(all,primary key,unique,foreign key) columns;
    
    • ALL:日志中将包含所有的最大长度固定的列
    • PRIMARY KEY:只要有更新,组成主键的所有列都会记录在日志中
    查看日志组信息
    set lines 168 pages 99
    col owner for a16
    col log_group_name for a16
    col table_name for a16
    col log_group_type for a16
    col always for a8
    col generated for a12
    col column_name for a32
    select lg.owner, lg.log_group_name, lg.table_name, lg.log_group_type, lg.always, lg.generated, lgcs.column_name, lgcs.position, lgcs.logging_property 
      from dba_log_groups lg, dba_log_group_columns lgcs
    where lg.LOG_GROUP_NAME = lgcs.LOG_GROUP_NAME(+)
    and lg.TABLE_NAME = lgcs.TABLE_NAME(+)
    and lg.owner = lgcs.owner
    ;
    

    image-20210826105126828

    测试
    组合日志组
    drop table test;
    create table test(x int,y int);
     
    --增加附加日志
    alter table test
    add supplemental log data(all,primary key,unique,foreign key) columns;
    
    --删除附加日志
    alter table test
    drop supplemental log data(all,primary key,unique,foreign key) columns;
    
    命名日志组
    --增加命名附加日志
    alter table test
    add supplemental log group group_a(x,y);
    
    --删除命名附加日志
    alter table test
    drop supplemental log group group_a;
    
  • 相关阅读:
    串字符串下沙的沙粒
    格式返回jquery js 获取获得时间差,时间格式为
    类型数组perl6学习
    安装文件win7,ubuntu双系统的安装——准备工作
    下标注意【算法】冒泡排序与选择排序的递归实现
    容器结构Thrift的数据类型系统
    linux初次入门学习小结
    sata拷贝文件时候framebuffer 闪烁问题
    switch_root 到nfs根文件
    Linux内核中64 bit division
  • 原文地址:https://www.cnblogs.com/binliubiao/p/15188993.html
Copyright © 2011-2022 走看看