请教checkpoint和redo log的数据库原理问题

[复制链接]
查看11 | 回复9 | 2010-11-11 18:03:08 | 显示全部楼层 |阅读模式
例如现在有一个checkpoint C1,然后有个故障点E1
在C1到E1之间有个事务 T1,他已经commit,
按照书上的说法,这个T1事务是要redo的,但问题是这是建立T1操作的相应数据没有
从缓存中写入数据库的.如果数据已经写入数据库了,明显是不用redo的
但是书上好象从来没有提到这一点
只是说checkpoint前的已经提交的事务其操作的数据肯定也写入了数据库,所以不用redo
那么在checkpoint和故障点之间的事务是如何保证
那些已经commited的事务哪些要redo,哪些又不用redo的呢
大虾指教啊
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
原帖由 jayli426 于 2008-6-11 14:47 发表
例如现在有一个checkpoint C1,然后有个故障点E1
在C1到E1之间有个事务 T1,他已经commit,
按照书上的说法,这个T1事务是要redo的,但问题是这是建立T1操作的相应数据没有
从缓存中写入数据库的.如果数据已经写入数据库了,明显是不用redo的
但是书上好象从来没有提到这一点
只是说checkpoint前的已经提交的事务其操作的数据肯定也写入了数据库,所以不用redo
那么在checkpoint和故障点之间的事务是如何保证
那些已经commited的事务哪些要redo,哪些又不用redo的呢
大虾指教啊

楼主,一起学习。
你说的这是crash(instance) recovery的基本原理。oracle知道增量检查点的进度,恢复时smon进程根据控制文件中记录的low cache rba开始重做,并不考虑是否commit,之后再回滚uncommited事务。low cache rba是联机日志文件中的一个位置,这个位置之前的数据块全部同步到了磁盘上。
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
例如有这样一个事务(伪代码哦)
begin transaction
update table1 set col1 =5 where col1=3
commit;
end transaction;

修改之前col1中值为3,修改后为5
这个事务在checkpoint和故障点之间发生
并且成功提交,DB_Buffer中的修改也成功写入数据库
那么现在要恢复,按照书上的说法,我的理解
首先要
begin transaction
update table1 set col1 =3 where col1=5
commit;
end transaction;
然后再
begin transaction
update table1 set col1 =5 where col1=3
commit;
end transaction;
这不显然的冗余吗
Oracle也会这样做吗?还是有某种机制来优化呢??
请大虾指教啊
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
成功提交不一定代表 “DB_Buffer中的修改也成功写入数据库”。
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
推荐两篇文章:
http://space.itpub.net/13095417/viewspace-198292
http://space.itpub.net/13095417/viewspace-199237
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
如果“DB_Buffer中的修改也成功写入数据库”,那么恢复时:
8i:会重做所有检查点之后的事务,尽管重复;
9i以后:会在日志中记录所有写到磁盘中的块。那么之后恢复时,与这些块相关的重做记录会被先行排除。
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
原帖由 solearn 于 2008-6-11 18:19 发表
如果“DB_Buffer中的修改也成功写入数据库”,那么恢复时:
8i:会重做所有检查点之后的事务,尽管重复;
9i以后:会在日志中记录所有写到磁盘中的块。那么之后恢复时,与这些块相关的重做记录会被先行排除。

Could you point me to some document on the details of this 8i vs 9i difference? Thanks.
Yong Huang
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
原帖由 Yong Huang 于 2008-6-15 22:25 发表

Could you point me to some document on the details of this 8i vs 9i difference? Thanks.
Yong Huang


I'd like to attach the doc here. But I can't provide the relative URL because I encountered this doc long ago and did't record the linking address.
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
检查点之后的修改,即使对应的Buffer cache中的块已经被写进了磁盘中,它仍然要被应用重做记录,重做修改一次。
ORACLE日志的机制,就是无论应用多少遍日志,都不会对数据的准确性有影响。
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
原帖由 solearn 于 2008-6-15 18:38 发表
I'd like to attach the doc here. But I can't provide the relative URL because I encountered this doc long ago and did't record the linking address.

Thanks. By searching on Metacrawler.com, I find the PPT at
http://www.cs.utexas.edu/users/c ... 0and%20Recovery.ppt
And that PPT is more complete than the one you have.
If you go up one level on that URL, you'll find other interesting "Class Notes" this cannata person collected.
Yong Huang
[ 本帖最后由 Yong Huang 于 2008-6-15 21:49 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行