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

jayli426 2008-06-10 10:31:50


例如现在有一个checkpoint C1,然后有个故障点E1

在C1到E1之间有个事务 T1,他已经commit,
按照书上的说法,这个T1事务是要redo的,但问题是这是建立T1操作的相应数据没有
从缓存中写入数据库的.如果数据已经写入数据库了,明显是不用redo的
但是书上好象从来没有提到这一点

只是说checkpoint前的已经提交的事务其操作的数据肯定也写入了数据库,所以不用redo

那么在checkpoint和故障点之间的事务是如何保证
那些已经commited的事务哪些要redo,哪些又不用redo的呢
...全文
239 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
skystar99047 2008-06-19
  • 打赏
  • 举报
回复
commit成功,代表整个事务处理完毕。commit不成功的话,会自动回滚该事务。
还要注意的是redo log并不是你所指的提交成功后就不需要redo,redo log作为一种永久可恢复资源存在,当系统出现故障时,你可以通过redo log恢复任何redo log中所记录的日期的数据。
至于一个事务内的回滚,是通过log buffer回滚。
ruihuahan 2008-06-15
  • 打赏
  • 举报
回复
redo log 成功写入,一个事物才算提交成功。
liuyi8903 2008-06-15
  • 打赏
  • 举报
回复
dirty data没有写入到磁盘,并不代表没有写redo,

只有等redo后再会返回commit的消息.oracle总是保证写先日志再写数据.

你要先搞清楚commit的原理. commit只是一个标志.为事务生成一个SCN(SCN用于保证数据库一致性和检查点)
log buffer=>redo file ,以及清除锁和块标志

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧