首页 > 新闻

重做(Redo)之redo的内容

时间:2009-12-08 07:06:31  作者:  我要投稿
Linux初探欢迎您的投稿,投放方法请点击这里查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
Redo的内容 Oracle通过Redo来实现快速提交,一方面是因为Redo Log File可以连续、顺序地快速写出,另外一个方面也和Redo记录的精简内容有关。 为了了解Redo的内容,首......
Redo的内容
Oracle通过Redo来实现快速提交,一方面是因为Redo Log File可以连续、顺序地快速写出,另外一个方面也和Redo记录的精简内容有关。
为了了解Redo的内容,首先需要了解两个概念:改变向量和重做记录。
¡ 改变向量(Change Vector)
改变向量表示对数据库内某一个数据块所做的一次变更。改变向量(Change Vector)中包含了变更的数据块的版本号、事务操作代码、变更从属数据块的地址(DBA)以及更新后的数据。例如,一个Update事务包含一系列的改变向量,对于数据块的修改是一个向量,对于回滚段的修改又是一个向量。
¡ 重做记录(Redo Record)
重做记录通常由一组改变向量组成,是一个改变向量的集合,代表一个数据库的变更(INSERT、UPDATE、DELETE等操作),构成数据库变更的最小恢复单位。例如,一个Update的重做记录包括相应的回滚段的改变向量和相应的数据块的改变向量等。
下面以一个更新(Update)操作为例介绍一下这个过程,如图6-2所示。

图6-2 更新(Update)操作引起的重做
假定发出了一个更新语句:
UPDATE emp SET sal = 4000 Where empno= 7788;
看一下这个语句是怎样执行的(为了简化描述,这里尽量简化了情况):
(1)检查empno=7788记录在Buffer Cache中是否存在,如果不存在则读取到Buffer Cache中。
(2)在回滚表空间的相应回滚段事务表上分配事务槽,这个操作需要记录Redo信息。
(3)从回滚段读入或者在Buffer Cache中创建sal=3000的前镜像,这需要产生Redo信息并记入Redo Log Buffer。
(4)修改Sal=4000,这是UPDATE的数据变更,需要记入Redo Log Buffer。
(5)当用户提交时,会在Redo Log Buffer记录提交信息,并在回滚段标记该事务为非激活(Inactive)。
下面通过一个具体的试验来再现这个过程。
(1)首先通过switch logfile切换日志。使用SYS用户进行日志切换,使得接下来的更新可以使用新的日志。
SQL> alter system switch logfile;

System altered.

SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
如果您需转载 重做(Redo)之redo的内容,请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目热门