zoukankan      html  css  js  c++  java
  • oracle 11g 数据库恢复技术 ---03 补充日志

    补充日志(supplemental logging

    补充日志是对重做记录中变更矢量的补充信息,增加了变更矢量记载的记录量。Oracle某些功能要求启用补充日志才能正常或更好的工作,比如logminer(日志挖掘器)、闪回事务查询、闪回事务等。

    对于insertdelete来说,常规的重做记录记载了被更改的行的所有字段,没有什么补充,但是update例外,不但所有字段的旧值没有被记录(除非更新所有字段),有时update还是导致行迁移,

    补充日志主要就是为update服务的,补充的目的就是要高度还原真实的update,在某种情况下,当实例和介质恢复不能百分百地完成作用时,只能向残存的日志索取更多的信息

    1 数据库级补充日志

    oracle 11g中,默认不启用

    TEST@ orcl >select supplemental_log_data_min sl_min,supplemental_log_data_pk sl_pk,supplemental_log_data_ui sl_ui,
    supplemental_log_data_fk sl_fk,supplemental_log_data_all sl_all from v$database;  2  
    
    SL_MIN     SL_ SL_ SL_ SL_
    -------- --- --- --- ---
    NO     NO  NO  NO  NO

    最小补充日志是最基本的一种数据库级补充日志

    LogMiner依赖最小补充日志产生的特殊信息以识别、分组与合并dml所产生的重做记录,目的是为了让logminer通过分析redo log就可以识别由update导致的行迁移、行移动。

    如果update命令导致行变长,在数据块空间不足的情况下行会部分(行头部除外)迁移至另一个数据块,称为行迁移

    TEST@ orcl >alter database add supplemental log data; ##启用最小补充日志
    Database altered.
    TEST@ orcl >select supplemental_log_data_min sl_min from v$database;
    SL_MIN
    --------
    YES
    TEST@ orcl >alter database drop supplemental log data; ##关闭最小补充日志

    启用最小补充日志不会对重做记录的生成产生明显的额外开销,又能使日志文件支持logminer和闪回事务查询功能,提高数据块抵抗人为错误的能力上考虑,应该启用此功能。

    注意凡是启用或关闭数据库级补充日志都会导致共享池中的所有的sql命令游标非法,在短期内硬解析会显著上升

    TEST@ orcl >select count(*) from scott.emp;
      COUNT(*)
    ----------
        14
    TEST@ orcl >select invalidations from v$sql where sql_text='select count(*) from scott.emp';
    INVALIDATIONS
    -------------
            0
    select sql_text,invalidations from v$sql where sql_text like 'select count(*) %';

    关键字段补充日志4种主键、唯一索引、外键和全体字段补充日志。

    --alter database add supplemental log data (primary key) columns;

    开启主键补充日志的前提必须要开启最新补充日志,关闭也是一样。

    主键补充日志的作用是在update命令的重做记录中添加被修改行的主键字段的旧值。

    唯一索引补充日志只有当唯一索引字段被update时才会记录该字段。

    外键补充一样,只有当外键字段被update修改时,其修改前的旧值才会被记录。

    全体字段补充日志,它和主键补充一样同为不条件,无论哪个字段被update,所有字段(除了LOBLONG类型)的旧值都将被记录。

    --alter database add supplemental log data (all) columns;

    2 表级补充日志

    针对某些表进行日志补充,前提要开启数据库最小日志补充。

    表级补充分为主键、唯一索引、外键、全字段和自定义5种类型,前4种与数据库级对应的类型特点一样。

    --alter table scott.emp add supplemental log data (primary key) columns;

    --alter table scott.emp add supplemental log group emp_info(first_name,last_name,email);

    如果只从DML命令性能的角度出发,没有人会启用补充日志,建议至少启用最小日志补充,否则至少将丧失logminer和闪回事务查询功能。

  • 相关阅读:
    c语言之指针特性
    【java异常】【redis】ERR Client sent AUTH, but no password is set
    【Tomcat】系统找不到指定的路径
    【电脑】查看主机名
    【java异常】Building workspace has encountered a problem. Error
    【MyEclipse】安装svn插件
    【oracle】drop,truncate,delete用法
    【java异常】redis.clients.jedis.exceptions.JedisConnectionException: Could not get a res
    【java】定时任务停止时间设置
    【java异常】It's likely that neither a Result Type nor a Result Map was specified
  • 原文地址:https://www.cnblogs.com/yhq1314/p/10938939.html
Copyright © 2011-2022 走看看