`
wsql
  • 浏览: 11777472 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

undo系列学习之undo段和区的探究

 
阅读更多

1)回滚段是磁盘上的一段空间

2)当一个事务开始的时候:
首先,把变化前的数据和变化后的数据写入redo log file
其次,把变化前的数据和相关的事务信息写入回滚段
最后,才在data_buffer_cache中修改数据

3)commit做两件事:
a)写日志
b)在回滚段中标记事务为inactive(小事务还会在buffer cache里面标志)

4)undo
a)delete操作:undo为整个数据行
b)update操作:undo仅为前镜像
c)insert操作:undo为rowid
当rollback时:
delete操作,则把回滚段中的数据重新写回数据块
update操作,把前镜像修改回去
insert操作,根据记录的rowid,将此删掉

5)查询的结果集是根据时间点来判定的。

6)回滚块和数据块一样,都在sga中,也都是database_buffer_cache的一份子

7)同一个事务不能跨越回滚段,即便是其他回滚段空闲,该大事务也只能使用被分配的回滚段即使该回滚段扩展。

接下来考究单个回滚段内的使用、扩展、回缩的问题
假定一个回滚段存在extent 1,2,3,4,5

8)一个回滚段至少包含2个区

9)每个回滚段有一个回滚段头,回滚段头是一个数据块,里面记录了事务表信息。

10)回滚段的区是循环使用的:事务从extent 1的第二个块开始使用,直到extent 5的末尾
回滚段的段头的事务表也是循环使用
区的使用从一个跨越到另一个的次数,可以查询如下:
sys@ORCL> select usn,wraps from v$rollstat;

USN WRAPS
---------- ----------
0 1
11 68
12 60
13 79
14 70
15 71
16 67
17 68
11)既然回滚段是循环使用的,那为什么会扩展呢?
假定这样一种情况,存在一个事务,呆在extent 3,一直没有提交,然后回滚段循环使用到了extent 2,当extent 2使用完毕的时候发现extent 3存在未提交的事务,这时,即使extent 4,5,1中的事务都已经提交,当前事务也不能越过extent 3而去使用后面的可使用的extent,那么只好扩展新的extent,假定为extent 2-1.因为回滚段之间的区是链状串起来的,但节点2-1的下一个extent依然是extent 3,假如2-1使用完毕发现extent 3仍然存在未提交的事务,则继续扩展。回滚段在扩展后,是需要回收的。Smon进程每12h作为一个周期会对所有回滚段进行回收。shrinks表示回收的次数
sys@ORCL> select usn,optsize,shrinks from v$rollstat;

USN OPTSIZE SHRINKS
---------- ---------- ----------
0 0
1 1
2 0
3 0
4 1
5 0
6 0
7 0
8 0
9 0
10 0
12 3

12)块清除:已经提交的数据,需要标志为已经提交,从而使得后来的会话访问该数据的时候不再产生一致读而直接读该块。而如果事务提交的时候块已经被写入磁盘,则当时不会对块进行清除,需要延迟清除。当被提交但没有来得及清除的块在下次被会话读取的时候,会话会检查该块上最新的事务状态。

13)对回滚段的监控,最常用的是查看v$rollstat
字段值:
shrinks很大,可以认为回滚段设置太小

分享到:
评论

相关推荐

    相克军 ORACLE 讲座 深度剖析UNDO段 笔记.doc

    里面也有段区块,ORACLE自动建立生成、自动使用UNDO段。 作为高级别的DBA是需要知道ORACLE如何使用UNDO段的。 1 Undo表空间及管理方式 ORACLE开始一个事务的时候,会用到表空间。将修改前的数据保存在UNDO段里。 ...

    Undo

    Undo

    RAC下的REDO和UNDO管理

    RAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和UNDO管理 收藏.docxRAC下的REDO和...

    C#做的简单的Undo、Redo功能的实现

    这个是做实验时,简单基本的Undo、Redo的操作、在一个winForm中实现,并且可以设置Undo的最大次数。包中除了项目外,还附有报告.

    专题之Undo工作原理剖析

    专题之Undo工作原理剖析 相当专业的深入剖析 关于oracle 10g中Undo表空间的原理解析 值得看下

    redo undo framework source code

    redo undo framework source code redo undo framework source code

    NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行速度的比较

    BLOG_Oracle_lhr_【知识点整理】Oracle中NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行速度的比较BLOG_Oracle_lhr_【知识点整理】Oracle中NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行...

    seata-oracle版undolog.sql

    oracle版本的undolog建表语句。 2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地...

    undo表空间恢复

    undo表空间恢复

    c# undo/redo例子

    c# undo/redo例子 支持文字的样式,颜色修改 动态进度条

    C#实现的undo/redo的window窗体

    针对一个window窗体实现了undo/redo功能,包括textBox,checkBox, listBox, comboBox, radioButton以及按钮焦点变化的实现。可能有些小bug思路仅供参考。完整的工程文件,VS打开即可运行,欢迎评论~ 详细说明参见...

    Arcgis Engine Undo和Redo 功能实现

    Arcgis Engine Undo 和 Redo 功能实现

    12c 新特性-Temporary Undo

    介绍12c新特性Temporary Undo

    mfc support redo/undo

    实现redo,undo操作,来源于网络分享下。

    Undo_Redo机制在CAD中的应用

    Undo_Redo机制在CAD中的应用, 摘要:为了增强CAD系统的灵活...持无限Undo/Redo和批量化操作的CAD图形绘制系统,文章介绍了各模块的实现原理及核心算法。 关键词:无限撤消/重做设计模式对象持久化批量化操作绘图CAD

    C# undo\redo框架

    Undo/Redo framework for editing controls in a Windows application 在Windows应用程序中编辑控件的撤销/重做框架。

    undo redo 原型设计

    cpp文件 undo redo 原型设计 部分代码 class Command { public: virtual BOOL UnDo() = 0; virtual BOOL ReDo() = 0; };

    UNDO表空间管理

    比较深入浅出的描述了基于oracle10g/11g的UNDO表空间的管理

    oracle Undo表空间管理

    oracle Undo表空间管理,oracle 学习人员必看的不可缺少的资料。

Global site tag (gtag.js) - Google Analytics