什么软件能创建网站,友情链接分析,劳务派遣公司注册条件,网页设计入门软件文章目录 11.11.21.3 22.12.2 33.13.23.3 4 1
1.1 丢失更新(lost update)异常是指如果事务Tj读取了一个数据项#xff0c;然后另一个事务Ti写该数据项(可能基于先前的读取)#xff0c;然后Tj写该数据项。于是Ti做的更新丢失了#xff0c;因为Tj的更新覆盖了Ti写入的值。 给… 文章目录 11.11.21.3 22.12.2 33.13.23.3 4 1
1.1 丢失更新(lost update)异常是指如果事务Tj读取了一个数据项然后另一个事务Ti写该数据项(可能基于先前的读取)然后Tj写该数据项。于是Ti做的更新丢失了因为Tj的更新覆盖了Ti写入的值。 给出一个表示丢失更新异常的调度实例。 R1(A)R2(A)W2(A)W1(A)或者以表格的形式表示
T1 T2
-----------------
Read(A)Read(A)Write(A)
Write(A)
在上面的调度中事务T2写入的值由于事务T1的写入而丢失。1.2 给出一个表示丢失更新异常的调度实例表明在已提交读隔离性级别下该异常也可能存在。 T1 T2
-----------------
Lock-S(A)
Read(A)
unlock(A)Lock-X(A)Read(A)Write(A)unlock(A)commit
Lock-X(A)
Write(A)
unlock(A)
commit上述调度中的封锁确保了已提交读隔离性的级别。但由事务T2写入的值因T1的写入而丢失。1.3 解释为什么在可重复读隔离性级别下丢失更新异常不可能发生。 3、在可重复读取隔离级别不会出现丢失更新异常。在可重复读取隔离级别中事务T1读数据项X在X上持有一个共享锁直到事务结束。这使得较新的事务T2要等到T1结束才能够写X的值。这就强制成串行顺序T1、T2因此T2所写的值不会丢失。 2
2.1
考虑下面两个事务:
T1read(A) read(B)if AO then B:B1write(B)T2read(B)read(A)if BO then A:A1write(A)给事务T1与T2增加加锁、解锁指令使它们遵从两阶段封锁协议。T1lock-S(A) read(A) lock-X(B) read(B)if AO then B:B1write(B)unlock(A) unlock(B) T2lock-S(B) read(B) lock-X(A) read(A)if BO then A:A1write(A)unlock(B)
unlock(A)2.2 这两个事务会引起死锁吗? 行这些事务可能导致死锁。例如考虑以下调度
T1 T2
-----------------
Lock-S(A)
Read(A)Lock-S(B)Read(B)
Lock-X(B)Lock-X(A)此时调度出现了死锁。3
3.1
考虑下面两个事务:
T1read(A) read(B)if AO then B:B1write(B)T2read(B)read(A)if BO then A:A1write(A)设一致性需求为A0 ∨ B0初值是AB0。说明包括这两个事务的每一个串行执行都保持数据库的一致性。T1与T2有2种可能的串行调度T1、T2或者T2、T1。 对于调度T1、T2调度结束时A0B1 对于调度T2、T1调度结束时A1B0 可以看出串行执行会生成两种不同的结果但都保持了数据库的一致性。 3.2 设一致性需求为A0 ∨ B0初值是AB0。 给出T1和T2的一次并发执行执行产生不可串行化调度。 T1和T2的如下并发执行将产生不可串行化调度
T1 T2
----------------------------
Read(A)Read(B)Read(A)
Read(B)
if AO then B:B1if BO then A:A1Write(A)
Write(B)3.3 存在产生可串行化调度的T1和T2的并发执行吗? 没有导致可串行化调度的并行执行。 从第a部分我们知道一个可串行调度的结果是a 0∨ B 0。假设我们从T13开始读(A)。那么当日程安排 结束无论何时运行T2 B 1。现在假设 我们在T13完成之前开始执行T14。然后T2读(B) B的值为0。当T2结束时A 1。因此B 1∧A 1→(A 0∨B 0)类似于从T14开始读(B)。 4 什么是可恢复调度? 假设在一个调度中Tj读取了Ti写入的数据Ti在提交前发生故障我们必须中止Tj以保证事务地原子性。若Tj在Ti出现故障后是可中止的那么我们就称该调度是可恢复调度。 可恢复调度应满足:对于每个事务Ti和Tj如果Tj读取了由Ti所写的数据项则Ti先于Tj提交。