文档详情

数据库系统和应用11.ppt

发布:2017-04-23约8.94千字共98页下载文档
文本预览下载声明
第十一章 并发控制; 并发操作:在多用户共享系统中,如果多个用户同时对同一个数据进行操作,称为并发操作。 DBMS的并发控制:负责协调并发事务的执行,保证数据库的完整性、同时避免用户得到不正确的数据。 DBMS的并发控制常用的方法有封锁法、时间印法和乐观控制法,商用的DBMS一般都采用封锁法。;11.1 并发控制概念;图11.1 三种数据不一致性;1. 丢失更新;2. 不可重复读;3. 读“脏”数据; 三类数据不一致产生的主要原因: 并法操作破坏了事务的隔离性。 为了防止数据库数据的不一致性,必须要用正确的方式调度(控制)并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。 并发控制需要靠数据库的并发控制子系统来解决。 ; 通常,处理并发控制需要用到封锁(Locking)技术。 在事务要对数据库进行操作之前,首先对其操作的数据设置封锁,禁止其他事务再对该数据进行操作,当它对该数据操作完毕并解除对数据的封锁后,才允许其他事务对该数据进行操作。; 封锁:事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。; 基本的封锁类型有两种: 排它锁(Exclusive locks),简称X锁。 共享锁 (Share Locks),简称S锁。; 也称排它锁或写锁。如果事务T对数据对象R实现X封锁,则只允许T读取和修改R,其它任何事务都不能再对R加任何类型的锁,直到T释放R上的锁。 只有获准X封锁的事务,才能对被封锁的数据进行修改。 ; 我们使用 LOCK X(A)表示对所需数据对象A实现X封锁。如果X封锁没有获准,那么事务进入等待状态,等待封锁获准后,事务重新执行LOCK X(A)操作。 用UNLOCK (A)表示解除X封锁的操作。; 一个好的DBMS应该可以在同一时刻允许尽可能多的用户访问某个数据对象,即并发性。 在一些操作中,并不对数据库进行更新操作,只是读数据。这时若对数据加X锁,则降低了数据库的并发操作。因此需要引入新的锁机制。 当仅仅是读数据时,也可以让另外的操作读数据,增加并发度。;2. 共享锁(S封锁); 与X封锁类似,使用 LOCK S(A)表示对所需数据对象A实现S封锁。如果S封锁没有获准,那么事务进入等待状态,等待封锁获准后,事务重新执行LOCK S(A)操作。 用UNLOCK (A)表示解除S封锁的操作。;T1; 在运用X锁和S锁这两种基本封锁,对数据对象加锁时,还需要约定一些规则,例如应何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议(Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同级别的封锁协议。 ; 使用X封锁的规则称为PX协议。 PX协议的主要内容:任何企图更新记录R的事务必须先执行LOCK X(R)操作,以获得对该记录进行寻址的能力,并对它取得X封锁。如果未获得X封锁,那么此事务进入等待状态,一直到获准X封锁,事务才继续下去。 ;例:X封锁解决丢失更新问题。; 对于删除操作,PX协议同样适用。要删除一个记录,首先也要执行LOCK X(R)操作和READ操作后才能删除。 对于插入操作,不需要读记录。因此可以假定INSERT R本身也包含了对新插入记录R的X封锁。; 先看下面的例子。;时间; 图11.4中,事务T1做ROLLBACK操作时把事务T2更新丢失了。 上图11.4的情况是不可原谅的。因为此时数据库中的A值是错误的。为了避免数据库恢复时丢失更新,就不应该允许事务去使用一个未提交的修改。在图11.4中,第6步不允许事务T1执行UNLOCK操作,这样,事务T2就不能封锁和使用数据A了,也就不会更新了。 只有保证更新不再与数据库的恢复有关时(也就是事务结束了),才能解除封锁。因此对PX协议要加以修正,需引入PXC协议。;PXC协议由PX协议和下面一条规则组成: X封锁必须保留到事务终点(COMMIT或ROLLBACK)。 因此,X封锁不是用UNLOCK操作解除的,在COMMIT和ROLLBACK的语义中应包含X封锁的解除。(也就是DML语句不能提供解除X封锁的操作); PXC协议能防止由ROLLBACK引起的更新丢失现象。 在图11.4中,事务T2在第7步将会进入等待状态,直到第14步时才做“LOCK X(A)”,这样就不会由于事务的撤消而丢失其他事务的更新。 PXC协议解决了丢失更新问题,
显示全部
相似文档