oracle补充日志
简介
概述
- Oracle 补充日志(supplemental log)又叫附加日志,可以指示数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,如逻辑standby、streams、GoldenGate、LogMiner。
- 补充日志不是独立的一种日志,是对重做记录中变更矢量的补充信息,增加了变更矢量记载的记录量,Oracle数据库某些功能要求启用补充日志才能正常地或更好的工作,如logminer、DG、闪回事务查询、闪回事务。
- 补充日志可以在数据库级别和表级别上启用
说明
- Oracle中insert、delete命令在默认情况下产生的重做记录足以表明被修改的行的每个字段在被修改前后的值是什么,insert,变更前行不存在,产生的重做记录会记载新行的每个字段的值,delete,变更后不存在,但是由于重做记录也要负责产生撤销数据块的变更,所以行被删除之前的各字段的值也记录在撤销数据块的变更矢量中,也就是insert和delete命令的重做记录中,能找到整行的所有信息。
- update不同于insert和delete一定会涉及一行的所有字段,常常只是更改一个或几个字段,处于对性能的考虑,Oracle没必要把修改的字段的值也保存在变更矢量中,事实上是在撤销块的比昂矢量中只记载被修改的字段的更改前的值,而在数据块的变更矢量中则记载了被修改的字段的新值,同一行中其他没有被修改的字段,不会记载其修改前的值,因为没有被修改。
如:update scott.emp set sal=12000 where empno=7369 ;
为了支持实例恢复和介质恢复,其重做记录只需要记载sal字段的值为12000即可,在常规的重做记录中完全不会出现empno为7369的信息。 - insert、delete、update的常规重做记录具体记载何种信息是以保证实例恢复与介质恢复能够正常进行为标准的,不相关的信息不会记录在重做日志中。正是因为有撤销数据块的变更矢量,所以保证实例恢复与介质恢复也间接地保证了回滚操作可以被执行。
- 如果启用了补充日志,数据块的变更矢量的记载可以变为; sal字段的值为12000,并且再额外的记录该行被修改之前第一个字段empno的值是7369以及sal为800(修改之前的值),更多的信息意味着update命令被等价还原的可能性提高了,数据的恢复性提高。
- 补充日志主要就是为update服务,补充的目的就是要高度还原真实的update命令。
操作命令
1.数据库级别
数据库级的补充日志,共同点是启用和关闭导致所有SQL游标非法。
无论需要启用哪一种标识关键字段补充日志,都需要启用最小补充日志,4种标识关键字段的效果可以累加,不冲突。
查看是否启用补充日志
若结果返回YES或IMPLICIT则说明已开启对应的补充日志,当使用ALL,PRIMARY,UNIQUE或FOREIGN补全日志时最小补充日志默认开启(即查询结果为IMPLICIT)。
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 ALL_COLUMN --全字段补充日志FROM V$DATABASE;
启用/关闭补充日志(数据库级别)
- 最小补充日志(minimal supplemental logging)
启用最小补充日志可以确保LogMiner(或其他任何基于LogMiner的产品)支持行链接、簇表、索引组织表等。
语法如下:
--开启最小补充日志
alter database add supplemental log data;
--关闭最小补充日志
alter database drop supplemental log data;
- 标识键补充日志
在源库日志为变化来源同步其他数据库的情况下,比如逻辑备用数据库,受影响的数据行必须以列数据标识(而不是rowid),必须启用此种附加日志。
缺省情况下,Oracle不启用以上任何附加日志。当使用ALL,PRIMARY,UNIQUE或FOREIGN附加日志时最小补全日志默认开启(即检查结果为IMPLICIT)。 在删除所有导致IMPLICIT最小化附加日志的附加日志后,最小化附加日志变为NO。- 2.1 主键补充日志:
在update 命令的重做记录中添加被修改行的主键字段的旧值,无论是否被修改,都记录。如果表没有主键,则由长度最小的唯一索引字段代替,若连唯一索引也没有,则记录该行所有字段。
语法如下(开启/关闭):
alter database add supplemental log data (Primary key) columns ;
alter database drop supplemental log data (Primary key) columns ;
- 2.2 唯一索引补充日志:
唯一索引主要是为 复合索引(唯一)服务的。只有唯一索引的字段被 update 时,才会记录该字段被修改前的值。
语法如下(开启/关闭):
alter database add supplemental log data (unique) columns;
alter database drop supplemental log data (unique) columns;
- 2.3 外键补充日志:
同唯一索引补充日志一样,只有外键字段被 update 时,才会记录被修改前的旧值,即也是为复合外键服务的。
语法如下(开启/关闭):
alter database add supplemental log data (foreign key ) columns ;
alter database drop supplemental log data (foreign key ) columns ;
- 2.4 全字段补充日志
顾名思义就所有字段的值不论是否被修改都记录。会导致磁盘快速增长,LGWR进程繁忙。不建议使用。
语法如下(开启/关闭):
alter database add supplemental log data (all) columns ;
alter database drop supplemental log data (all) columns ;
- 2.1 主键补充日志:
2.表级别
只是针对某个表,没有必要在整个数据库范围启用补充日志功能,在启用表级补充日志之前,应该先启用数据库级最小补充日志。
表级补充日志分为主键、唯一索引、外键、全字段和自定义5种类型,前四种和数据级对应的类型特点一致,只是在特定的表上启用。
特定表上的表级补充日志的启用与关闭会导致所有引用该表的SQL游标非法,会引起一段时间的硬分析增加。
查看是否启用补充日志
SELECT G.LOG_GROUP_NAME,G.OWNER || '.' || G.TABLE_NAME TABLE_NAME,G.ALWAYS,G.GENERATED,C.COLUMN_NAMEFROM DBA_LOG_GROUPS GLEFT JOIN DBA_LOG_GROUP_COLUMNS CON G.LOG_GROUP_NAME = C.LOG_GROUP_NAMEAND G.TABLE_NAME = C.TABLE_NAMEORDER BY 1, 2, 3, 4;
启用/关闭补充日志(表级别)
- 可以通过以下语句启用/关闭所有列或主键/外键/唯一键组合日志组:
alter table table_name add supplemental log data(all,primary key,unique,foreign key) columns;
alter table table_name drop supplemental log data(all,primary key,unique,foreign key) columns;
- 可以通过以下语句设置命名(自定义)日志组:
语法:
alter table table_name add supplemental log group group_a(column_a [no log],column_b,...) [always];
增加命名日志组group_a:
alter table test add supplemental log group group_a(x,y);
删除命名日志组group_a:
alter table test drop supplemental log group group_a;
- NO LOG选项用于指定在日志中排除哪些列。
在命名日志组中,至少存在一个无”NO LOG“的定长列。比如,对LONG列使用 no log选项,可以在更改LONG列时,记录其他列的内容(LONG列本身不能存在日志里)。 - ALWAYS选项, 在更新时,日志组中的所有列都会记录在日志中。
这就是所谓的”无条件“日志组,有时也叫”always log group“。如果不指定该选项,只有在日志组中的任何列被修改时,所有列才会出现在日志中。这就是所谓的”有条件“日志组。 - 说明:同一列可以在多个日志组中存在,但日志中只记录一次;同一列在“无条件”与“有条件”日志组中存在时,该列将“无条件”记录。
- NO LOG选项用于指定在日志中排除哪些列。
参考资料
- Oracle中的补充日志(supplemental log)
- Oracle补充日志
- Oracle补全日志(Supplemental logging)
oracle补充日志相关推荐
- oracle补充日志条件,Oracle补充日志-Oracle
Oracle补充日志 -–补充日志 Supplemental Logging 补充日志只要是针对 UPDATE 命令的,是对重做日志记录中 变更矢量块的补充信息,增加了变更矢量记载的记录量. 日志挖掘 ...
- oracle 查阻塞日志,通过Oracle补充日志,找到锁阻塞源头的SQL
问题背景: 有时会考虑一件事情,如果在Oracle环境下出现了锁阻塞的情况,如何定位到SQL源头(通过session.lock.transaction等视图仅能定位到会话)?或许有人会想有没有可能通过 ...
- Oracle 补充日志分类和相关操作, logminer cdc实时同步数据变化,提取归档日志进行数据挖掘,相关代码实现
文章目录 一.前情: 二.LogMiner介绍: 三.logminer解析前提: 3.1 开启归档模式 3.2 启用补充日志 (1)补充日志分类 1.1 最小补充日志:最基本的一种数据库级补充日志: ...
- oracle 11g 数据库恢复技术 ---03 补充日志
三 补充日志(supplemental logging) 补充日志是对重做记录中变更矢量的补充信息,增加了变更矢量记载的记录量.Oracle某些功能要求启用补充日志才能正常或更好的工作,比如logmi ...
- Oracle数据库开启归档日志和补充日志
文章目录 Oracle数据库开启归档日志和补充日志 重做日志的概念 归档日志 ARCHIVELOG模式 启动归档日志 归档日志的清理 补充日志 Oracle数据库开启归档日志和补充日志 项目中要对Or ...
- oracle 删除补全日志组_Oracle 补充日志(Supplemental Logging)说明
补充日志:只要是针对 UPDATE 命令的,是对重做日志记录中 变更矢量块的补充信息,增加了变更矢量记载的记录量.日志挖掘器(LogMiner).闪回事务查询.闪回事务等都需要 补充日志的支持.尤其是 ...
- Linux/Unix shell 监控Oracle告警日志(monitor alter log file)
使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...
- oracle重做日志论文,Oracle重做日志文件相关概念
重做日志文件(redo log file)对于Oracle数据库至关重要.它们是数据库的事务日志.通常只用于恢复,不过也可以用于以下工作: q 系统崩溃后的实例恢复 q 通过备份恢复数据文件之后恢复介 ...
- Oracle11g:补充日志
一.说明 补充日志是对重做记录中变更矢量的补充信息. Oracle的一些功能需要补充日志才能使用.比如LogMiner.闪回事务查询.闪回事务等. insert和delete命令在默认情况下产生的重做 ...
最新文章
- 取生产订单状态的逻辑
- SQL2005实现全文检索的步骤 停止数据库的用户连接
- 多径传播matlab仿真·信号分析处理
- sublime快捷键代码对齐_Python配置sublime运行环境
- 山寨“饿了么”应用中添加菜品数量按钮效果
- const与static的区别
- stdint.h 文件
- mysql时间间隔年份_MySQL DATEDIFF函数获取两个日期的时间间隔的方法
- 软考信息系统项目管理师_历年真题_2020下半年错题集_上午综合知识题---软考高级之信息系统项目管理师036
- “互联网+”时代,漫谈影响用户体验的X因素
- 因为马云,这也许是他们过得最有意思的腊八节
- Cortex-A7中断系统
- [Leetcode] 382. Linked List Random Node 解题报告
- 最唯美的10首中国情诗
- 图片下载_二维码生成
- Python---面向对象---龟鱼游戏
- 如何让novnc/websockify支持tls1.2 (by quqi99)
- flash,php上传文件
- 高清视频相关知识和、KMPlayer 硬解码(DXVA)设置、Z520+US15W+GMA500硬解码测试
- 【工业控制】多变量动态矩阵预测控制(DMC)【含Matlab源码 1499期】