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++ 弹奏武侠音乐:沧海一声笑
前言: 参照网路代码,用编程语言来弹奏一首音乐,搞点轻松的 原文:点击此处 完整代码: 以下为Visual Stuido 2022测试可用,控制台程序.运行之后,会自动弹奏沧海一声笑,并且出现歌词.主 ...
- 23年用vuex进行状态管理out了,都开始用pinia啦!
1 Vue2项目中,Vuex状态管理工具,几乎可以说是必不可少的了.而在Vu3中,尤大大推荐我们使用pinia(拍你啊)进行状态管理,咱得听话,用就完了. 使用之前我们来看一下,使用 pinia 给我 ...
- Linux操作命令(五)1.find命令 2.xargs命令
1.find命令(一) 查找,沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作 参数 描述 -print find 命令将匹配的文件输出到标准输出 -exec find 命令对匹配的文件 ...
- Jmeter 快速生成测试报告
我们使用Jmeter工具进行接口测试或性能测试后一般是通过察看结果数.聚合报告等监听器来查看响应结果.一.Jmeter配置 首先要保证jmeter命令是ok的,如果你在cmd中输入jmeter -v, ...
- 容忍和污点Taint和Toleration
说明: Taint在一类服务器上打上污点,让不能容忍这个污点的Pod不能部署在打了污点的服务器上. Toleration是让Pod容忍节点上配置的污点,可以让一些需要特殊配置的Pod能够调用到具有 污 ...
- 关于vscode 一些配置
一. 基本操作 1.创建完项目, code . 直接在vscode 中打开 2.设置--首选项 检测 package.json 文件 点击serve 是可以运行 3.常用的vscode 插件 ...
- 第一天 python环境变量安装(2.7)
一.什么是python Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计简单,易学,免费,开源,面向对象,可拓展性 Python 是一种解释型语言: ...
- java猜数小游戏
问题: 程序自动生成一个1~100之间的随机数字,使用程序猜出这个数字是多少: Random可以随机生成一个随机数 使用方法: 导包 创建对象 Random r = new Random(); //只 ...
- 用python从网页下载单词库
从网站下载单词库 1 每一页有几百个单词 2 每一个单词有独立的URL,URL中包含单词的中文解释 3 使用的库 requests,pyquery,web #coding:utf-8 import r ...
- Flink任务自定义个性化配置logback.xml文件
之前已经写过如何使用logback将日志直接写入Kafka,然后通过es和kibana实时查看 但是如果我们想要每个任务都能够带上单独的信息比如开发者.任务名称等信息,那么就需要每个任务都指定一个lo ...