1、第五章,事务管理,课程目标,事务管理的基本概念并发控制恢复SQL Server中的事务管理,事务管理的基本概念,数据库作为一种提供共享数据服务的机构,在支持用户并发访问数据的同时,必须保证数据访问的正确性和可靠性,在数据库中,将包含有数据库操作的程序的一次执行称作一个数据库事务,简称事务(Tansaction)。数据库正是通过对事务的执行过程进行控制(称为事务管理)来实现共享正确可靠的数据服务。本章主要介绍事务管理的基本技术。,事务的状态,事务开始(BEGIN_TRANSACTION) 事务读写(ReadWrite) 事务结束(ENDTRANSACTION) 事务交付(COMMITTRANSA
2、CTION),事务的特性,原子性(Atomicity) 持久性(Durability) 可串行性(Serializability) 隔离性(Isolation) DBMS在维持事务的这些特性上主要使用了并发控制和恢复机制,并发控制机制用以维持事务的可串行性,恢复机制用以维持事务的原子性、持久性和隔离性。,并发控制,事务的并发执行如果不加以控制,就会产生如下的不一致性:(1)不可重读性Unrepeatable read) (2)污读(Dirty read) (3)丢失修改(Lost updates),并发控制技术,串行化调度 加锁技术基于时标的并发控制技术,串行化调度,所有事务均是通过读写操作来
3、存取数据库中的数据内容,在这些事务的并发执行过程中,可以通过对这些事务的读写活动进行串行化调度,使得这些活动的执行过程不影响数据库的一致性。,串行化调度,调度则是安排事务所执行的操作序列。例如,下面表示一个调度:S1:Ri(x)Rj(x)Wi(y)Rk(y)Wi(x)在调度S中,如果事务Ti的最后一个操作在事务Tj的第一个操作开始执行之前完成,则称Ti和Tj串行执行;否则称它们并发执行。而在一个调度中如果不存在并发执行的事务,则该调度是串行的。例如下面的调度S2就是串行的: S2:Ri(x)Wi(x)Ri(y)Rj(x)Wj(y)Rk(y)Wk(x),串行化调度缺点,在串行化调度中,事务的操作
4、过程必须在调度之前就已经确定,这种方式在实际应用中是不可行的,也是不可能的,因为用户需要以更灵活的方式使用数据库。实际应用中,一个事务的操作过程可能会随着数据内容的变化而发生变化。因此,串行化调度方法仅仅是对事务调度执行方法的一种评价手段,实际系统中必须寻求一种更灵活有效的手段保证调度的串行化。,加锁技术,加锁技术就是一种最常用的并发控制技术。它的基本思想是:在任何时候,事务欲存取某一(些)数据项时,必须获得对这一(些)数据项的加锁权限;而一个事务在处理某一(些)数据项时,需要对它(们)进行加锁;操作完成或事务结束后,释放所有由它所加的锁。,加锁技术,二值锁 共享锁(Shared lock)和
5、互斥锁(Exclusive lock) 两段锁协议 死锁和饿死 加锁粒度 加锁与释放时机,基于时标的并发控制技术,在加锁技术中,是根据操作冲突的对象和结果来解决冲突问题的,这种处理方法实现上简洁可行,但也存在着死锁和饿死等一些较严重的问题。时标技术是用于并发控制的另一种技术。,时标技术的基本思想,每个事务开始执行时原统为这个事务赋予一个时标t(一般为当前时间) 事务所进行的每个读写操作,均具有时标t属性 系统中维持所有数据项x的最近读时标RTM(x)和写时标WTM(x) 某个事务T执行到某一操作时,比较事务T的时标t与操作对象x的最近读写时标,时标技术与加锁,时标技术不同于加锁技术,它是基于时
6、标的大小来解决操作冲突,保证冲突的操作按照时间顺序来执行。按照时标技术的思想,如果一个事务试图对被较早事务修改过的数据进行读操作,或者试图对被较早事务读或修改过的数据进行修改时,这个事务会以一个新的时标重新启动。,恢复,一些并发控制技术,或者系统资源开销很大,或者不能完全保证数据库的完整性和一致性。由于各种原因(如系统故障、用户的不小心,某些用户蓄意破坏等),系统会处于不完整和不一致状态,因此必须适时检测系统状态,一旦发现问题,就必须使用特殊手段恢复系统。,恢复的一般原则,系统失效时损失应最小 撤销或重做的应尽可能是单个事务 恢复速度要快 应尽量减少恢复时的人工记录工作 确保恢复数据的安全可靠
7、,恢复的基本机制,导致事务的流产原因 :(1)系统失效(或系统崩溃) (2)事务或系统错误 (3)事务检测到异常 (4)并发控制机制强迫事务流产 (5)磁盘错误 (6)物理环境问题,恢复的基本机制,解决机制(1)日志(Log)(2)检查点(Check Point)(3)像本(4)回退程序(5)Redo和Undo,基于延迟修改的恢复技术,在事务执行过程中,对数据的修改动作保存在日志和事务空间中(以利于事务本身引用操作结果)。当事务到达终点时成功交付,系统将日志写回磁盘,并将修改数据写到数据库。 如果事务在中途流产,由于事务对数据库的写操作实际上并没有进行,也就不会产生任何影响,因此不需要恢复数据
8、库内容。,基于立即修改的恢复技术,与基于延迟修改的恢复技术不同,在基于立即修改的恢复技术中,事务对数据库的修改不必等到交付就可以进行。但是在将数据回写到数据库之前必须在日志中记录操作内容write_transaction,。这样在系统失效时可以正确地恢复数据库,这种方法称为“先写日志”协议。,SQL Server中的事务管理,SQL Server采用了一套定义事务的SQL语句 (1)BEGIN TRANSACTION:事务的开始标志;(2)COMMIT TRANSACTION:事务的交付;(3)SAVE TRANSACTl0N:事务的保存点;(4)ROLLBACK TRANSACTION:事务
9、的回退,指定一个由ROLLBACK TRANSACTION 定义的保存点。所有在BEGIN TRANSACTION 和END TRANSACTION(或ROLLBACK TRANSACTION)之间的操作组成一个事务。,SQL Server中的日志和检查点,SQL Server中为每个数据库维持一个日志,主要记录用户对数据库的操作过程和影响。以修改记录为例(因为修改记录包含了删除记录和插人记录两个动作),以下信息需要写入日志:,原有记录一行中所有数据 新记录一行中所有数据 所删除的索引数据 新增的索引数据 所需分配的索引页和数据页分配记录 所需释放的索引页和数据页记录 当事务正常交付时,SQL
10、 Server将当前存储在主存的日志页写入到磁盘,但是并没有将数据页(或和索引页)写入到磁盘。SQL Server只有遇到一个检查点时才将数据回写磁盘,SQL Server中的日志和检查点,检查点1.系统检查点2.用户检查点(CHECK POINT),SQL Server的加锁机制,SQL Server的并发控制机制主要采用加锁技术,为用户的数据操作在不同粒度上提供了不同类型的锁。 1.页加锁 2.表加锁 3.集中(Integrated)共享(IS)锁和集中互斥(IX)锁,本章小结,并发控制与恢复机制在数据库的事务管理中作用非常巨大,通过SQL Server的事务管理机制,深入了解数据库事务管理的架构。,