1、协议内容
��时间戳排序协议保证任何有冲突的read和write操作按时间戳顺序执行:
⑴�假设事务Ti发出read(Q)操作:
��① 若TS(Ti)<W-TS(Q),则Ti需要读入的Q值已被覆盖。因此,read操作被拒绝,Ti回滚;
��② 若TS(Ti)≥W-TS(Q),则执行read操作,而R-TS(Q)的值被设为R-TS(Q)与TS(Ti)中的较大者。这一条主要是解决读/写冲突的!
⑵ 假设事务Ti发出write(Q)操作:
��① 若TS(Ti)<R-TS(Q),则Ti产生的Q值是先前所需要的值,但系统已假定该值不会被产生。因此,write操作被拒绝,Ti回滚;
 
��① 若TS(Ti)<R-TS(Q),则Ti产生的Q值是先前所需要的值,但系统已假定该值不会被产生。因此,write操作被拒绝,Ti回滚;
 
��③ 其他情况下执行write操作,并将W-TS(Q)的值设为TS(Ti)。这一条主要是解决写/读和写/写冲突的!事务Ti被并发控制机制回滚之后,被赋予新的时间戳并重新启动,进入系统。

2、调度举例
��如图11-3-2所示,我们来分析这个调度中的两个事务在时间戳排序协议下是如何执行的。首先我们假设事务在第一条指令执行之前的那一刻被赋予时间戳。同时,对事务要访问的任何数据项来说,假设它们的W-TS和R-TS的初始值都为0。
图11-3-2:在时间戳排序协议下调度中事务的执行
��⑴�准备执行T1的read(B),使得T1的时间戳为TS(T1),由于W-TS(B)=0,根据时间戳排序协议的⑴②(TS(T1)≥W-TS(B)),则执行T1的read(B),同时将R-TS(B)改为TS(T1),即R-TS(B)=TS(T1);
��⑵�准备执行T2的read(B),使得T2的时间戳为TS(T1),由于W-TS(B)=0,根据时间戳排序协议的⑴②(TS(T1)≥W-TS(B)),则执行T2的read(B),同时将R-TS(B)设为TS(T2)(因为TS(T2)>TS(T1)),即R-TS(B)=TS(T2);
��⑶�准备执行T2的write(B),由于R-TS(B)=TS(T2),W-TS(B)=0,根据时间戳排序协议的⑵①和⑵②,这两个条件都不满足,因此根据⑵③执行T2的write(B),同时将W-TS(B)改为TS(T2),即R-TS(B)=TS(T2);
��⑷�…………按照以上分析方法,请大家自己课下分析调度中其他读写操作在时间戳排序协议下是如何执行的。

3、小结

��时间戳排序协议保证:
��⑴�满足该协议的任何调度都是冲突可串行化的,这主要是因为该协议是按照事务的时间戳顺序来处理事务之间的冲突操作;
��⑵�满足该协议的调度无死锁,因为冲突的事务被回滚重启并赋予新的时间戳,而不是等待执行。但该协议不保证:所产生的调度都是可恢复的,所以该协议在保证调度可恢复且无级联这一方面还需要加强。