首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库中的回滚和调度?

数据库中的回滚和调度?
EN

Stack Overflow用户
提问于 2015-04-18 20:17:45
回答 4查看 531关注 0票数 8

如果我们在以下调度中使用时间戳顺序进行并发控制:

我的助教说T2,T3,T5在运行,T4,T1是回滚。我觉得是假的。有专家能帮我们吗?(也就是说,在本附表中,哪个事务回滚和哪个事务回滚完成?

更新:完成所有工作后的所有事务,提交。

EN

回答 4

Stack Overflow用户

发布于 2015-04-19 12:41:29

一般来说,在默认情况下,读者不会阻止作者,而作者也不会阻止读者。

写入行的第一个会话持有锁,直到发出commit或rollback,其他会话将被该锁阻止写入,但仍然可以读取。

基于此

  • T1可以写入(Y),因为没有其他会话写入y,然后对y持有一个锁。
  • T2从来不写,所以也不会被阻止。
  • T3试图在T1之后写(Y),所以被阻塞了。
  • T4写(X),T5对x的读取不影响这一点。
  • T1持有的锁阻止了T5编写y的尝试。

但是,所有这些都不应该成为回滚的原因,并且假设不发出显式提交或回滚。

票数 4
EN

Stack Overflow用户

发布于 2015-04-23 17:59:58

问题是,正如@DavidAldridge所指出的,“读者不阻止作者,作家不阻止读者”。事务3将等待transacion 1,事务5将等待事务1和事务3,它们可以等待很长时间,等待n秒钟,也可以完全不等待,这取决于为DB设置的参数。在甲骨文中,这就是它的工作方式。

伙计们,既然这是个竞赛题,我会假设逻辑,然后继续。

这很大程度上是关于解释和坚持所给予的东西。这里给出的信息是:用于并发控制的时间戳排序。然后他给了我们: T1,T2 to T5。然后我假设T1优先,然后是T2等等,因为事务总是被序列化的:一个接着一个,基于它们的时间戳。我确实认为,为了让人假设'T5 Read(x)‘是第一个事务,仅仅因为文本的处理方式是添加了不存在的信息。上面写着时间戳排序,给你T1,T2.逻辑上说,一个接一个。没有事务会回滚,它们只是等待,这不仅仅是因为一个事务可能持有一个锁,而另一个事务也试图获得自动回滚的锁。在Oracle中,只有在死锁情况下,事务才会自动回滚。由于情况似乎并非如此,因此不存在回滚。

票数 1
EN

Stack Overflow用户

发布于 2015-04-27 13:40:07

这里有一个有用的MSDN链接,它向您展示了ROLLBACK事务及其工作方式,而不是试图用我自己的话解释它。

https://msdn.microsoft.com/en-us/library/ms181299.aspx?f=255&MSPPError=-2147217396

任何问题都可以问我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29722337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档