资源描述
*,*,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,事务和锁,课程目标,创建事务,提交事务,回滚事务,回滚事务的一部分,用锁解决潜在问题,SQL Server,锁,设置锁选项,事务,例:要进行货物调拨,把指定仓库中的一定数量的商品调拨到另一个仓库中。,问:(如何确保这个操作一定可以一起完成),设置多个操作必须全部执行成功,否则立即恢复到未执行任何操作时的状态,是一个逻辑工作单元,单元中包含一批操作具有,ACID,四个性质,原子性,:不可只完成部分操作,一致性,:在处理成功后,所有数据都保持一致状态,独立性,:禁止其它事务看到本事务的中间状态,持久性,:一个已完成的事务对数据所作的任何变动在,系统中是永久有效的,自定义事务,Begin Transaction ,事务名,执行自定义事务,Commit Transaction,事务名,如果全部成功,提交事务,Save Transaction,保存点名,顾名思义,定义事务的某个执行位置,Rollback Transaction,保存点名,回滚事务到事务的保存点位置,注:,1,、如果回滚到保存点,并不提交事务,2,、,trancount,存储当前的事务数量,自定义事务的实现方式,Rollback,问:如有下列操作系列,结果会如何,begin transaction,update student,set,cphone,=12345678,where,sid,=A00001,update student,set,cname,=,aaa,where,sid,=A00001,rollback transaction,Rollback,例:如果在调拨过程中要求记载下来调拨信息,若发现被调货的仓库的库存不够,则整个操作全部取消,事务类型,显示事务:由用户指定事务的开始和结束,自动事务:每个语句视为一个事务,隐式事务:开始执行语句就视为一个事务的开始,但语句执行完后,事务并不结束(由用户显示提交),set,implicit_transactions,on|off,数据并行问题,所谓数据并行的问题就是指当数据同时进行事务处理时所发生的问题。,数据并行问题,1,、遗失更新:当两个或多个事务试图修改同一行时,事务队列中最后的更新会重写前面事务所作的修改,资源,A=100,事务,A,事务,B,read A read A,update A+50,write A update A+10,write A,数据并行问题,2,、无效读入:一个事务读取了尚未认可的更新数据,资源,A=100,事务,A,事务,B,read A,update A+50,read A,write A update A+10,rollback write A,数据并行问题,3,、不一致分析,:,指事务连续两次读取数据时,所得到的数据不一致,资源,A=100,事务,A,事务,B,read A,update A+50 read A,update A+10 read A,write A,数据并行问题,4,、幻象读取:读取到了并不存在的数据,资源,A=100,事务,A,事务,B,read A,update A+50,create B read A,read B,del B,update B+80,write B,锁,并行问题的解决方法:锁,在功能上避免用户访问正在被其它用户改变的信息,在多用户环境中,避免一些用户同时改变同样的数据,SQL Server,使用锁来维护多用户环境下的数据的一致性,,SQL Server,自动处理锁的行为,锁,Server,实现了多粒度上锁,允许事务以不同级别对不同类型的资源上锁,行级,页级,范围,表级,共享锁定(,S,):常用于读事务,允许一个资源上有多个共享锁定,防止其它事务修改资源,排它锁定(,X,):用于写事务,一个资源上只能有一个排它锁定,防止并发事务对资源进行访问,更新锁定(,U,):用于防止死锁,一个资源上只能有一个更新锁定,且只有获得更新锁定的事务才能获得排它锁定,意向锁定(,I,):让事务声明它将在资源上使用共享、独占、更新锁定,模式锁定(,S,):,1,、结构模式修改锁定,2,、结构描述固定锁定,锁定模式,例:,用户,A,用户,B,Begin transaction begin transaction,update student update class,set,cclassid,=,c0002,set,iperson,=iperson+1,select*from class,where,cclassid,=,c0001,Commit transaction select*from student,commit transaction,若这两个事务共时提交会产生什么情况,分析,死锁,Student,Class,TRANSACTION,A,TRANSACTION,B,死锁:是两个用户分别锁定了不同的对象,且又试图访问另一个用户锁定对象时产生的,理解锁,当产生死锁时,,SQL-Server,会终止占用最少,CPU,时间的进程,终止的事务会自动回滚,并给出一个,1205,的错误,SQL Server,提供,SET DEADLOCK_PRIORITY,命令来定制死锁,语法,SET DEADLOCK_PRIORITY LOW|NORMAL|,deadlock_var,定制,L,OCK,_T,IMEOUT,SET LOCK_TIMEOUT,命令可被用来设置等待被阻塞资源语句的最长时间,事务日志是一个数据库的数据修改历史,在创建一个数据库时,,SQL server,会自动创建一个事务日志文件,采用提前写的方式,即对数据库的修改,首先会写入到日志中,然后才写入数据库,每一个数据修改都会标出一个开始点和结束点,如果由于各种原因未达到结束点,则会恢复前面所做的所有操作,SQL Server,通过维护日志来管理所有的事务,可用于恢复如电源故障等原因不能完成的所有活动。,事务日志,
展开阅读全文