UPDATE操作和UNDO

UPDATE T SET COL='A' WHERE COL='B';

1、在SHARED POOL里解析,从而生成执行计划。

2、假如根据执行计划,得出COL='B'的记录放在10号数据文件的54号数据块里。

3、服务器进程在BUFFER CACHE里找到一个可用UNDO数据块,如果没有发 现,则到UNDO表空间找一个可用的UNDO数据块,并调入BUFFER CACHE。假如获得的UNDO数据块在10号表空间块号为24号。

4、将改变前的值B放入24号数据块里。

5、由于UNDO块发生了变化,需要产生重做记录,假设重做记录号位120

行号 事务ID FILE# BLOCK# VALUE

120 T1 11 24 B

6、在BUFFER CACHE找到54号数据块,如果没有,则到UNDO表空间调入。

7、将改变后的值也就是A放入54号数据块。

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

行号 事务ID FILE# BLOCK# VALUE

121 T1 10 54 A

9、控制权返回给用户。

10、当用户发出COMMIT命令时,触发LOGWR进程,将120121这两个重做 记录写入联机日志文件,并将54号数据块和24号数据块的头部所记录的 事务状态标志为已提交。然后控制权返回给用户。

11、此时,5424号数据块里UNDO块并不一定被DBWN写入数据文件。只有 在脏数据块的数量达到一定程度才会被写入。

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

事务只要被提交或回滚,那么事务所使用的UNDO块数据就可以被覆盖。对于上面的例子来说,当第10步,用户发出COMMIT命令后,11UNDO块里的数据就可以被其它事务所覆盖。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24496749/viewspace-1045267/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24496749/viewspace-1045267/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值