Oracle 好书 07 ( undo 表空间管理 )

本文深入探讨了Oracle数据库中DML语句执行过程与UNDO机制的作用,包括UNDO数据块的存储、一致性读、回滚事务及实例恢复等关键概念。通过解析DML操作的步骤,解释了如何利用UNDO表空间进行数据恢复与一致性读取,同时介绍了配置AUM(自动UNDO管理)和管理UNDO表空间的方法。

对于DML语句来说,只要修改了数据块,oracl数据库就会将修改前的数据保留下来,保存在undo segment里,而 undo segment 则保存在 undo 表空间里。

- DML语句与 undo

  DML 语句执行过程

  1. 在shared pool 里进行解析,从而生成执行计划

  2. 假设根据执行计划, 得出的记录放在10号数据文件的54号数据块里

  3. 服务器进程在 buffer cache 里找到一个可用的undo数据块,如果没有发现, 则到undo表空间里找一

     个可用的undo块,并调入 buffer cache, 假设获得的 undo 数据块号为 24号,位于11号undo数据

     文件里。

  4. 将改变前的值放入11号数据块

  5. 由于 undo 数据块发生了变化,于是产生重做记录,假设重做记录号为120.

  6. 在buffer cache 里找到54号数据块,如果没有发现,从10号数据文件里调入

  7. 将改变后的值存入54号数据块

  8. 由于数据库发生变化,于是产生重做记录,假设重做记录号为121

  9. 控制权返回给用户,如果在sql*plu里执行DML, 则表现为光标返回。

10. 当用户发出 commit 命令时,触发LGWR进程,将120与121这两个重做记录写入联机日志文件,并将

    54号数据块和11号undo数据块头部所记录的事务状态标记设置为已提交。然后控制权返回用户,

    如果在sql*plus里执行DML操作,则表现为光标返回。

11. 这个时候,54号数据块以及11号undo块并不一定被DBWn写入数据文件,只有在脏数据块的数量

    达到一定程度才会被写入。

    

  事务只要被提交或回滚,那么该事务所使用的undo块就可以被覆盖。

- undo 作用 

  提供一致性读,回滚事务,实例恢复。

  一致性读 :

  image

  image

  image

  image

  image

  image

- 配置 AUM

  先设置 undo_management 参数, 设置为 auto

  然后创建一个undo表空间,并初始化参数 undo_tablespace,这个参数说明数据库当前使用哪个undo

  表空间, 剩下的工作就数据库自动完成了.

  当发生一个 DML 操作时,服务器进程会选择一个 undo segment. AUM采用的是事务绑定 undo segment

  的算法,算法如下:

  image

  image

  image

  image

  image

  image

  image

  image

- 管理 undo 表空间 

  数据库只能使用一个 undo 表空间, 如果我们改变 undo_tablespace, 这叫做 undo表空间切换。

  image

  alter tablespace undoew retention guarantee;

  alter tablespace undoew retention noguarantee;

  image

  借助 Database Control 所提供的 Undo Advisory 更简单可以判断undo 表空间大小。

转载于:https://www.cnblogs.com/moveofgod/archive/2013/04/25/3041716.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值