📜  门| GATE-CS-2015(Set 3)|第40章

📅  最后修改于: 2021-06-29 00:28:50             🧑  作者: Mango

考虑以下涉及两个事务T1和T2的部分附表S。仅显示了读取和写入操作。对数据项P的读操作由read(P)表示,对数据项P的写操作由write(P)表示。

Q39

假设事务T1在时间实例9之后立即失败。
(A)必须中止T2,然后必须重新启动T1和T2以确保事务原子性
(B)附表S是不可恢复的,不能确保交易的原子性
(C)仅T2必须中止,然后重新启动以确保事务原子性
(D)附表S是可恢复的,可以确保原子性,而无需执行其他任何操作答案: (B)
解释:

如果交易失败,则原子性要求撤消交易的影响。耐久性指出,一旦提交事务,就无法撤消其更改(如果不运行另一个补偿交易)。
可恢复的时间表:对于事务Ti和Tj的每组,A都精确地计划在何处。如果Tj读取了先前由Ti写入的数据项,则Ti的提交操作在Tj的提交操作之前。
中止涉及撤消操作并重做它们,因为在时间戳记之前中止了操作。

选项(A) :必须中止T2,然后必须重新启动T1和T2以确保事务原子性。这是不正确的,因为它说中止事务T2,然后重做所有操作。但是,没有保证这次会成功,因为T1可能再次失败。

选项(B) :附表S是不可恢复的,不能确保事务的原子性。正确,从定义上来说,这是一个不可恢复的时间表,因此,即使我们开始逐个撤消操作(在t1失败之后)以确保事务原子性,现在也是如此。仍然我们不能撤消已提交的事务。因此,此调度从定义上是无法恢复的,而且不是原子的,因为它使数据库处于不一致的状态。只是脏读,所以无法恢复。

选项(C) :只有T2必须中止,然后重新启动以确保事务原子性。这是不正确的,因为它说仅中止事务T2,然后重做所有T2操作。但这是脏读取问题,因为它正在读取由T1写入的数据项A,并且T1未提交。再次,这将是肮脏的读取问题。太不对了。

选项(D) :附表S是可恢复的,可以确保事务的原子性,而无需执行其他任何操作。不正确,显然是说计划s是可恢复的,但它是不可恢复的,因为T2读取了由T1和T1写入的数据项A失败并且回滚,在回滚T1开始撤消所有操作并将A的值修改为先前的值但是T2已经提交,因此T2无法更改先前从T1获取的A的读取值。

此解决方案由Nitika Bansa提供
这个问题的测验