123
返回列表 发新帖
楼主: 我上面有人

讨论:不要回滚怎么样?

[复制链接]
论坛徽章:
7
授权会员
日期:2010-12-06 19:50:26数据库板块每日发贴之星
日期:2011-09-03 01:01:01迷宫蛋
日期:2011-09-08 16:30:08ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18
21#
 楼主| 发表于 2008-3-28 17:34 | 只看该作者
commit前,“回滚”先将数据文件中的数据放入回滚表空间;而“前滚”是commit后再将“前滚”表空间的数据放入数据文件。一个commit前,一个commit后,开销当然是差不多了。

使用道具 举报

回复
论坛徽章:
59
狮子座
日期:2016-03-26 13:35:402013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-02-25 11:06:15ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20灰彻蛋
日期:2012-04-25 13:19:33紫蛋头
日期:2012-03-14 11:16:09最佳人气徽章
日期:2012-03-13 17:39:18玉石琵琶
日期:2012-02-21 15:04:38鲜花蛋
日期:2011-11-30 14:13:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
22#
发表于 2008-3-28 17:46 | 只看该作者
LZ大哥我前面写了那么多似乎你没看懂啊
如果仅仅执行一个事务,那么不管是把数据块复制到'前滚'表空间or回滚表空间,仅仅是复制数据的开销这个当然差不多了
但问题是你一个事务总得结束吧,要么rollback要么commit
现在commit的时候,使用你的'前滚'方法还要把前滚表空间的脏块复制回去,但是用undo表空间不需要复制回去啊

使用道具 举报

回复
论坛徽章:
7
授权会员
日期:2010-12-06 19:50:26数据库板块每日发贴之星
日期:2011-09-03 01:01:01迷宫蛋
日期:2011-09-08 16:30:08ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18
23#
 楼主| 发表于 2008-3-28 18:03 | 只看该作者
我真有点不明白你的意思了。
commit时,undo表空间的数据是不用复制,但之前呢?undo表空间的数据要先从数据文件复制过来呀。

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2007-08-09 15:37:26会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB元老
日期:2007-10-15 21:12:09ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28灰彻蛋
日期:2013-06-24 14:20:02
24#
发表于 2008-3-28 18:25 | 只看该作者
数据访问是通过ram中的block cache 而不是直接访问datafile

即使如楼主所说的话,假设session a commit 时 os切换进程至session b 读数据如何处理

[ 本帖最后由 catchwo 于 2008-3-28 18:31 编辑 ]

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2007-08-09 15:37:26会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB元老
日期:2007-10-15 21:12:09ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28灰彻蛋
日期:2013-06-24 14:20:02
25#
发表于 2008-3-28 18:40 | 只看该作者
还有
“提交后,再将数据放入数据文件中。这样其它用户访问该数据时就很简单了,不用管该数据到底是在回滚表空间还是在数据文件中。”
啥意思

使用道具 举报

回复
论坛徽章:
0
26#
发表于 2008-3-28 19:12 | 只看该作者
原帖由 我上面有人 于 2008-3-28 17:34 发表
commit前,“回滚”先将数据文件中的数据放入回滚表空间;而“前滚”是commit后再将“前滚”表空间的数据放入数据文件。一个commit前,一个commit后,开销当然是差不多了。

采用回滚的方式,对很大的事务执行commit的时间很短,执行rollback的时间可能很长。把消耗放在执行的过程中。
采用前滚的方式,对很大的事务执行commit的时间可能很长,执行rollback的时间就很短。把消耗放在commit的过程中。
对于用户来说,commit的使用比rollback使用的次数多,你觉得哪个更好?

使用道具 举报

回复
论坛徽章:
16
数据库板块每日发贴之星
日期:2007-12-03 01:03:272010世博会纪念徽章
日期:2010-09-14 17:24:312010新春纪念徽章
日期:2010-03-01 11:20:05生肖徽章2007版:马
日期:2009-11-13 10:55:15参与WIN7挑战赛纪念
日期:2009-11-06 10:44:24CTO参与奖
日期:2009-03-23 11:00:18生肖徽章2007版:马
日期:2009-02-08 17:20:54生肖徽章2007版:兔
日期:2008-12-01 13:33:59生肖徽章2007版:马
日期:2008-10-31 19:01:49奥运会纪念徽章:赛艇
日期:2008-10-24 13:25:17
27#
发表于 2008-3-28 19:20 | 只看该作者
似乎看明白了一点点

使用道具 举报

回复
论坛徽章:
0
28#
发表于 2008-3-28 19:21 | 只看该作者
采用前滚的方式,对很大的事务执行commit的时间可能很长,执行rollback的时间就很短。把消耗放在commit的过程中。

如果我下的上面这个结论是正确的。那么请假设一下,如果一个事务commmit的时间需要20分钟。在commit执行到10分钟的时候突然数据库down了。因为commit还没有完成,数据应该要回到commit前的状态,但是已经有一部分的数据被修改了。这时候没有回滚段了,请问有什么机制可以让数据库回到commit前的状态?

使用道具 举报

回复

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

本版积分规则 发表回复

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