数据库课件第9章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据库原理与设计兰州大学IDM实验室制作第9章事务数据库原理与设计兰州大学IDM实验室引言我们知道,有些操作(银行系统)通常是一个完整的逻辑操作序列,应该全部正确地执行,否则由于出错全部不能执行。数据库中同样会有这种情况,称之为事务,本章,将重点学习事务的有关知识!数据库原理与设计兰州大学IDM实验室9.1.1事务的概念1.事务的定义事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的整体。事务是数据库应用程序的基本逻辑单位。9.1事务的ACID属性数据库原理与设计兰州大学IDM实验室2.事务中的读写操作在数据项和磁盘块的级别上来考虑事务中的数据库操作。包括以下两个读写操作:(1)READ(X,Y),读取数据库中数据项X,存入程序变量Y。(2)WRITE(Y,X),程序变量Y的值写放数据库中数据项X。9.1事务的ACID属性数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性READ(X,Y)的实现算法如下:(1)确定包含数据项X的磁盘块的地址A;(2)如果地址为A的数据不在主存缓冲区中,则把A所在磁盘块诗篇到主存缓冲区中;(3)从主存缓冲区中找到数据项X,存入程序变量Y。数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性WRITE(Y,X)的实现算法如下:(1)确定包含数据项X的磁盘块的地址A;(2)如果地址为A的磁盘块不在主存缓冲区中,则把A磁盘块读入主存缓冲区;(3)把程序变量Y的值存入A磁盘块的缓冲区写到磁盘存储器。数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性3.事务的状态一个事务必处于以下状态之一,在一定的条件下它们之间是可以转换的:①活动状态(ActiveState)②部分提交状态(PartiallyCommittedState)③失败状态(FailedState)④终止状态(AbortedState)⑤提交状态(CommittedState)数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性事务状态转移图如下:数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性4.系统日志系统日志(Log)是为了从影响事务的故障状态中恢复信息。日志保存在磁盘上。日志会被定期归档到存储设备中以预防磁盘损坏和实验性故障。除非磁盘损坏和灾难性故障外它不会受到任何影响的。数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性日志的条目类型(日志记录)和每个类型涉及的相关动作如下:[start_transaction,T]:表示事务T开始执行。[write_item,T,X,旧值,新值]:表示事务T已将数据项X的值从旧值改为新值。[read_item,T,X]:表示事务T已读取数据项X的值。[commit,T]:表示事务T已成功完成,其结果已被提交(永久记录)给数据库。[abort,T]:表示事务T已被撤销。数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性9.1.2事务的ACIC属性1.ACID特征(1)原子性(Atomicity)(2)一致性(Consistency)(3)隔离性(Isolation)(4)持续性(Durability)数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性2.SQLServer2000中的事务管理(1)指定和强制事务处理SQL程序员要负责启动和结束事务,同时强制保持数据的逻辑一致性。SQLServer提供以下功能:a.锁定设备,使事务相互隔离。b.记录设备,保证事务的持久性。c.事务管理特征,强制保持事务的原子性和一致性。数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性(2)控制事务应用程序主要通过指定事务启动和结束的时间来控制事务。可以利用事务Transact-SQL语句或数据库API函数来实现。控制事务的操作有:启动事务:在MicrosoftSQLServer2000中,可以按显式、自动提交或隐性模式启动事务。因此,事务的模式分为显式事务、自动提交事务或隐性事务。以下做简单介绍:数据库原理与设计兰州大学IDM实验室①显式事务:通过发出BeginTransaction语句显式启动事务。②自动提交事务:这是SQLServer的默认模式。每个单独的Transact-SQL语句都在其完成后提交。不必指定任何语句事务。③隐性事务:通过API函数或Transact-SQLSetImplicit_Transactionon语句,将隐性事务模式设置为开。数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性结束事务:可以使用Commit或Rollback语句结束事务。①Commit如果事务成功,则提交。②Rollback如果事务中出现错误,或者当用户决定取消事务,就做此操作。指定事务边界:可以用Transact-SQL语句或API函数和方法确定SQLServer事务启动和结束的时间。数据库原理与设计兰州大学IDM实验室9.1事务的ACID属性事务处理过程中的错误:如果服务器错误使事务无法成功完成,SQLServer将自动回滚该事务,并释放该事务占用的所有资源;如果客户端与SQLServer的网络连接中断了,将回滚该连接的所有未完成事务;如果客户端应用程序失败或客户计算机崩溃或重启,也会中断该连接,而且当网络告知SQLServer该中断时,也会回滚所有未完成的连接;如果客户从该应用程序注销,所有未完成的事务也会被撤销。如果批处理中出现运行时语句错误(如违反约束),那么SQLServer中默认的行为是只回滚产生该错误的语句。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行9.2.1并发执行的原因在学习并发执行之前,先弄清串行执行与并行执行这两个概念。串行执行:事务可以一个接一个执行,即每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行。在串行执行时,许多系统资源将处于空闲状态,造成资源的浪费。并行执行:分为两种类型(1)单处理机系统并发执行(交叉并发执行);(2)多处理机系统的并发执行(同时并发执行)数据库原理与设计兰州大学IDM实验室9.2事务的并发执行并发执行的好处:①提高系统吞吐量和资源利用率;②减少等待时间。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行9.2.2并发执行带来的异常并发执行可能导致存取不正确的数据。当多个事务并发执行时,即使每个事务都正确执行,数据库的一致性也可能被破坏。所以数据库管理中必须避免异常,否则会破坏数据库的一致性。并发操作有以下几类问题:①更新丢失问题;②临时更新(或脏读)问题;③错误求和问题;④不可重复读问题。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行9.2.3可串行化调度定义多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化(Serializable)的调度。数据库系统必须控制事务的并发执行,保证数据库处于一致的状态。以下对串行化的理解只考虑read(Q)和write(Q)这两个指令。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行本节主要讨论冲突可串行化与视图可串行化以及可串行化调度的判别。1.冲突可串行化(Ti与Tj表示指令,以下只处理read与write指令),考虑以下四种情形:(1)Ii=read(Q),Ij=read(Q)。Ii与Ij的次序无关紧要,因为不论次序如何,Ti与Tj读取的Q值总是相同的。(2)Ii=read(Q),Ij=write(Q)。若Ii先于Ij,则Ti不会读取由Tj的指令Ij写入的Q值;若Ij先于Ii,则Ti读取由Tj的指令Ij写入的Q值。因此Ii与Ij的次序是重要的。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行(3)Ii=write(Q),Ij=read(Q)。Ii与Ij的次序是重要的,类似于(2)。(4)Ii=write(Q),Ij=write(Q)。由于两条指令均为write指令。注:指令的顺序对Ti与Tj没有什么影响。这里要很好的理解“冲突”这个概念。书本上的例子要好好理解。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行2.视图的可串行化下面描述的是比冲突等价的限制要宽松的一种等价形式,这种等价形式与冲突等价一样基于事务的read与write操作。考虑两个调度S与S’,参与两个调度的事务集是相同的。若满足下面三个条件,调度S与S’称为视图等价的(viewequivalent):数据库原理与设计兰州大学IDM实验室9.2事务的并发执行(1)对于每个数据项Q,若事务Ti在调度S中读取了Q的初始值,那么在调度S’中Ti也必须读取Q的初始值。(2)对于每个数据项Q,若事务Ti在调度S中执行了read(Q)并且读取的值是由事务Tj执行write(Q)产生的;则在调度S’中,Ti的read(Q)操作读取的值Q也必须是由Tj的同一个write(Q)产生的。(3)对于每个数据项Q,若在调度S中有事务执行了最后的write(Q)操作,则在调度S’中该事务也必须执行最后的write(Q)操作。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行条件(1)和(2)保证了两个调度中的每个事务都读取相同的值、从而进行相同的计算。条件(3)与条件(1)(2)一起保证两个调度得到相同的最终系统状态。注:每个冲突可串行化调度都是视图可串行化的,但也存在不是冲突可串行化的视图可串行化调度。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行3.可串行化判定由调度构造一个有向图(优先图PrecedenceGraph)。该图由G=(V,E)对组成,其中V是顶点集,E是边集,顶点集由所有参与调度的事务组成,边集由满足下列三个条件之一的边Ti→Tj组成:(1)在Tj执行read(Q)之前,Ti执行write(Q)。(2)在Tj执行write(Q)之前,Ti执行read(Q)。(3)在Tj执行write(Q)之前,Ti执行write(Q)。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行如果调度S的优先图中有环,则调度S不是冲突可串行化的;如果图中无环,则调度S是冲突可串行化的。判定调度是否视图可串行化的问题是属于NP完全问题(已证明)。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行9.2.4基于锁的并发控制并发控制技术是用来保证多个事务并发执行时的互不干涉性或隔离性。这些技术中的大部分是通过实施可串行化的协议来保证调度的可串行性。其中一系列重要的协议都采用了封锁技术,该技术通过对数据项加锁来阻止多个事务同时访问这些数据。大多数商业的数据库管理系统中都使用封锁协议。另一套并发控制协议是使用时间戳。通过时间戳排序来保证可串行的并发控制。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行1.封锁和封锁协议封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。确切的控制由封锁的类型决定。针对事务的基本读写操作,基本的封锁类型有两种:排它锁(exclusivelocks,简称X锁)和共享锁(sharelocks,简称S锁)。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这样就保证了其他事务在T释放A之前不能再读取和修改A。共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读取A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。X锁和S锁相容性矩阵如图9-14。数据库原理与设计兰州大学IDM实验室9.2事务的并发执行SSXSTFXFF数据库原理与设计兰州大学I

1 / 65
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功