问题 问答题

试题五(共15分)阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。[说明]假设有两项业务对应的事务T1、T2与存款关系有关:. 转账业务:T1(A,B,50),从账户A向账户B转50元;. 计息业务:T2,对当前所有账户的余额计算利息,余额为X*l.01针对上述业务流程,回答下列问题:

[问题3](4分)若将计息业务T2改为对单个账户的余额计算利息,即T2(A)余额为A*1.01,请给出串行调度T1(A,B,50)->T2(A)->T2(B)和串行调度T2(A)->T1(A,B,50)->T2(B)的执行结果。

若将计息业务设计为对单个账户的余额计算利息,这种方案是否正确,为什么

答案

参考答案:三个事务的串行: (1) T1(A,B,50)->T2(A)->T2(B) 结果:A=50.5 B=252.5 (2) T2(A)->T1(A,B,50)->T2(B) 结果:A=51 B=252.5 不正确。计息业务设计为对单个账户的余额计算利息,无法实现对所有账户的锁定和统一计息,其间的转账会产生数据错误,会造成银行或客户的损失。

解析:本题考查对事务设计、并发控制的理解和掌握。 两个事务T1、T2的串行执行只有两种方式:Tl执行完执行T2(记为:T1->T2)和T2执行完执行Tl(记为:T2->T1),结合A、B的初值,即可计算出T2->Tl的执行结果。 根据A、B的初值,按照给定的调度,获得执行结果为:A=50.5,B=252,与任何一个串行执行的结果都不同,为错误的调度,事实上会造成储户的无端损失。 引入两段锁协议后可保证调度的正确。根据锁类型和加解锁的要求,本题中所有的读取随后即要修改,对应了SQL中的UPDATE指令,可直接加X锁,具体参见参考答案:。 若将计息业务T2改为对单个账户的余额计算利息,根据提示的情况,调度结果可能存在不一定性,这样的事务设计是错误的。

单项选择题
问答题 简答题