《九)事务处理.ppt》由会员分享,可在线阅读,更多相关《九)事务处理.ppt(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、NanjingUniversityofFinance&EconomicsNanjingUniversityofFinance&EconomicsCollegeofInformationEngineeringCollegeofInformationEngineeringDepartmentofInformationManagementDepartmentofInformationManagement南京财经大学信息工程学院信息管理南京财经大学信息工程学院信息管理系系第九部分第九部分 事务处理事务处理数据库系统原理数据库系统原理Principles of Database System1 概念概念
2、n隶属于数据恢复的范畴,实现数据完整隶属于数据恢复的范畴,实现数据完整性目标,主要技术是利用日志来实现的性目标,主要技术是利用日志来实现的n处理的问题主要是不严重但易产生数据处理的问题主要是不严重但易产生数据不一致和数据丢失的故障不一致和数据丢失的故障四个特性四个特性n原子性(原子性(Atomicity)n事务是原子工作单元,对于数据修改,要么事务是原子工作单元,对于数据修改,要么全执行,要么全不执行全执行,要么全不执行n一致性(一致性(Consistency)n事务在完成时,必须使所有的数据都保持一事务在完成时,必须使所有的数据都保持一致状态。所有规则都必须应用于事务的修改,致状态。所有规则
3、都必须应用于事务的修改,以保持所有数据的完整性以保持所有数据的完整性n维护数据库规则的一致,由其他三项涵盖维护数据库规则的一致,由其他三项涵盖四个特性四个特性n隔离性(隔离性(Isolation)n处理并发事务时能将不同事务区分开来,依处理并发事务时能将不同事务区分开来,依赖于锁定功能赖于锁定功能n在在“并发性并发性”和和“串行化串行化”之间权衡之间权衡n持久性(持久性(Durability)n提交事务一定全部完成,回滚事务一定全部提交事务一定全部完成,回滚事务一定全部取消取消n事务完成之后,它对于系统的影响是永久性事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持的
4、。该修改即使出现系统故障也将一直保持SQL Server对事务特性的支持对事务特性的支持nSQL Server提供一种机制,保证每个事提供一种机制,保证每个事务物理的完整性务物理的完整性n锁定设备,使事务相互隔离锁定设备,使事务相互隔离n记录设备,保证事务的持久性。即使服务器记录设备,保证事务的持久性。即使服务器硬件、操作系统或硬件、操作系统或 SQL Server 自身出现故自身出现故障,障,SQL Server 也可以在重新启动时使用也可以在重新启动时使用事务日志,将所有未完成的事务自动地回滚事务日志,将所有未完成的事务自动地回滚到系统出现故障的位置到系统出现故障的位置n事务管理特性事务管
5、理特性2 事务处理的实现事务处理的实现3 事务的分类事务的分类n自动提交事务自动提交事务n显式事务显式事务n隐性事务隐性事务3.1 自动提交事务自动提交事务n所有所有SQL语句在完成时,都会提交或回语句在完成时,都会提交或回滚滚n如果一条语句成功完成,则将其提交,如果一条语句成功完成,则将其提交,如果遇到任何错误,则将其回滚如果遇到任何错误,则将其回滚n只要没有用显式或隐性事务模式替代自只要没有用显式或隐性事务模式替代自动提交模式,动提交模式,SQL Server连接就以自动连接就以自动提交模式为默认模式进行操作提交模式为默认模式进行操作3.2 显式事务显式事务n显式地定义其开始和结束的事务显
6、式地定义其开始和结束的事务n当明确键入当明确键入 BEGIN TRANS 和和 COMMIT 语句时,就会发生显式事务语句时,就会发生显式事务n显式事务模式持续时间仅是该事务的持显式事务模式持续时间仅是该事务的持续期续期显式事务显式事务n显式事务所涵盖的语句具有全部执行的特点,显式事务所涵盖的语句具有全部执行的特点,即使是系统崩溃也会在重启后由系统自动恢复即使是系统崩溃也会在重启后由系统自动恢复n显示事务所涵盖的语句在发生程序执行错误时显示事务所涵盖的语句在发生程序执行错误时并不会自动恢复,因为这不是语句没有执行并不会自动恢复,因为这不是语句没有执行n用户可以在自己认为条件满足的时候(如出错用
7、户可以在自己认为条件满足的时候(如出错或者指定时长),显式的调用或者指定时长),显式的调用Commit或者或者Rollback来主动提交或者撤销操作来主动提交或者撤销操作3.3 隐性事务隐性事务n通过通过Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句,语句,将隐性事务模式设置为打开将隐性事务模式设置为打开n当连接以隐性事务模式进行操作时,当连接以隐性事务模式进行操作时,Microsoft SQL Server 将在提交或回滚将在提交或回滚当前事务后自动启动新事务当前事务后自动启动新事务n无须描述事务的开始,只需提交或回滚无须描述事务的开始,只需提交或回
8、滚每个事务每个事务4 事务编程事务编程nBEGIN TRANSACTIONn开始事务开始事务nCOMMIT TRANSACTIONn提交事务提交事务nROLLBACK TRANSACTIONn回滚事务回滚事务nSAVE TRANSACTIONn在事务内设置保存点在事务内设置保存点5 事务的隔离事务的隔离n如没有锁定且多个用户同时访问一个数据库,如没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会则当他们的事务同时使用相同的数据时可能会发生问题,问题包括:发生问题,问题包括:n本事务读到其他事务未提交的数据,读到脏数据本事务读到其他事务未提交的数据,读到脏数据n本事务
9、所处理的现有数据被其他事务更新,产生不本事务所处理的现有数据被其他事务更新,产生不可重复读可重复读n本事务访问到其他事务插入的新数据,或者本事务本事务访问到其他事务插入的新数据,或者本事务所处理的现有数据被其他事务删除,即为存在幻像所处理的现有数据被其他事务删除,即为存在幻像记录记录事务的隔离事务的隔离有票有票1)有票否)有票否3)卖票)卖票2)有票否)有票否4)卖票)卖票事务的隔离事务的隔离n丢失或覆盖更新丢失或覆盖更新n当两个或多个事务选择同一行,然后基于最初选定当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新的值更新该行时,会发生丢失更新n每个事务都不知道其它事
10、务的存在每个事务都不知道其它事务的存在n最后的更新将重写由其它事务所做的更新,这将导最后的更新将重写由其它事务所做的更新,这将导致数据丢失致数据丢失n例如两个编辑人员制作了同一文档的电子复本。每例如两个编辑人员制作了同一文档的电子复本。每个编辑人员独立地更改其复本,然后保存更改后的个编辑人员独立地更改其复本,然后保存更改后的复本,这样就覆盖了原始文档。最后保存其更改复复本,这样就覆盖了原始文档。最后保存其更改复本的编辑人员覆盖了第一个编辑人员所做的更改。本的编辑人员覆盖了第一个编辑人员所做的更改。如果在第一个编辑人员完成之后第二个编辑人员才如果在第一个编辑人员完成之后第二个编辑人员才能进行更改
11、,则可以避免该问题能进行更改,则可以避免该问题事务的隔离事务的隔离n未确认的相关性未确认的相关性n第二个事务正在读取的数据还没有确认并且可能由第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改更新此行的事务所更改n例如一个编辑人员正在更改电子文档。在更改过程例如一个编辑人员正在更改电子文档。在更改过程中,另一个编辑人员复制了该文档(该复本包含到中,另一个编辑人员复制了该文档(该复本包含到目前为止所做的全部更改)并将其分发给预期的用目前为止所做的全部更改)并将其分发给预期的用户。此后,第一个编辑人员认为目前所做的更改是户。此后,第一个编辑人员认为目前所做的更改是错误的,于是删除了所
12、做的编辑并保存了文档。分错误的,于是删除了所做的编辑并保存了文档。分发给用户的文档包含不再存在的编辑内容,并且这发给用户的文档包含不再存在的编辑内容,并且这些编辑内容应认为从未存在过。如果在第一个编辑些编辑内容应认为从未存在过。如果在第一个编辑人员确定最终更改前任何人都不能读取更改的文档,人员确定最终更改前任何人都不能读取更改的文档,则可以避免该问题则可以避免该问题事务的隔离事务的隔离n不一致的分析(非重复读)不一致的分析(非重复读)n在不一致的分析中,第二个事务读取的数据是由已在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的进行了更改的事务提交的n不一致的分析涉及多次(两次
13、或更多)读取同一行,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重而且每次信息都由其它事务更改;因而该行被非重复读取复读取n例如一个编辑人员两次读取同一文档,但在两次读例如一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题档,则可以避免该问题事务的隔离事务的隔离n幻像读幻像读n事务
14、第一次读的行范围显示出其中一行不存在于第事务第一次读的行范围显示出其中一行不存在于第二次读或后续读中,因为该行已被其它事务删除二次读或后续读中,因为该行已被其它事务删除n同样,由于其它事务的插入操作,事务的第二次或同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中后续读显示有一行已不存在于原始读中n例如一个编辑人员更改作者提交的文档,但当生产例如一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。如果在作者已将未编辑的新材料添加到该文档中。如果在编辑人员
15、和生产部门完成对原始文档的处理之前,编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免任何人都不能将新材料添加到文档中,则可以避免该问题该问题事务的隔离事务的隔离n事务的隔离级别事务的隔离级别n未提交读(隔离性最差,灵活性最强)未提交读(隔离性最差,灵活性最强)n本事务中可以读取其他事务的提交前数据本事务中可以读取其他事务的提交前数据n提交读提交读n本事务不可以读取其他事务中的提交前数据本事务不可以读取其他事务中的提交前数据n本事务处理的数据可以被其他事务通过更新操作改变本事务处理的数据可以被其他事务通过更新操作改变n可重复读可重复读n本事务处理的数据不可
16、以被其他事务通过更新操作改变本事务处理的数据不可以被其他事务通过更新操作改变n本事务处理的数据可以被其他事务通过插入操作和删除操本事务处理的数据可以被其他事务通过插入操作和删除操作改变作改变n可串行读(隔离性最强,灵活性最差)可串行读(隔离性最强,灵活性最差)n本事务处理的数据不可以被其他事务通过插入操作和删除本事务处理的数据不可以被其他事务通过插入操作和删除操作改变操作改变事务的隔离事务的隔离隔离级别隔离级别脏读脏读不可重复不可重复读取读取幻像幻像未提交读未提交读是是是是是是提交读提交读否否 是是是是可重复读可重复读否否 否否 是是可串行读可串行读否否 否否 否否 事务的隔离事务的隔离n在在
17、SQL Server中隔离级中隔离级Isolation Level是指一个事务和其它事务的隔离程是指一个事务和其它事务的隔离程度,即指定了数据库如何保护、锁定那度,即指定了数据库如何保护、锁定那些当前正在被其它用户或服务器请求使些当前正在被其它用户或服务器请求使用的数据用的数据事务的隔离事务的隔离n在在SQL Server中有以下四种隔离级中有以下四种隔离级nREAD UNCOMMITTED:它允许读取已经被其它它允许读取已经被其它用户修改但尚未提交确定的数据用户修改但尚未提交确定的数据nREAD COMMITTED:在此隔离级下在此隔离级下SELECT命令命令不会返回尚未提交不会返回尚未提交
18、Committed的数据也不能返回的数据也不能返回脏数据,它是脏数据,它是SQL Server默认的隔离级默认的隔离级nREPEATABLE READ:在此隔离级下用在此隔离级下用SELECT命命令读取的数据在整个命令执行过程中不会被更改,令读取的数据在整个命令执行过程中不会被更改,此选项会影响系统的效能,非必要情况最好不用此此选项会影响系统的效能,非必要情况最好不用此隔离级隔离级nSERIALIZABLE:最严格的级别,不会发生幻象读最严格的级别,不会发生幻象读6 锁锁n锁是在多用户环境中对数据访问的限制锁是在多用户环境中对数据访问的限制nSQL Server 2000使用锁定来确保事务使用
19、锁定来确保事务的完整性和数据库的一致性的完整性和数据库的一致性n锁定蕴含的基本概念是用户需要对表的锁定蕴含的基本概念是用户需要对表的排它访问排它访问锁锁n锁分为以下三种类型锁分为以下三种类型n独占锁:独占锁:Exclusive Lockn共享锁:共享锁:Shared Lockn更新锁:更新锁:Update Lock锁锁n独占锁独占锁n独占锁锁定的资源只允许进行锁定操作的程独占锁锁定的资源只允许进行锁定操作的程序使用,其它任何对它的操作均不会被接受序使用,其它任何对它的操作均不会被接受n执行数据更新命令,即执行数据更新命令,即INSERT、UPDATE或或DELETE命令时,命令时,SQL Se
20、rver 会自动使会自动使用独占锁。但当对象上有其它锁存在时无法用独占锁。但当对象上有其它锁存在时无法对其加独占锁,独占锁一直到事务结束才能对其加独占锁,独占锁一直到事务结束才能被释放被释放锁锁n共享锁共享锁n共享锁锁定的资源可以被其它用户读取,但共享锁锁定的资源可以被其它用户读取,但其它用户不能修改它。在其它用户不能修改它。在SELECT命令执行命令执行时,时,SQL Server通常会对对象进行共享锁通常会对对象进行共享锁锁定。通常加共享锁的数据页被读取完毕后,锁定。通常加共享锁的数据页被读取完毕后,共享锁就会立即被释放共享锁就会立即被释放锁锁n更新锁更新锁n更新锁是为了防止死锁而设立的,
21、当更新锁是为了防止死锁而设立的,当SQL Server准备更新数据时,它首先对数据对准备更新数据时,它首先对数据对象作更新锁锁定。这样数据将不能被修改但象作更新锁锁定。这样数据将不能被修改但可以读取,等到可以读取,等到SQL Server确定要进行更确定要进行更新数据操作时,它会自动将更新锁换为独占新数据操作时,它会自动将更新锁换为独占锁,但当对象上有其它锁存在时无法对其作锁,但当对象上有其它锁存在时无法对其作更新锁锁定更新锁锁定锁锁n死锁死锁n事务事务1请求了事务请求了事务2加锁的资源,事务加锁的资源,事务2又请又请求了事务求了事务1加锁的资源加锁的资源锁锁n避免死锁的原则避免死锁的原则n尽量避免并发地执行涉及到修改数据的语句尽量避免并发地执行涉及到修改数据的语句n要求每个事务一次就将所有要使用的数据全部加锁要求每个事务一次就将所有要使用的数据全部加锁否则就不予执行否则就不予执行n预先规定一个封锁顺序,所有的事务都必须按这个预先规定一个封锁顺序,所有的事务都必须按这个顺序对数据执行封锁,例如不同的过程在事务内部顺序对数据执行封锁,例如不同的过程在事务内部对对象的更新执行顺序应尽量保持一致对对象的更新执行顺序应尽量保持一致n每个事务的执行时间不可太长,对程序段长的事务每个事务的执行时间不可太长,对程序段长的事务可考虑将其分割为几个事务可考虑将其分割为几个事务
限制150内