oracle学习之undo的基本知识及事务与undo、数据块的关联
通过自己学习总结的这些undo知识能够让大家都能深刻了解oracle的undo相关原理。
一、undo撤销表空间的作用
撤销表空间通常称为undo表空间:undo表空间的段也称为撤销段或undo段、回滚段;撤销段中存放的数据就是撤销信息,这些撤销信息也称为撤销数据或undo数据。撤销段是最直接管理撤销新的逻辑层。
1.1、读写一致性
在不同的进程或用户模式下检索数据时,oracle只能给用户提供被提交的数据,这样可以确保数据的一致性。某个连接登录到数据库对某个表某个行进行update操作时未提交,其他连接查询该行数据只能查询到该行被改变之前的数据。具体实现的过程是undo段中记录该行数据的镜像,第二个连接上来,在buffer中找一个块,从Undo回滚段中找出前面的镜像,加上该行所在块其他未修改的行,合成一个块一起构造成cr块,我们叫它构造cr块,保证一致性读。
1.2、可以回滚事务
当执行修改操作如insert、delete、update操作时,旧的数据被存放到undo段中,新的数据(脏数据)在没被dbwr写到数据文件时是存放在数据文件的块所对应的buffer块中。如果影虎不想完成之前的操作就可以回滚,rollback进行回滚。
1.3、事务恢复
事务恢复是实例恢复的一部分,他是oracle服务器自动完成的,如果数据库在运行过程中出现实例失败如断电等,那么当重启oracle服务时,后天进程smon进程会自动执行实例恢复,在恢复的过程中,跑日志前滚并回滚未提交的事务。
1.4、闪回操作
11g新增了强大的闪回功能,其中很多闪回技术都是基于undo段实现的,比如闪回表,闪回事务查询,闪回版本查询。
二、undo段的初始化参数
2.1、undo_tablespace
该参数用于指定实例所要使用的undo表空间,使用自动undo管理时,通过配置该参数指定实例所使用的undo表空间。如果auto模式没有指定第一参数的话,oracle会自动选择第一个可用的undo表空间来存放undo数据,如果没有可用的undo表空间的话,oracle会使用system表空间存放undo数据,并在alter日志中告警。
2.2、undo_management
该参数用于指定undo表空间的管理模式,如auto自动管理模式,manual则为手动管理模式。
2.3、undo_retention
该参数用于控制undo数据最大保留事假,默认是900秒即为15分钟。从9i开始配置该参数指定保留时间,这个参数我是这么理解的,事务A的回滚段(已提交,该回滚段为inactive),当数据库的事务不是特比多或者基本没有其他事务,A事务undo数据可以被保存很长时间,当数据库的事务正常,可能15分钟的时候被覆盖,也可能20分钟被覆盖,但是当数据库事务繁忙,undo表空间没有空余的free expired的空间的话,A事务对应的回滚段数据可能第5分钟就被覆盖了。如果需要固定必须15分钟后才被覆盖的话,可以设置参数,
alter tablespace undotbs1 retention guarantee,则此时无法使用Inactive的undo段,如果没有free,则自动扩展,如不能扩展则优先使用expired,但是此时设置了retention guarantee,无法使用inactive,此时数据库容易产生ora-30035。我们可以通过下面语句查询回滚段信息:
select segment_name,tablespace_name,status from dba_undo_extents;
free --没有分配给任何段
active---区中有事务没有提交
inactive--区中有事务已提交,但是没有超过undo_retention时间
expired---事务提交了,也超过undo_retention时间
三、事务跟undo的关联
1、事务表
oracle在undo表空间的段中的第一个块存在一个事务表,事务表最多有47行,每一行可以放一个事务。当一个事务开始的时候,oracle给它分配一个xid事务编号,这个时候这个事务会做的第一件事就是在undo表空间找一个段,在段头块中找一行,把自己的事务信息写上,至少写上xid。oracle一个事务尽量使用一个回滚段,如果事务太多回滚段太少,这时会出现多个事务使用一个回滚段,oracle尽量均匀的将活动的事务分布在各个回滚段。总结:事务表在undo段中的一个数据块中,每一个回滚段最多同时可以有47个活动的事务。
select xid,xidusn,xidslot,xidsqn,ubablk,ubafil from v$transaction;
2、回滚段的段头块
数据库有多少回滚段
select * from v$rollname;
可以用以上的sql查看,当前有查询结果出来的这么多段头块,根据undo的负载情况系统会自动增加undo的段头块数量。查询段头块地址:
oracle学习之undo的基本知识及事务与undo、数据块的关联的更多相关文章
- ORACLE体系结构一 (逻辑结构)-表空间、段、区和数据块
一.Oracle的逻辑结构 Oracle的逻辑结构是一种层次结构.主要由:表空间.段.区和数据块等概念组成.逻辑结构是面向用户的,用户使用Oracle开发应用程序使用的就是逻辑结构.数据库存储层次结构 ...
- Oracle 学习系列之二(会话与事务级临时表和dual表 )
一. 会话临时表 --创建会话临时表create global temporary table tmp_user_session(user_id int, user_name varchar2(20) ...
- oracle学习----逻辑读
1.物理读 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 清空数据缓冲区 SQL> alter session se ...
- MySQL学习总结:提问式回顾 undo log 相关知识
原文链接:MySQL学习总结:提问式回顾 undo log 相关知识 1.redo 日志支持恢复重做,那么如果是回滚事务中的操作呢,也会有什么日志支持么? 也回滚已有操作,那么就是想撤销,对应的有撤销 ...
- Oracle学习线路
出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验) 作为oracle的基本功,需要大家对sql和 ...
- [转]oracle学习入门系列之五内存结构、数据库结构、进程
原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...
- Oracle 学习总结 - 物理结构
参考了很多文章,学习自网络 数据库 = 实例(数据库启动时初始的进程和内存结构,进程会作用到对应的内存区域-数据写入器到写入内存缓冲区,日志写入器到日志缓冲区等) + 数据库(物理文件-控制文件,数据 ...
- Oracle学习-Power Designer、visio 2003、Oracle sql developer、OEM、expdp
Oracle的体系太庞大了.对于刚開始学习的人来说,难免有些无从下手的感觉. 经过一学期的学习对Oracle学习有了一些深入的了解,由于之前学习过Oracle的一些主要的知识.所以学习起来上手比較快一 ...
- Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则
特别说明: 1. 本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2. 本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...
- Oracle手边常用70则脚本知识汇总
Oracle手边常用70则脚本知识汇总 作者:白宁超 时间:2016年3月4日13:58:36 摘要: 日常使用oracle数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规 ...
随机推荐
- 基于C++的OpenGL 08 之基础光照
1. 引言 本文基于C++语言,描述OpenGL的基础光照 前置知识可参考: 基于C++的OpenGL 07 之颜色 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...
- 前端JavaScript深拷贝的三种方法,看了不后悔!!!
深拷⻉ 深拷⻉开辟⼀个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改⼀个对象的属性,不会 改变另⼀个对象的属性 常⻅的深拷⻉⽅式有: _.cloneDeep() jQuery.extend( ...
- FPGA MIG调试bug(二)
目标器件:复旦微FPGA:JFM7K325T8FCBGA676(对标Xilinx Kintex-7系的XC7K325T) 工程背景:送入FPGA的外部时钟为差分时钟,时钟送入FPGA后,经过PLL输出 ...
- go 程序设计语言 命令行参数
最近打算读一读 go程序设计语言这本书, 读语言类的书是一件十分头疼的事情, 因为读一本书就意味着,看着一堆钳子 锥子工具的图片, 概念背了一大堆,仍然不知道怎么用,还是要通过实践. 还是习惯任务驱动 ...
- java的%d和%f 是什么意思
Java中,%d和%f分别用来表示输出时,替换整型输出和浮点型输出的占位符. 如: int a=28; float b = 13.0f; System.out.printf("整数是:%d% ...
- element-ui动态表单验证
由于项目中固定标签的数据是由后端查询回来的数组,需要进行表单验证,代码如下: <template> <div class="form"> <el-fo ...
- SQL语句中索引失效的原因
SQL语句中索引失效的情况. 总结如下: 1. 索引字段进行判空查询时.也就是对索引字段判断是否为NULL时.语句为is null 或is not null. select * from 表一 whe ...
- Cisco——ASA和winserver2016配置l2tp over ipsec连接
Cisco--ASA和winserver2016配置l2tp over ipsec连接 L2tp over ipsec vpn配置 网络拓扑图: 配置vpn时要确保Winserver15能够ping通 ...
- MNIST数据集output with shape [1, 28, 28] doesn't match the broadcast shape [3, 28, 28]
transform = transforms.Compose([ transforms.ToTensor(), transforms.Lambda(lambda x: x.repeat(3,1,1)) ...
- 正则过滤http|https地址
let reg = /(\w+):\/\/([^/:]+)(:\d*)?/; let s = http.match(reg); let s1 = http1.match(reg); console.l ...