欢迎来到天天文库
浏览记录
ID:45135891
大小:144.50 KB
页数:30页
时间:2019-11-10
《第12章 事务管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、大型数据库事务和事务管理事务举例比如缴纳了罚款以后才能删除记录UPDATE….SETDELETE…..例2:比如银行转账A户减少xB户增加x事务特性事务:事务是作为单个逻辑工作单元执行的一系列操作事务的最大特性-ACID原子性Atom:一致性Consistency:数据库一致状态,如例2隔离性Isolation正在进行的事务不能被其它事务干扰持久性Durability一旦提交,改变永久有效事务执行时可以遇到的问题遇到的问题多个事务并发执行强制停止事务的可串行化调度对于并发的事务,正确的执行结果是指,该结果与这些事务按照某种串行执行
2、顺序的结果相一致但是有时为了提高系统的吞吐率,在一些特定的情况下,允许事务不严格按照可串行化调度方式执行。此时系统不保证结果正确,需要程序员自己掌握时间事务A事务BT1beginworkT2beginworkT3x=20T4x=100T5x=x*2T6CommitT7Abort/commitWrite-Write冲突如果A提交,将违反持续性原则Read-Write冲突时间事务A事务BT1beginworkT2……..beginworkT3ReadxT4…….setx=120T5ReadxT6…….Abort违反了读未提交的数据的原
3、则时间事务A事务BT1beginworkT2……..BeginworkT3x=x+20T4…….S=xT5AbortT6Commit读脏数据读未提交数据事务A撤销,B读入中间状态数据幻像phantom时间事务A事务BT1beginworkT2……..beginworkT3Select*fromtable_awherex>100T4…….Insertx=105T5Select*fromtable_awherex>100……..T6…….T7abortSQL92四种隔离等级表示一个事务是否可以访问其它事务没有提交的数据,每个事务都可以
4、拥有自己的隔离等级。READUNCOMMITTED:可以读没提交的数据,这种事务甚至不请求读锁,并发度很高,但是会读到脏数据;READCOMMITTED:只能读提交的数据,这种事务的锁不遵循两阶段锁协议,锁在使用完后不保持到事务结束,而是被立即被释放;REPEATABLEREAD,可重复读,这种事务只对已经存在的对象上锁,因此不能避免幻像问题;SERIALIZABLE,串行化方式,后面只讨论这种类型的事务。所有DMBS默认的级别都是SERIALIZABLE隔离级需要使用SET命令来设定其语法如下SETTRANSACTIONISOL
5、ATIONLEVEL{READCOMMITTED
6、READUNCOMMITTED
7、REPEATABLEREAD
8、SERIALIZABLE}四种隔离级别的问题隔离级别读脏数据不可重复读幻像并安发全度性降升低高READUNCOMMITTED可能可能可能READCOMMITTEDNo可能可能REPEATABLEREADNoNo可能SERIALIZABLENoNono日志技术由于虚拟内存和交换技术,没有提交的事务修改的页面可能被回写到磁盘;另一方面,由于页面缓冲,提交的数据并不会马上被写入磁盘。如果在其间发生了系统故障,事务的持久性和正确
9、性就不能保证了。需要引入合理的恢复机制,日志恢复是一种被广泛使用的方法。死锁处理死锁处理事务A等待B持有的锁的时候Wait-dieA>B:AwaitAB:Bwound//B被撤销A10、LSERVER的隐式事务隐式事务:不需要使用begin进行标示,但需要提交/回滚前一个事务提交或者回滚以后自动开始的事务通过SETIMPLICIT_TRANSACTIONON/OFF控制一些语句会自动启动隐式事务CREATE、ALTERTABLE更新操作、删除、插入等授权和取消授权等自动事务SETIMPLICIT_TRANSACTIONON/OFF控制将每个SQL语句都当成一个事务进行执行是系统默认方式事务的嵌套嵌套事务只有在提交了最外层的事务后,数据才执行永久修改嵌套事务时,ROLLBACK(不带参数)语句将所有内层事务回滚到最11、外层的BEGINTRANSACTION语句事务保存SAVETRANSACTIONsname设置一个内部存储点事务所有被修改的数据都写入磁盘用于日志恢复事务命名可以对事务取名直接命名通过变量命名DECLARE@vTran1char(32)SETvTr
10、LSERVER的隐式事务隐式事务:不需要使用begin进行标示,但需要提交/回滚前一个事务提交或者回滚以后自动开始的事务通过SETIMPLICIT_TRANSACTIONON/OFF控制一些语句会自动启动隐式事务CREATE、ALTERTABLE更新操作、删除、插入等授权和取消授权等自动事务SETIMPLICIT_TRANSACTIONON/OFF控制将每个SQL语句都当成一个事务进行执行是系统默认方式事务的嵌套嵌套事务只有在提交了最外层的事务后,数据才执行永久修改嵌套事务时,ROLLBACK(不带参数)语句将所有内层事务回滚到最
11、外层的BEGINTRANSACTION语句事务保存SAVETRANSACTIONsname设置一个内部存储点事务所有被修改的数据都写入磁盘用于日志恢复事务命名可以对事务取名直接命名通过变量命名DECLARE@vTran1char(32)SETvTr
此文档下载收益归作者所有