Oracle ____Undo
什么是回滚和撤销
1 update emp set sal=4000 where empno=7788
语句执行过程
- 1 检查empno=7788记录是否在buffer cache ,如果不存在,则读取到buffer cache
- 2 在回滚段表空间的相应回滚事务表上分配事务槽,这个操作需要记录redo log 信息
- 3 从回滚段读入或者在buffer cache中创建sal=3000的前镜像,这需要产生redo log 信息并记入redo log buffer
- 4 修改sal=4000,这就是update数据变更,需要记录redo log buffer
- 5 单用户提交commit 时,会在redo log buffer 记录提交信息,并在回滚段标记该事务未非激活inactive
在事务开始时,首先要在回滚表空间分配一个事务槽,分配空间,然后创建前镜像,此后事务修改才能进行,oracle 必须以此来保证事务是可回滚的。
如果用户提交了事务,oracle 会在日志文件记录提交,并写出日志,同时会在回滚段中把该事务标记为已提交,提交事务在回滚段事务的状态为inactive ,然后该事务所使用的回滚空间被重用,回滚段空间是循环使用。如果用户回滚事务,则oracle从回滚段中把前镜像读取出来,修改数据缓冲区,完成回滚,这个过程也会产生redo,回退这个操作时很昂贵的
在oracle 性能优化中,有一个性能指标为平均事务回滚率rollback per transaction
回滚段存储的内容
对于insert 操作,回滚只需要记录插入记录的rowid ,指需要将该记录根据rowid删除即可。
对于update操作,回滚段只需要记录被更新字段的旧值即可(前镜像)回顾时通过旧值覆盖新值即可完成回滚
对于delete 操作,oracle 则必须记录整行的数据,在回滚时,oracle 通过一个方向操作恢复删除的数据
insert 产生最少undo
update 其次
delete 最多
并发控制和读一致性
oracle内部使用SCN作为数据库时钟,SCN进行读一致性判断
假定查询时间为T1,则在查询获取块中,如果数据块提交SCN小于T1,则oracle接收数据,如果提交SCN大于T1或者数据被锁定修改尚未记录commit scn,则oracle需要通过回滚段构造前镜像来返回结果。这就是读一致性原理。
oracle 9i开始,oracle引入了自动管理undo表空间。
undo_retention表示在自动管理模式下,当回滚段变得非活动inactive之后,回滚段中的数据在被覆盖前保留的时间,该单位秒
查看回滚段的信息
1 select * from v$rollname ;
在系统繁忙的时候,可以从数据库的警告日志文件中查看回滚段动态创建和释放的过程。动态创建和释放是undo表空间优势之一
undo_retention =0 oracle启动自动调整以满足最长运行查询需要。在警告日志中可以看到autotune of undo retention is turned on
1 alter tablespace undotbs1 retention guarantee |noguarantee
测试
1
2 --将undo空间自动扩展取消
3 create undo tablespace undotbs2 datafile '/u01/undotbs2.dbf' size 5m ;
4
5 alter database datafile '/u01/undotbs2.dbf' autoextend off
6
7 alter system set undo_tablespace=undotbs2;
8
9 -有一张大表
10 conn scott/oracle
11 create table e as select * from emp ;
12 insert into e select * from e;
13 --一-直执行会报错
14 ERROR at line 1:
15 ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
16
17 --修改表空间属性
18
19
20 select count(*) from e ;
21 begin
22 for i in 1 .. 1000 loop
23 delete from e where rownum <=1001;
24 commit;
25 end loop;
26 end ;
27 /
28
29 --报错ora-30036
30
31 ---修改undo表空间属性
32 alter tablespace undotbs1 retention noguarantee
33 --删除成功
34 --这就是guarantee 和noguarantee的区别
35
UNDO表空间大小评估参考:
1 --要确定Oracle需要的UNDO 表空间的大小,需要以下三条信息:
2 --A、UR :以秒为单位的UNDO_RETENTION
3 SQL> show parameter undo_retention;
4
5 --B、UPS:计算业务高峰期每秒产生undo数据块的个数
6 SQL> select max(undoblks / ((end_time - begin_time)*24*3600)) from v$undostat;
7
8 ---C、DBS:得到数据块大小
9 SQL> show parameter db_block_size;
10
11 --参考计算公式:
12 --UndoSpace = UR * UPS * DBS + DBS * 24
13
14 --参考计算UNDO表空间大小语句:
15 SELECT (UR * UPS * DBS + DBS * 24) / 1024 / 1024 AS "undo size(M)"
16 FROM (SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'),
17 (SELECT max(undoblks / ((end_time - begin_time) * 24 * 3600)) AS UPS FROM v$undostat),
18 (SELECT value AS DBS FROM v$parameter WHERE name = 'db_block_size');
19
20 --如果现在UNDO表空间的大小小于计算出来的大小,建议将其增大至计算出来的推荐值值以上。
21
22
23 --另外一种计算undo所需大小的方法:
24 --计算undo表空间所需的大小
25 SQL> SELECT (
26 (SELECT MAX(undoblks)/600 * MAX(maxquerylen) FROM v$undostat) *
27 (SELECT value FROM v$parameter WHERE name = 'db_block_size'))/1024/1024 as Need_Size
28 FROM dual;
29
30
31 --查看当前undo表空间的大小
32
33 SQL> SELECT t.name,d.name,d.bytes/1024/1024 as TotalSize,t.flashback_on,d.status
34 FROM v$tablespace t
35 JOIN v$datafile d
36 USING (ts#)
37 WHERE t.name LIKE 'UNDO%';
38
Oracle ____Undo的更多相关文章
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...
- Oracle 的基本操作符
!= 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...
- 使用Zabbix监控Oracle数据库
Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...
- 基于Oracle安装Zabbix
软件版本 Oracle Enterprise Linux 7.1 64bit Oracle Enterprise Edition 12.1.0.2 64bit Zabbix 3.2.1 准备工作 上传 ...
- Oracle Database 12c Data Redaction介绍
什么是Data Redaction Data Redaction是Oracle Database 12c的高级安全选项之中的一个新功能,Oracle中国在介绍这个功能的时候,翻译为“数据编纂”,在EM ...
- 使用Oracle官方巡检工具ORAchk巡检数据库
ORAchk概述 ORAchk是Oracle官方出品的Oracle产品健康检查工具,可以从MOS(My Oracle Support)网站上下载,免费使用.这个工具可以检查Oracle数据库,Gold ...
- 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断
概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...
随机推荐
- 02-css的选择器
css的选择器:1.基本选择器 2.高级选择器 基本选择器包含: 1.标签选择器 标签选择器可以选中所有的标签元素,比如div,ul,li ,p等等,不管标签藏的多深,都能选中,选中的是所有的,而不是 ...
- ArrayList创建步骤及基本方法
ArrayList创建变量的步骤 ArrayList ------>集合 1: 导入包 java.util.ArrayList包中 2: 创建引用类型的变量 数据类型< 集合存储的数据类型 ...
- 当input获取倒焦点的时候,获得输入内容
描述:当用户点击输入框时,获取到他在input里输入的内容 $().keyup(function(){ $(this).val(); }) $(this).val()==this.value; $(t ...
- jackson用法
ObjectMapper mapper=new ObjectMapper(); //3.调用mapper的writeValueAsString()方法把一个对象或集合转为json字符串 Custome ...
- Java_myBatis_逆向工程
所谓逆向工程,就是根据数据库自动生成项目工程(包括了Interface.POJO.映射文件xml) 逆向工程包:https://github.com/wcyong/mybatisGeneratorCu ...
- 修改Linux Operating System的时间与时区
修改Linux Operating System的时间与时区 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有的小伙伴可能会遇到安装了linux系统后,尽管时区选择正确,也会发现系 ...
- 在 .NET Framework 4.0 的程序中使用 .NET Framework 2.0 的程序集
场景 在 目标框架 为 .NET Framework 4 的程序中,引用 目标框架 为 .NET Framework 2.0 的程序集,并使用 .NET Framework 2.0 程序集中的类型或者 ...
- 使用Aspose.Cells生成Excel的线型图表
目的: 1.根据模板里面的excel数据信息,动态创建line chart 2.linechart 的样式改为灰色 3.以流的形式写到客户端,不管客户端是否装excel,都可以导出到到客户端 4.使用 ...
- C++中路径的处理方法(string)
string 类提供字符串处理函数,利用这些函数,程序员可以在字符串内查找字符,提取连续字符序列(称为子串),以及在字符串中删除和添加.我们将介绍一些主要函数. 1.函数find_first_of() ...
- 关于Laravel 无法下载的问题
今天在git bush用composer安装laravel5.5卡住了,无法下载 解决办法:更换到国内源,就可以下载了 运行命令: composer config -g repo.packagist ...