当前位置:文档之家› 安徽工业大学数据库第十一章习题解答

安徽工业大学数据库第十一章习题解答

第十一章并发控制
1.并发操作可能会产生哪几类数据不一致性?用什么方法能避免各种不一致
性的情况。

答:数据库的并发操作所带来的数据不一致性有三类:丢失更新问题、不一致性分析问题和读“脏”数据问题。

对于并发操作带来的问题,通常采用并发控制的方法调度并发操作,避免造成数据的不一致性,使一个用户事务的执行不受其他事务的干扰。

2.为什么D M L锁只能提供解除S封锁的操作,而不提供解除X封锁的操作。

答:为防止由事务的ROLLBACK操作引起的丢失更新操作,X封锁必须保留到事务终点。

即X封锁不是用UNLOCK操作解除的,而是在事务结束的语义中包含了对X封锁的解除,因此,DML不提供解除X封锁的操作。

而为增加事务并发操作的程度,未到事务终点时,用户可以使用DML提供的专门解除S封锁的操作,随时解除事务的S封锁,这是因为被S封锁的数据不可能是未提交的修改。

3.为什么有些封锁需保留到事务终点,而有些封锁可随时解除。

答:为防止由事务的ROLLBACK操作引起的丢失更新操作,X封锁必须保留到事务终点。

而被S封锁的数据不可能是未提交的修改,因此可以随时解除事务的S封锁,达到增加事务并发操作的程度。

4.设T1、T2、T3是如下的三个事务:
T1:A:=A+2;
T2:A:=A*2;
T3:A:=A**2(A←A2)
设A的初值为0。

⑴若这三个事务允许并发执行,则有多少种可能的正确结果,请一一列举
出来;
⑵请给出一个可串行化的调度,并给出执行结果;
⑶请给出一个非串行化的调度,并给出执行结果;
⑷若这三个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调
度;
⑸若这三个事务都遵守两段锁协议,请给出一个产生死锁的调度。

解:
⑴A的最终结果可能有2、4、8、16。

因为串行执行次序有T1→T2→T3、T1→T3→T2、T2→T1→T3、T2→T3→T1、
T3→T1→T2、T3→T2→T1,对应的执行结果是16、8、4、2、4、2。

⑵T1T2T3
Slock A
Y=A=0
Unlock A
Xlock A
Slock A
A=Y+2 等待
写回A(=2)等待
Unlock A 等待
Y=A=2
Unlock A
Xlock A
Slock A
A=Y*2 等待
写回A(=4)等待
Unlock A 等待
Y=A=4
Unlock A
Xlock A
A=Y**2
写回A(=16)
Unlock A
最后结果A为16,是可串行化的调度。

⑶T1T2T3
Slock A
Y=A=0
Unlock A
Slock A
Y=A=0
Xlock A
等待Unlock A
A=Y+2
写回A(=2)Slock A
Unlock A 等待
Y=A=2
Unlock A
Xlock A
Xlock A
等待A=Y**2
等待写回A(=16)
等待Unlock A
A=Y*2
写回A(=0)
Unlock A
最后结果A为0,为非串行化的调度。

⑷T1T2T3
Slock A
Y=A=0
Xlock A
A=Y+2 Slock A
写回A(=2)等待
Unlock A 等待
Y=A=2
Xlock A
Unlock A 等待Slock A
A=Y*2 等待
写回A(=4)等待
Unlock A 等待
Y=A=4
Unlock A
Xlock A
A=Y**2
写回A(=16)
Unlock A
Unlock A
⑸T1T2T3
Slock A
Y=A=0
Slock A
Y=A=0
Xlock A
等待
Xlock A
等待
Slock A
Y=A=0
Xlock A
等待。

相关主题