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数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规 ...
随机推荐
- ajax请求头
headers: { 'token':token, 'identity':identity, 'Content-Type': 'application/x-www-form-urlencoded' } ...
- ArcGIS for Android 实现地图基本操作
地图基本操作 1.前期项目准备 1.1. 创建新工程 新建一个空活动项目 选择语言.平台,修改命名等 1.2. 添加ArcGIS SDK build.gradle (Project: <proj ...
- Postgresql 锁等待检测及处理
背景 对于多数数据库,dba技能之一就是查找锁.锁的存在有效合理的在多并发场景下保证业务有序进行.下面我们看一下Postgresql中查找阻塞的方法. 1.找到"被阻塞者",获取被 ...
- Hugging Face 每周速递: Space 支持创建模版应用、Hub 搜索功能增强、BioGPT-Large 还有更多
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- js提交数据
一.from表单提交 <form action="" method="post" enctype="multipart/form-data&qu ...
- Git Please commit your changes or stash them before you merge.
本地分支和远程修改了同一个文件代码,pull远程分支的代码的时候会文件冲突 出现这个错误 Please commit your changes or stash them before you mer ...
- SAP 交货单抬头客制化界面以及字段
需求 因为涉及系统之间的家伙但传输,方便业务查看该交货单是否已经发送,因此再交货单的抬头页面进行增强,给出一个是否发送的字段显示.如下: 业务加载项 LE_SHP_TAB_CUST_HEAD se19 ...
- C语言中的malloc、new、memset函数解析
1. malloc 在window下,malloc的函数原型: extern void *malloc(unsigned int num_bytes); 头文件: #include<malloc ...
- Git 知识
1.git merge .git cherry-pick.git rebase 可以看出merge结果能够体现出时间线,但是rebase会打乱时间线. 而rebase看起来简洁,但是merge看起来不 ...
- python 操作配置文件(configparser模块)
用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser 配置文件信息: [DEFAULT] ServerAliveInterval = 45 Com ...