版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数据库的事务处理与数据恢复6.1事务管理的基本概念6.2并发控制6.3数据库恢复6.1事务管理的基本概念6.1.1事务(Transaction)的概念6.1.2事务的状态6.1.3事务的特性6.1.4SQLServer中的事务返回首页6.1.1事务(Transaction)的概念事务是用户定义的数据库操作序列,这些操作可作为一个完整的工作单元。一个事务内的所有语句是一个整体,要么全部执行,要么全部不执行。即事务是不可再分的原子性工作。如在银行业务中,“从帐户A转移资金X到帐户B”就是一个典型的事务。这个事务可以分解为两个动作:(1)从账户A减去金额X。(2)在账户B中加上金额X。返回本节6.1.2事务的状态事务的基本操作包括:(1)事务开始(BEGIN_TRANSACTION)。事务开始执行。(2)事务读写(Read/Write)。事务进行数据操作。(3)事务结束(END_TRANSACTION)。事务完成所有的读/写操作。(4)事务交付(COMMIT_TRANSACTION)。事务完成所有的读/写操作,并保存操作结果。返回本节6.1.3事务的特性事务所必须具有的重要特性包括:(1)原子性(Atomicity)。(2)一致性(Consistency)。(3)隔离性(Isolation)。(4)持久性(Durability)。上述的四个特性也简称为ACID特性,保证ACID特性是事务处理的重要任务。事务的ACID特性可能遭到破坏的原因有:1)多个事务并行运行时,不同事务的操作交叉执行。2)事务在运行过程中被强迫停止。返回本节6.1.4ORACLE中的事务.在Oracle中没有“开始事务处理”的语句。用户不能显式地开始一个事务处理。事务处理会隐式地开始于第一条修改数据的语句,或者在一些要求事务处理的场合。数据库事务主要由INSERT、UPDATE、DELETE操作组成。当在应用程序中执行第一条SQL时,事务便开始了,当执行COMMIT或ROLLBACK语句时事务就结束了。Oracle中对事务处理的控制语句主要包括COMMIT、ROLLBACK、SAVEPOINT、ROLLBACKTOSAVEPOINT、SETTRANSACTION。(1)提交事务(COMMIT)。在事务处理中,用户只需要使用COMMIT语句就可以结束事务。当执行COMMIT语句之后,系统确认事务变化、结束事务、删除保存点、释放锁,其他会话就可以查看到事务变化后的新数据了.返回本节(2)回退事务(ROLLBACK)回退可以撤消已进行的操作。当应用中出现错误,或是运行程序的终端用户决定不保存对数据库数据进行的修改时,就需要进行回滚。回滚事务使用ROLLBACK命令。回退终止用户的事务处理,撤消用户已经进行的对数据的所有改变,读取用户存储在回滚段或UNDO表空间中的信息,将数据库块恢复到用户处理之前的状态,且释放会话所占用的所有锁定(3)设置保存点(SAVEPOINT)用户在处理较大事物时中可以建立保存点(SAVEPOINT),用于在必要时取消部分事务。用户可以在单个事物中拥有多个保存点,当使用ROLLBACKTOSAVEPOINT时,可以让用户有选择地回滚到事物处理中的某特定位置.(4)取消部分事务(ROLLBACKTOSAVEPOINT)为了取消部分事务,可以使用ROLLBACKTOSAVEPOINT命令,也可以调用包dbms_transaction中过程rollback(5)设置事务只读属性设置事务属性的命令为:SETTRANSACTIONREADONLY只读事务是指只允许执行查询操作,而不允许执行任何数据更新操作的事务。使用SETTRANSACTIONREADONLY命令可以确保用户无法执行修改数据的操作,通过设置只读事务,可以有效地将数据库视图冻结到某个时间点。也就是说,无论数据库其他会话如何工作,都不会改变只读事务读到的数据。假定企业需要在每天16点统计最近24小时的销售信息,而不统计当天16点之后的销售信息,那么就可以使用只读事务,在设置了只读事务之后,尽管其他会话可能会提交事务,但只读事务将不会取得新的数据变化,从而确保取得特定时间点的数据信息6.2并发控制6.2.1并发操作引起的问题6.2.2封锁6.2.3封锁出现的问题及解决方法6.2.4可串行化调度6.2.5ORACLE的并发控制机制返回首页6.2.1并发操作引起的问题对事务的并发执行如果不加以控制,可能会导致数据库中数据的不一致性。一个最常见的并发操作的例子是飞机订票系统中的订票操作。例如,在该系统中的一个活动的序列:(1)事务T1(动作1):甲售票员读出某航班的机票余额A,设A=16。(2)事务T2(动作1):乙售票员读出同一航班的机票余额,A也为16。(3)事务T1(动作2):甲售票员卖出一张机票,修改机票余额A←A-1,所以A=15,把A写入数据库。(4)事务T2(动作2):乙售票员卖出两张机票,修改机票余额A←A-2,所以A=14,把A写入数据库。并发操作如果不加以控制,就可能引发下列数据的不一致性:1.丢失修改(LostUpdate)2.不可重复读(UnrepeatableRead)3.读“脏”数据(DirtyRead)1.丢失修改(LostUpdate)丢失修改是指事务T1与事务T2从数据库中读入同一数据并修改,事务T2提交的修改结果破坏了事务T1提交的修改结果,导致事务T1的修改被丢失。丢失修改的情况如图6-2所示。调度时刻事务T1事务T2t1读A=16
t2
读A=16t3A=A-1写回A=15
t4
A=A-2写回A=14(覆盖了T1对A的修改)图6-2丢失修改2.不可重复读(UnrepeatableRead)即事务T1两次读取同一数据项A的内容不一致。究其原因,是在两次读操作之间,事务T2也修改了数据项A。不可重复读的情况如图6-3所示。调度时刻事务T1事务T2t1读A=50读B=100求和=150
t2
读B=100B←B*2写回B=200t3读A=50读B=200求和=250(验算不对)
图6-3不可重复读3.读“脏”数据(DirtyRead)即事务T1读取了经过事务T2修改过的数据,但是由于事务T2因为流产而撤消了对该数据的修改,数据库恢复到事务T2执行前的状态,从而导致事务T1读取的内容与数据库中的内容不一致。读“脏”数据的情况如图6-4所示。调度时刻事务T1事务T2t1
读B=100B←B*2写回B=200t2读B=200(读入T2的脏数据)
t3
ROLLBACK(B恢复为100)图6-4读“脏”数据返回本节6.2.2封锁1.封锁的类型DBMS通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁类型决定的。基本的封锁类型有两种:排它锁(ExclusiveLock,简称X锁)和共享锁(ShareLock,简称为S锁)。(1)排它锁。(2)共享锁。2.保证数据一致性的封锁协议——三级封锁协议所谓封锁协议就是在对数据库加锁、持锁和释放锁时所约定的一些规则。例如,应何时申请X锁或S锁、持锁时间、何时释放等。不同的封锁规则形成了不同的封锁协议,下面介绍三级封锁协议。(1)一级封锁协议。(2)二级封锁协议。(3)三级封锁协议(1)一级封锁协议。一级封锁协议是事务T在修改数据之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可有效防止丢失修改,并保证事务T是可恢复的。例如,图6-6使用一级封锁协议解决了图6-2中的丢失修改问题。调度时刻事务T1事务T2t1获得XlockA
t2读A=16XlockA等待t3A=A-1写回A=15CommitUnlockA等待等待等待t4
获得XlockA读A=15A=A-2写回A=13CommitUnlockA图6-6没有丢失修改(2)二级封锁协议。二级封锁协议是在一级封锁协议加上事务T对要读取的数据加S锁,读完后即可释放S锁。二级封锁协议除防止了丢失修改还可进一步防止读“脏”数据。例如,图6-7使用二级封锁协议解决了图6-4中读“脏”数据的问题。调度时刻事务T1事务T2t1
XlockB读B=100B←B*2写回B=200t2SlockB等待
t3
ROLLBACK(B恢复为100)UnlockBt4获得SlockB读B=100UnlockB
图6-7不读“脏”数据(3)三级封锁协议。三级封锁协议是事务T在读取数据之前必须先对其加S锁,在要修改数据之前必须先对其加X锁,直到事务结束后才释放所有的锁。例如图6-8使用了三级封锁协议解决了图6-3中的不可重复读问题。调度时刻事务T1事务T2t1SlockA读A=50SlockB读B=100求和=150
t2
XlockB等待t3读A=50读B=100求和=150CommitUnlockAUnlockB等待t4
获得Xlock读B=100B←B*2写回B=200CommitUnlockB图6-8可重复读封锁
协议X锁S锁不丢失
修改不读脏
数据可重
复读一级事务全程加锁不加锁√
二级事务全程加锁事务开始加锁,读完即释放√√
三级事务全程加锁事务全程加锁√√√表6-1不同级别的封锁协议返回本节6.2.3封锁出现的问题及解决方法1.活锁在多个事务请求对同一数据封锁时,总是使某一事务等待的情况称为活锁。例如:如果事务T1封锁了数据R后,T2也请求封锁R,于是T2等待。接着T3也请求封锁R。假如T1释放R上的锁后,系统首先批准了T3的请求,T2只得继续等待。接着T4也请求封锁R,T3释放R上的锁后,系统又批准了T4的请求,……,T2有可能就这样永远等待下去。2.死锁多个并发事务处于相互等待的状态,其中的每一个事务都在等待它们中的另一个事务释放封锁,这样才可以继续执行下去,但任何一个事务都没有释放自己已获得的锁,也无法获得其他事务已拥有的锁,所以只好相互等待下去,这就产生了死锁。调度时刻事务T1事务T2t1XlockA
t2
XlockBt3XlockB等待
t4
XlockA等待…图6-9死锁目前在数据库中解决死锁问题主要有两类方法,一类方法是采取一定措施来预防死锁的发生,另一类方法是允许发生死锁,然后采用一定手段定期诊断系统中有无死锁,若有则解除之。(1)死锁的预防。1)一次封锁法。2)顺序封锁法。(2)死锁的检测与解除。返回本节6.2.4可串行化调度所谓的两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁。具体体现在:(1)在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁;(2)释放一个封锁之后,事务不再申请并获得对任何数据的封锁。所谓两段锁的含义是:事务分为两个阶段,第一阶段是获得封锁,也称为扩展阶段。在这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但不能释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在这个阶段,事务可以释放任何数据项上的任何类型的锁,但是不能申请任何锁。返回本节6.2.5ORACLE的并发控制机制Oracle通过支持事务并发控制机制来管理多个事务,保证事务的一致性,并使用事务日志保证修改的完整性和可恢复性.在通常情况下,数据锁由系统隐含完成,用户不用考虑封锁问题,但Oracle也允许用户用LOCKTABLE命令显式对封锁对象加锁1.Oracle锁的类型Oracle的锁分为两大类:数据锁(DML锁)和字典锁.Oracle的数据锁有5种:共享锁(S锁)、排它锁(X锁),行级共享锁(RS锁)、行级排它锁(RX锁)和共享行级排它锁(SRX锁),其封锁粒度包括行级和表级2.Oracle数据锁的一个特点在默认情况下,读数据不加锁。也就是说,当一个用户更新数据时,另一个用户可以同时读取相应数据。Oracle通过一个被称之为回滚段的内存结构来保证用户不读“脏”数据和可重复读。这样可以提高数据的并发度6.3数据库恢复6.3.1数据库系统的故障6.3.2数据库备份技术6.3.3数据库恢复策略返回首页6.3.1数据库系统的故障1.事务故障2.系统故障3.介质故障返回本节6.3.2数据库备份技术1.数据转储2.日志文件1.数据转储(1)静态转储和动态转储。1)静态转储是在系统中没有运行其他事务时进行的转储操作。2)动态转储是指转储操作与用户事务并发进行,转储期间允许对数据库进行存取或修改。(2)海量转储和增量转储。海量转储是指每次转储全部数据库。增量转储是指转储上次转储后更新过的数据。2.日志文件(1)日志文件的格式和内容。各个事务的开始(BEGINTRANSACTION)标记。事务标识(标明是哪个事务)。操作的类型(插入、删除或修改)。操作对象。更新前数据的旧值(对插入操作而言,此项为空值)。更新后数据的新值(对删除操作而言,此项为空值)。各个事务的结束(COMMIT或ROLLBACK)标记。(2)登记日志文件。返回本节6.3.3数据库恢复策略1.事务故障的恢复具体的恢复步骤为:(1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新版采购合同范本3篇
- 提前终止租房合同的合同解除证明3篇
- 搅拌机销售合同范本3篇
- 方合伙人合同3篇
- 房屋买卖合同见证律师服务指南3篇
- 帆布鞋采购合同3篇
- 数字化测绘服务合同3篇
- 政府采购合同协议的监理3篇
- 帆船租赁条件范例3篇
- 方木订购条款3篇
- AI12人工智能-类脑智能
- 幼儿园课程标准3篇
- 卧式容器液位体积计算Excel表
- 物业设备外委维修规定范本
- 施工项目农民工工资支付无欠薪承诺书
- 设计中的重点、难点及关键技术问题的把握控制及相应措施
- 幼儿园教学活动 幼儿园教学活动概述 幼儿园教学活动的特点
- 6.2.1向量的加法运算 课件(共14张PPT)
- YY/T 1866-2023一次性使用无菌肛肠套扎器胶圈或弹力线式
- 海蒂(世界文学名著经典)
- 变电站检修规程完整
评论
0/150
提交评论