系统实现技术——事务和锁_第1页
系统实现技术——事务和锁_第2页
系统实现技术——事务和锁_第3页
系统实现技术——事务和锁_第4页
系统实现技术——事务和锁_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章 系统实现技术 事务和锁,本章重要概念,(1)事务的定义,COMMIT和ROLLBACK的语义,事务的ACID性质,事务的状态变迁图。(2)存储器类型,稳定存储器的实现,数据传送过程。(3)恢复的定义、基本原则和实现方法,故障的类型,检查点技术,REDO和UNDO操作,运行记录优先原则。(4)并发操作带来的三个问题,X锁、S锁、使用X锁和S锁的操作,封锁协议,活锁、饿死和死锁,并发调度、串行调度、并发调度的可串行化,SQL中事务的存取模式和隔离级别,基于时标的并发控制。,第8章 系统实现技术,8.1 事务8.2 数据库的恢复8.3 数据库的并发控制,8.1 事务,8.1.1 事务的定义 8.1.2 事务的ACID性质,为什么需要事务8.1-1,例如,银行转帐问题: 假定资金从帐户A转到帐户B,至少需要两步:帐户A的资金减少然后帐户B的资金相应增加,为什么需要事务8.1-2,CREATE TABLE bank( customerName CHAR(10), -顾客姓名 currentMoney MONEY -当前余额)GOALTER TABLE bank ADD CONSTRAINT CK_currentMoney CHECK(currentMoney=1)GOINSERT INTO bank(customerName,currentMoney) VALUES(张三,1000)INSERT INTO bank(customerName,currentMoney) VALUES(李四,1),创建帐户表,存放用户的帐户信息,添加约束:根据银行规定,帐户余额不能少于1元,否则视为销户,张三开户,开户金额为1000元 ;李四开户,开户金额1元,为什么需要事务8.1-3,目前两个帐户的余额总和为:1000+1=1001元,为什么需要事务8.1-4,模拟实现转帐 : 从张三的帐户转帐1000元到李四的帐户,/*-转帐测试:张三转账1000元给李四-*/-我们可能会这样这样编写语句-张三的帐户少1000元,李四的帐户多1000元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=张三UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四GO-再次查看转帐后的结果。 SELECT * FROM bankGO,请问:执行转帐语句后,张三、李四的帐户余额为多少?,张三的帐户没有减少 但李四的帐户却多了1000元 100010012001元 总额多出了1000元!,为什么需要事务8.1-5,-张三的帐户减少1000元,李四的帐户增加1000元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=张三UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四GO,错误原因分析:,UPDATE语句违反约束:余额=1元,执行失败,所以张三还是1000元,继续往下执行:执行成功,所以李四变为1001元,如何解决呢?使用事务,8.1.1 事务的定义(1),定义8.1 事务(transaction)是构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行。不论发生何种情况,DBS必须保证事务能正确、完整地执行。 在程序中,事务以BEGIN TRANSACTION语句开始,以COMMIT语句或ROLLBACK语句结束。 COMMIT语句表示事务执行成功地结束(提交),此时告诉系统,数据库要进入一个新的正确状态,该事务对数据库的所有更新都已交付实施(写入磁盘)。 ROLLBACK语句表示事务执行不成功地结束(应该“回退”),此时告诉系统,已发生错误,数据库可能处在不正确的状态,该事务对数据库的所有更新必须被撤消,数据库应恢复该事务到初始状态。,用户定义的一个对数据库读写操作序列一个不可分割的工作单位数据库恢复和并发控制的基本单位数据库系统中通常有多个事务并行运行事务和程序比较在关系数据库中,一个事务可以是一条或多条SQL语句,也可以包含一个或多个程序。一个程序通常包含多个事务,转帐过程就是一个事务。它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任一条出现错误,则整个转帐业务也应取消,两个帐户中的余额应恢复到原来的数据,从而确保转帐前和转帐后的余额不变,即都是1001元。,8.1.1 事务的定义(2),8.1.1 事务的定义(3),例8.1 设银行数据库中有一转账事务T,从账号A转一笔款子($50)到账号B,其操作如下:T:read(A); A:=A50; write(A); read(B); B:=B + 50; write(B).,组织成如下事务:T:BEGIN RANSACTION; read(A); A:=A-50;write(A);if(A0)ROLLBACK;else read(B); B:=B+50; write(B); COMMIT;,8.1.1 事务的定义(4),对数据库的访问是建立在读和写两个操作的基础上的:read(X):把数据X,从磁盘的数据库中读到内存的缓冲区中。write(X):把数据X,从内存缓冲区中写回磁盘的数据库。 在系统运行时,write操作未必导致数据立即写回磁盘,很可能先暂存在内存缓冲区中,稍后再写回磁盘。这件事情是DBMS实现时必须注意的问题。,8.1.2 事务的ACID性质,性质:原子性(Atomicity):事务是一个不可分割的工作单元,事务中的操作要么都做,要么都不做 (All or None) 一致性(Consistency):即数据不会应事务的执行而遭受破坏。事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。与原子性密切相关。隔离性(Isolation):在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样。 持久性(Durability):一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反映在数据库中。,8.2 数据库的恢复,8.2.1 存储器结构 8.2.2 恢复的基本原则和实现方法8.2.3 故障类型和恢复方法8.2.4 检查点技术8.2.5 SQL对事务的支持,8.2.1 存储器结构(1),1.存储器类型易失性存储器(volatile storage) 内存、cache存储器 非易失性存储器(nonvolatile storage) 磁盘和磁带 稳定存储器(stable storage)这是一个理论上的概念。存储在稳定存储器中的信息是决不会丢失的。 2.稳定存储器的实现数据备份 数据银行,8.2.1 存储器结构(2),3. 数据访问块、物理块和缓冲块块的操作input(A):把物理块A的内容传送到内存的缓冲块中。Output(B):把缓冲块B的内容传送到磁盘中恰当的物理块中,8.2.1 存储器结构(3),8.2.1 存储器结构(4),4. 恢复和原子性的联系,8.2.2恢复的基本原则和实现方法,基本原则 :“冗余”,即数据库重复存储。具体实现方法 平时做好两件事:转储和建立日志周期地(比如一天一次)对整个数据库进行拷贝,转储到另一个磁盘或磁带一类存储介质中。 建立日志数据库。记录事务的开始、结束及数据每一次插入、删除和修改前后的值,并写到“日志”库中。一旦发生数据库故障,分两种情况进行处理 如果数据库已被破坏,则装入last数据库备份,再利用日志库将这两个数据库状态之间的所有更新重新做一遍。如果数据库未被破坏,但某些数据不可靠,则撤消所有不可靠的修改,把数据库恢复到正确的状态。,8.2.3 故障类型和恢复方法(1),1.事务故障可以预期的事务故障,如存款余额透支等非预期事务故障,如运算溢出、数据错误、死锁等2.系统故障:硬件故障、软件错误或掉电等,重新启动时,具体处理分两种情况考虑。对未完成事务作UNDO处理;对已提交事务但更新还留在缓冲区的事务进行REDO处理。,8.2.3 故障类型和恢复方法(2),3介质故障在发生介质故障和遭受病毒破坏时,磁盘上的物理数据库遭到毁灭性破坏。此时恢复的过程如下:重装最近转储的后备副本到新的磁盘,使数据库恢复到转储时的一致状态。在日志中找出最近转储以后所有已提交的事务。对这些已提交的事务进行REDO处理,将数据库恢复到故障前某一时刻的一致状态。在实际中,系统故障通常称为软故障(Soft Crash),介质故障通常称为硬故障(Hard Crash)。,8.2.4 检查点技术(1),1检查点方法 在DBS运行时,DBMS定时设置检查点。在检查点时刻才真正做到把对DB的修改写到磁盘,并在日志文件写入一条检查点记录(以便恢复时使用)。当DB需要恢复时,只有那些在检查点后面的事务需要恢复。,事务T1不必恢复;事务T2和事务T4必须重做(REDO);事务T3和事务T5必须撤消(UNDO)。,8.2.4 检查点技术(2),2检查点方法的恢复算法:分成两步。(1)根据日志文件建立事务重做队列和事务撤销队列。此时,从头扫描日志文件(正向扫描)。(2)对重做队列中的事务进行REDO处理,对撤销队列中的事务进行UNDO处理。进行REDO处理的方法是:正向扫描日志文件,根据重做队列的记录对每一个重做事务重新实施对数据库的更新操作。进行UNDO处理的方法是:反向扫描日志文件,根据撤销队列的记录对每一个撤销事务的更新操作执行逆操作。,8.2.5 SQL对事务的支持,无begin transactionCommitRollback,8.3 数据库的并发控制,8.3.1 并发操作带来的三个问题8.3.2 封锁技术8.3.3 封锁带来的问题8.3.4 并发操作的调度8.3.5 SQL对事务处理的支持,8.3.1并发操作带来的三个问题(1),图8.5 在时间t8丢失了事务T1的更新(FIND表示从DB中读值,UPD表示把值写回到DB),1丢失更新问题(例8.2),8.3.1并发操作带来的三个问题(2),图8.6 事务T2在时间t4读了未提交的A值(80),2读脏数据问题(例8.3,用户读了“脏数据”,但没有破坏数据库的完整性),8.3.1并发操作带来的三个问题(3),图8.8 事务T2在时间t4读了未提交的A值,并在时间t8丢失了自己的更新,2读脏数据问题(例8.4,用户读了“脏数据”,引起自身的更新操作被丢失,破坏了数据库的完整

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论