什么是回滚和撤销

  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的更多相关文章

  1. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  2. 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. ...

  3. 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 服务器安装操 ...

  4. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  5. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  6. 基于Oracle安装Zabbix

    软件版本 Oracle Enterprise Linux 7.1 64bit Oracle Enterprise Edition 12.1.0.2 64bit Zabbix 3.2.1 准备工作 上传 ...

  7. Oracle Database 12c Data Redaction介绍

    什么是Data Redaction Data Redaction是Oracle Database 12c的高级安全选项之中的一个新功能,Oracle中国在介绍这个功能的时候,翻译为“数据编纂”,在EM ...

  8. 使用Oracle官方巡检工具ORAchk巡检数据库

    ORAchk概述 ORAchk是Oracle官方出品的Oracle产品健康检查工具,可以从MOS(My Oracle Support)网站上下载,免费使用.这个工具可以检查Oracle数据库,Gold ...

  9. 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断

    概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...

随机推荐

  1. Iptables防火墙规则使用

    iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...

  2. 元组&哈希&字典

    1.元组(1)特性:不可变(不能修改.添加.删除),可以做切片 元组本身不可变,如果元组中还包含其他可变元素,这些可变元素可以改变(元组里套用列表,列表中的值可变)(2)功能: index count ...

  3. linux tail -f messages查看控制台失败

    [root@localhost log]# tail -f /var/log/messages ......................... tail: cannot watch `/var/l ...

  4. Android Retrofit2.1.0设置编码格式GBK

    设置接口如下: public interface IHttpService { /** * 获取userId * @param params * @return */ @FormUrlEncoded ...

  5. 第三次实验计算分段函数 第四次计算分段函数和循环NEW 第五次分支+循环加强版 实验报告

    一.实验题目,设计思路,实现方法 第四次分支+循环 加强版 (2-2计算个人所得税,2-7 装睡,2-8计算天数) 设计思路:2-2 用if-else的语句,与计算分段函数的题类似的做法:2-7 运用 ...

  6. JavaScript/HTML/CSS 之 iframe自适应高度

    最高效简介的手段是利用CSS的内置calc函数: iframe{ height:calc(100vh - 50px) auto;//假令:html顶部有高度为50px的导航条 //min-height ...

  7. CSS进阶之模拟Bootstrap网格布局

    目前暂时实现效果,容后面整理心得,先贴上源代码. 源码 <!DOCTYPE html> <html> <head> <title>demo bootst ...

  8. [转]find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释:    -exec  参数后面跟的是comm ...

  9. JSP验证码。

    package com; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.aw ...

  10. linux笔记_day03

    1.命令行展开{} mkdir -p a/b/{c,d/e} 2.-v verbose 详细的 3.touch touch - change file timestamps 4.stat 文件  显示 ...