- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle Undo
Oracle Undo
UNDO 表空间用于存放 UNDO 数据,当执行 DML 操作(INSERT,UPDATE 和 DELETE) 时,oracle 会将这些操作执行前的旧数据写入到 UNDO 段,在 oracle9i 之前,管理 UNDO 数据时使用(Rollback Segment)完成的。从 oracle9i 开始,管理 UNDO 数据不仅可以使用回滚段,还可以使用 UNDO 表空间.因为规划和管理回滚段比较复杂,所有 oracle database 10g
已经完全丢弃用回滚段,并且使用 UNDO 表空间来管理 UNDO 数据。
回滚段可以说是用来保持数据变化前映象而提供一致读和保障事务完整性的一段磁盘存储
区域。当一个事务开始的时候,会首先把变化前的数据和变化后的数据先写入日志缓冲区,然后
把变化前的数据写入回滚段,最后才在数据缓冲区中修改(日志缓冲区内容在满足一定的条件后
可能被写入磁盘,但在事务提交的时候日志必须写入磁盘,而数据缓冲区中的数据依赖于检查点
的发生和 DBWR 进程的活动)。
Rollback 是一个代价昂贵的操作,如果一个系统的事务回退率过高,应该检查系统是否正常或者程序设计思路是否存在问题。查询数据库启动依赖的事务回退率,如果发现太高,一定要引 起重视。
--查询回退率的 sql
SELECT NAME, VALUE FROM v$sysstat WHERE NAME IN (user commits, transaction rollbacks);
关于回滚段的数据,如果是 delete 操作,则回滚段将回记录整个行的数据;如果是 update, 则只记录被修改了的字段的变化前的数据(前映像);如果是 insert,则只记录插入记录的 rowid。所以,假如 commit,那么回滚段中简单标记该事务已经提交;假如 rollback,则操作是 delete 的话,把回滚段中的数据重新写回数据块,操作是 update 的话则把变化前的数据修改回去,操作是 insert 的话则根据 rowid 把该记录删除。这个过程是保障事务的完整性,保障数据不会丢失。
一致性读(consisitent reads) Oralce 的查询集是根据时间点来判定的。Oracle 内部通过系统改变号 SCN 作为相对时间点的标准,任何对数据库的改变都会产生 SCN,对数据块的数据改变的时候会把该改变所对应的 SCN 记录在块中。假设查询开始的时候 SCN 为 T,则在查询所扫描的数据块中,如果数据块的 COMMIT SCN 小鱼 T,则查询接受该数据,如果 COMMIT SCN 大于 T 或者说还没有产生 COMMIT SCN,则查询会尝试去回滚段中查找数据。这保证了
数据的读取时间点的一致性。在通过回滚段中获取数据的时候,本质上是把数据缓冲区中的数据
数据的读取时间点的一致性。在通过回滚段中获取数据的时候,本质上是把数据缓冲区中的数据
块做一个拷贝,然后将回滚段中记录的内容恢复到该块中,然后查询使用这个块来进行读取。
undo 表空间与
undo 表空间与 redo 日志文件在 oracle 中的作用非常重要,本文重点介绍 undo 回滚段的作用与特点,同时简单介绍 undo 与 redo 的区别和各自己的作用:
一.undo 中数据的特点:
是数据修改前的备份,主要是保证用户的读一致性
在事务修改数据时产生
至少保存到事务结束
二.undo 数据的作用:
回滚(rollback)操作
实现读一致性与闪回查询
从失败的事务中还原数据
非正常停机后的实例恢复
三.undo 回滚段的特点:
回滚段是由实例自动创建用于支持事务运行的专用段,同样是区和块组成,回滚顶会按实际
需要自动进行增长或收缩,是一段可以给指定事务循环使用的存储缓冲区。
每个事务只会使用一个回滚段,一个回滚段在同一时刻可能会服务于多个事务
3.
3.当一个事务开始的时候,会指定一个回滚段,在事务进行的过程中,当数据被修改时,原始
的数据会被复制到回滚段。
4.在回滚段中,事务会不断填充盘区,直到事务结束或所有的空间被用完,如果当前的盘区不
够用,事务会在段中请求扩展下一个盘区,如果所有已分配的盘区都被用完,事务会覆盖最初
的盘区或者在回滚段允许的情况下扩展新的盘区来使用.
5.回滚段存在于 undo 表空间中,在数据库中可以存在多个 undo 表空间,但同一时刻只能使
用一个 undo 表空间。
四.回滚段中的数据类型:
回滚段中的数据主要分为以下三种:
Uncommitted undo information; 未提交的回滚数据,该数据所关联的事务并未提交,
用于实现读一致性,所以该数据不能被其它事务的数据所覆盖
Comm
文档评论(0)