查看: 6761|回复: 15

关于回滚未提交的事务的疑问?

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2006-5-17 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
oracle的ppt中有这样一句:
State of the data before COMMIT or ROLLBACK statements are issued:
其中之一就是ata manipulation operations primarily affect the database buffer也就是在事务未提交之前,数据改变仅仅是在buffer里.

那么为什么在数据库恢复重启的时候,需要回滚未提交的事务呢?

我刚学,很多问题想不明白,望各位点拨!
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
2#
发表于 2006-5-17 11:19 | 只看该作者
数据的改变首先发生在数据缓冲中,有许多事件触发DBWR将脏块写回数据文件,脏块写回数据文件并不一定都发生在提交之后,这是其一,再者,即使数据库当掉时脏块都没有写回数据文件,但那些未提交事务的对数据缓冲的更改可能已有一部分写进了联机日志文件,重启时会先应用这些日志(前滚),所以前滚完成后还需要再回滚来保持事务一致性。

使用道具 举报

回复
论坛徽章:
0
3#
 楼主| 发表于 2006-5-17 11:47 | 只看该作者
谢谢!
rollback是根据回滚段的内容来做的吧?
请问重启之后的回滚是根据redo log中的记录还是回滚段?

使用道具 举报

回复
论坛徽章:
17
授权会员
日期:2005-10-30 17:05:33优秀写手
日期:2014-03-20 06:00:352013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412011新春纪念徽章
日期:2011-02-18 11:43:352011新春纪念徽章
日期:2011-01-04 10:38:442010新春纪念徽章
日期:2010-03-01 11:05:00生肖徽章2007版:马
日期:2009-11-03 13:55:02祖国60周年纪念徽章
日期:2009-10-09 08:28:00
4#
发表于 2006-5-17 11:49 | 只看该作者
最初由 fragrant 发布
[B]谢谢!
rollback是根据回滚段的内容来做的吧?
请问重启之后的回滚是根据redo log中的记录还是回滚段? [/B]


重新启动时候,首先做前滚(redo),再作会滚(undo)

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
5#
发表于 2006-5-17 13:02 | 只看该作者
最初由 fragrant 发布
[B]谢谢!
rollback是根据回滚段的内容来做的吧?
请问重启之后的回滚是根据redo log中的记录还是回滚段? [/B]


从回滚段头的事务表中找到未提交的事务来回滚。

使用道具 举报

回复
论坛徽章:
4
操作系统板块每日发贴之星
日期:2005-04-19 01:01:46授权会员
日期:2005-10-30 17:05:33管理团队2006纪念徽章
日期:2006-04-16 22:44:45会员2006贡献徽章
日期:2006-04-17 13:46:34
6#
发表于 2006-5-17 13:05 | 只看该作者

Re: 关于回滚未提交的事务的疑问?

最初由 fragrant 发布
[B]oracle的ppt中有这样一句:
State of the data before COMMIT or ROLLBACK statements are issued:
其中之一就是ata manipulation operations primarily affect the database buffer也就是在事务未提交之前,数据改变仅仅是在buffer里.

那么为什么在数据库恢复重启的时候,需要回滚未提交的事务呢?

我刚学,很多问题想不明白,望各位点拨! [/B]


1) commit: guarantee data has been written
                     into redo log ( not datafile)

2) dirty buffer written to datafile must happen
    after it goes to redo log, and it could happen
   after or before commit.

3) rollback segment  is for before-image of
   a block, for rollback or consistent data image
   of other statement

使用道具 举报

回复
论坛徽章:
1
BLOG每日发帖之星
日期:2009-05-18 01:01:05
7#
发表于 2006-5-17 13:17 | 只看该作者
最初由 wyq21973 发布
[B]数据的改变首先发生在数据缓冲中,有许多事件触发DBWR将脏块写回数据文件,脏块写回数据文件并不一定都发生在提交之后,这是其一,再者,即使数据库当掉时脏块都没有写回数据文件,但那些未提交事务的对数据缓冲的更改可能已有一部分写进了联机日志文件,重启时会先应用这些日志(前滚),所以前滚完成后还需要再回滚来保持事务一致性。 [/B]


既然没提交的事务没写到数据文件里,重启时要用在日志文件里未提交的事务前滚干吗?对谁进行前滚,回滚?

使用道具 举报

回复
论坛徽章:
4
操作系统板块每日发贴之星
日期:2005-04-19 01:01:46授权会员
日期:2005-10-30 17:05:33管理团队2006纪念徽章
日期:2006-04-16 22:44:45会员2006贡献徽章
日期:2006-04-17 13:46:34
8#
发表于 2006-5-17 13:25 | 只看该作者
最初由 pentium 发布
[B]

既然没提交的事务没写到数据文件里,重启时要用在日志文件里未提交的事务前滚干吗?对谁进行前滚,回滚? [/B]


no, it's possible dirty buffer has been written
to datafiles, before commit.

使用道具 举报

回复
论坛徽章:
1
BLOG每日发帖之星
日期:2009-05-18 01:01:05
9#
发表于 2006-5-17 13:33 | 只看该作者
最初由 Niy38 发布
[B]

no, it's possible dirty buffer has been written
to datafiles, before commit. [/B]


这我知道,但上面wyq21973说:
即使数据库当掉时脏块都没有写回数据文件,但那些未提交事务的对数据缓冲的更改可能已有一部分写进了联机日志文件,重启时会先应用这些日志(前滚),所以前滚完成后还需要再回滚来保持事务一致性。

上面意思不是说脏块还没写进数据文件,也要回滚的吗?

使用道具 举报

回复
论坛徽章:
23
2010新春纪念徽章
日期:2010-03-01 11:19:10夏利
日期:2013-07-31 16:53:18蜘蛛蛋
日期:2013-04-08 16:34:01蜘蛛蛋
日期:2012-05-15 14:23:47紫蛋头
日期:2012-05-15 14:11:43ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15紫蛋头
日期:2011-08-12 13:34:272011新春纪念徽章
日期:2011-02-18 11:43:33ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51比亚迪
日期:2014-01-02 15:24:53
10#
发表于 2006-5-17 13:38 | 只看该作者
看看看完這兩個能不能找到你需要的答案。

redo logs and recovery.ppt

629 KB, 下载次数: 98

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表