《数据库管理系统》PPT课件.ppt
《《数据库管理系统》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据库管理系统》PPT课件.ppt(145页珍藏版)》请在三一办公上搜索。
1、1,第7章 数据库管理系统,本章主要介绍DBMS的软件系统组成和主要的实现技术,如事务管理、并发控制、数据库恢复、数据的安全性和完整性;结合SQL Server 数据库管理系统,说明这些技术的具体实现,以及SQL Server 数据库管理系统的功能和服务性程序;最后介绍Oracle数据库管理系统的组织结构特点,2,7.2 事务管理,例:设想网上购物的一次交易,至少包括以下数据库操作:保存客户付款信息(可能包括与银行系统交互)更新客户所购商品的库存信息 生成订单并且保存到数据库中 更新用户相关信息,例如购物数量等等,3,正常情况:所有操作顺利进行,交易成功,与交易相关的所 有数据库信息也成功地更
2、新。异常情况:交易失败(例如,生成订单失败),使数据库中信息将会不可预测。此时该怎么办?如何在交易失败时,使数据库中的数据库恢复到交易前的状态?,4,例2:考虑飞机订票系统中的一个活动序列:(1)甲售票点读出某航班的机票余额(设=16);(2)乙售票点读出同一航班的机票余额也为16;(3)甲售票点卖出一张机票,修改余额为15,并把A写回数据库;(4)乙售票点也卖出一张机票,也修改余额为15,并把A写回数据库。,5,结果:卖出两张票,数据库中机票余额只减少1。如何解决出现的这些问题,以保证数据库中的数据是一致的?数据库中,事务就是解决这些问题的技术手段。,6,何为数据库事务?“一荣俱荣,一损俱损
3、”很能体现事务的思想。很多复杂的事物要分步进行,但它们组成一个整体,要么整体生效,要么整体失效。这种思想反映到数据库上,就是多个SQL语句,要么所有执行成功,要么所有执行失败。,7.2.1 事务的基本概念,7,事务的定义:是用户定义的一个数据库操作序列,且操作序列中的所有操作要么全做,要么全不做,是一个不可分割的整体。注意:在关系数据库中,一个事务可以是一条SQL语句,也可以是一组SQL语句,甚至是一个程序。事务中的SQL语句必须按逻辑次序执行。例:现规定:网上购物的一次交易的所有操作要么全做,要么全不做。则可以定义为一个事务。,8,需要事务的原因:(1)数据恢复的需要 误操作或系统崩溃时恢复
4、数据(2)并发控制的需要 多个事务同时操作时保证对数据的一致性,9,事务的应用背景,例1:某公司在银行中有A,B两个帐号,现在公司想从帐号A中转帐1万元到帐号B。分析:要转帐正确,必须保证A中取出1万元的操作和在B中增加1万元的操作要么都成功完成,要么都不做。如何实现?把这二个操作定义在一个事务中。,10,银行转帐:事务T从A帐户过户1万元到B帐户。T:read(A);A:=A 1;write(A);read(B);B:=B+1;write(B);,read(X):从数据库传送数据项X到事务的工作区中。write(X):从事务的工作区中将数据项X写回数据库。,11,7.2.2 事务的特性,事务
5、具有四个特性:原子性(Atomicity)、一致性(Consistency)、分离性(Isolation)、持久性(Durability)。这四个特性也简称为ACID特性。,12,(1)原子性(Atomicity)事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。(2)一致性(Consistency)在一个事务执行之前和执行之后数据库都必须处于一致性状态。一致性:假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。,13,例:下列语句定义了一个事务 begin transaction Update 库存 set 库存量=库存量-2 where
6、 产品编号=C001Insert into 付款 values(5122000000,300,建行,C001,2007.07.2.03)Insert into 订购单 values(5122000000,C001,2,已付)commit,14,(3)分离性(Isolation)并发执行的事务不应该交叉影响。即一个事务内部的操作及正在操作的数据不被其它企图进行修改的事务看到。对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行。分离性是DBMS针对并发事务间的冲突提供的安全保证,BMS通过并发控制机制在并发执行的事务间提供不同级别的分离。,15,(4
7、)持久性(Durability)一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,经得住任何系统故障。当系统或介质发生故障时,确保已提交事务的更新不能丢失。DBMS保证采取措施:系统发生故障不能改变事务的持久性。持久性通过事务日志、数据库备份和恢复来保证。,16,7.2.3 事务处理语句,1、事务的开始和结束,定义事务的语句格式:BEGIN TRANSACTION 事务名称 SQL 语句 COMMIT TRANSACTION(或 ROLLBACK TRANSACTION),17,事务的开始显示开始:begin transaction隐式开始:首次执行alter、create、
8、insert、open等T-SQL语句会自动定义一个事务。,18,事务的结束 COMMIT transaction:事务正常结束,提交事务的所有操作(读+更新),事务中所有对数据库的更新永久生效 ROLLBACK transaction:事务异常终止,事务运行的过程中发生了故障,不能继续执行,回滚整个事务或是存储点定义以后所发生的所有更新操作,事务滚回到开始时的状态,19,注意:组成一个事务的SQL语句由用户根据情况而定。定义事务时,BEGIN TRANSACTION语句与COMMIT TRANSACTION(ROLLBACK TRANSACTION)语句必须成对出现。ROLLBACK TRA
9、NSACTION应该在COMMIT TRANSACTION语句之前调用。一旦提交就不能再撤销。,20,、定义、提交和回滚事务示例,BEGIN TRANSACTION demo SELECT*FROM student SAVE TRANSACTION save_demo/存储点/INSERT student(学号,姓名)VALUES(20040101,zhang)SELECT*FROM student ROLLBACK TRANSACTION save_demo/回滚/COMMIT TRANSACTION SELECT*FROM student,/结果没有变化/,21,7.2.4 SQL Ser
10、ver的事务模式,SQL Server的事务模式可分为三种:显式事务隐式事务自动事务模式。,22,、显式事务模式,指由用户显示执行begin transaction而定义事务的开始。用commit或rollback结束事务。Commit transaction:事务正常结束,可以提交。Rollback transaction:事务非正常结束,撤消事务已做的操作,回滚到事务开始时状态。,23,、隐式事务使用某些TSQL语句时自动启动事务,但需要有COMMIT 或rollback 标识事务的结束。例如:首次执行alter、insert、create、open等都会自动起动一个事务(一般Oracle
11、默认模式)注意:事务结束后,下次执行这些语句又将自启动下一个新事务,24,在SQL Server中,事务模式的设置方法:SET IMPLICITY_TRANSACTIONS ON:进入隐式事务模式SET IMPLICITY_TRANSACTIONS OFF:退出隐式事务模式。当显式事务被提交或回滚,或者关闭IMPLICIT_TRANSACTIONS连接选项后,SQL Server又进入自动事务管理模式。,25,、自动事务模式:每个T-SQL语句都当作一个事务,成功执行自动提交,执行过程中产生错误时自动回滚。是SQL Server的默认事务管理模式。当应用程序与SQL Server建立连接后,直
12、接进入自动事务模式,直到用BEGIN TRANSACTION语句开始一个显式事务,或者打开IMPLICIT_TRANSACTIONS 连接选项进入隐式事务模式为止。,26,7.2.5 批处理,批是一组SQL语句的集合,一个批以GO结束。GO不是SQL语句。它是在某些客户端工具中使用的符号,客户端工具将它解释为:最后一个GO上面的所有内容都应该一起发送到服务器来执行。批中语句被一次提交给SQL Server,SQL Server将这些语句编译为一个执行单元,称做SQL Server执行计划。,27,批和事务的区别,(1)批用于客户端控制多个语句如何发送到SQL Server以便立即处理。事务是服
13、务器端的执行T-SQL语句的基本工作单元。(2)批语句的组合发生在编译时刻,事务中语句的组合发生在执行时刻。(3)批中某个语句存在语法错误,SQL Server将取消这个批中所有语句的执行。事务中某个操作违犯约束、触发器等条件时,SQL Server回滚整个事务。(4)批中可包含多事务,事务中可包含多个批。,28,7.3 并发控制,7.3.1 问题的产生7.3.2 事务并发执行带来的问题7.3.3 封锁技术7.3.4 SQL Server的封锁方式,29,1、数据库是共享资源、数据库系统中存在多个用户。特点:多用户的存在使得在数据库系统中,同一时刻可能需要多个事务运行。例如:在银行数据库系统中
14、,有一个银行帐号有余额20,000元,某一时刻,户主在银行前台取款2,000元,与此同时又有另一个银行帐户正在向该帐户转帐5,000元。,7.3.1 问题的产生,30,(1)事务串行执行每一时刻只有一个事务运行,其他事务必须等到该事务结束以后方能运行不能充分利用资源,不能充分发挥数据库共享资源的特点,2、多事务执行方式有以下几种不同的执行方式,31,(2)交叉并发方式:并行事务轮流交叉运行,能充分利用CPU资源,改善事务的响应时间。(3)同时并发方式 在多处理机系统中,多个事务是真正的并行运行,32,1、如果对多个事务的并发执行不加以控制,会出现什么现象?(1)产生多个事务同时存取同一数据的情
15、况(2)事务可能会存取不正确的数据,破坏数据库的一致性。,7.3.2 事务并发执行可能带来的问题,33,例:设上例中的取款为事务T1,转帐为事务T2,如果T1和T2的操作序列如下,将会出现什么现象?(1)T1查询帐号余额20,000元;(2)T2查询该帐号的余额20,000元;(3)T1支付客户2,000元,改用户余额为18,000元;(4)T2将转帐的5,000元加到帐号上,修改用户余额改为25,000元。结果:用户余额为25,000元,银行损失2000元!原因:第一次对数据的修改被第二次修改覆盖了,34,引起这种现象的原因:在并发操作中,对并发事务的操作序列的调度是随机的,没有加以控制。对
16、事务的并发执行不加控制,将会带来以下三类问题:丢失更新(lost update)读脏数据(dirty read)读值不可复现(unrepeatable read),35,(1)丢失更新,如右图:T1和T2并发执行,R的初值为5。执行结果:R=15。原因:由于并发对R写,T1对R的更新被丢失。,T1,T2,read(R),read(R),R:=R+1,write(R),R:=3R,write(R),时间,把R由5增加1变为6,把R由5乘3变为15,初始值R=5,两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。,36,(2)读“脏”数据,查询一个已经
17、被其他事务更新、但尚未提交的元组可能引起该类问题。即:事务T1修改某一数据,并将其写回磁盘事务T2读取同一数据后,T1被撤销,数据恢复原值,T2读到的数据就与数据库中的数据不一致。为“脏”数据,37,R恢复为100,ROLLBACK,Read(R),Write(R),RR*2,Read(R),T2,T1,读“脏”数据,R的初值为100 T2读到的R为200 撤消后,T2所读的R值与数据库内容不一致,是“脏”数据,例:事务T1、T2对数据R进行操作,操作序列为:,38,T1,T2,begin tran,begin tran,update accont set 余额=余额-2000 where 帐
18、号=010001,select sum(余额)from accont wth(nolock),rollback,例:设置隔离级别为:READ UNCOMMITTED 或在selec语句中加上with(nolock)。事务T1、T2的操作序列如下,产生了读脏数据:,39,(3)不可重复读,指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。包括三种情况:(1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值,40,(2)事务T1按一定条件从数据库中读取数据记录后,T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录
19、消失了。(3)事务T1按一定条件从数据库中读取数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种情况也称为幻影现象(或幻想读问题),41,T1读取B=100,对其进行修改T2修改B=200,并写回数据库T1重读B校对,但B=200,与第一次所读值不一致。,(验算不对),和=260,R(B)=200,R(A)=60,(B)=200,BB*2,R(B)=100,求和=160,R(B)=100,R(A)=60,T2,T1,不可重复读,例如:,更新B值,读更新前的B值,读更新后的B值,42,例:事务T1、T2的操作序列如下,产生了幻想读,T1,T2,begin
20、 tran,begin tran,insert into accont values(010001,zhang,200),Select 余额 from accontwith(nolock),update accont with(nolock)set 余额=余额-2000 where 帐号=010001,Select 余额 from accont with(nolock),43,2、并发控制的任务用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,保证事务的隔离性和数据库的一致性3、如何对并发事务进行管理,避免交叉访问破坏数据库的一致性状态?商用的DBMS一般采用封锁(Lockin
21、g)技术,44,7.3.3 封锁技术,一、基本思想 当需要查询或更新数据时,先对数据进行加锁,以避免来自其他事务的干扰。针对不同的干扰问题可以有不同的封锁机制。“锁”是一种软件机制,用来指示某个用户已经占用了某种资源,防止其他用户做出影响本用户的数据修改或破坏数据库数据的完整性和一致性。,45,所谓资源,主要指用户可以操作的数据行、索引以及数据表等。例:当用户对一个表(或记录)进行更新时,首先封锁该表(或记录),使其他用户不能在同一时刻更新该表(或记录),只能在该用户更新后再实施别的更新。,46,二、加锁(locking)和解锁(unlock),加锁:事务T在对某个数据对象操作之前,先向系统发
22、出请求,对其加锁。如果要访问的数据单元还没有设置其他锁,就可获得访问权,否则等待。解锁:进程访问结束释放锁。注意:有些封锁在执行完相应操作后就自动释放封锁,有些封锁则保持到事务结束时才释放。,47,三、锁的类型,事务对数据对象拥有的控制由封锁类型决定。锁的类型有独占锁和共享锁:独占锁(X锁,排它锁):事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。任何写操作均要使用独占锁。,48,共享锁(S锁,读锁):若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。任何试图修改某数据的事务,如果该数据
23、上有共享锁,那么该事务就会被阻塞,直到所有的共享锁被释放。S锁只用于并发的读。,49,两种锁的相容矩阵,YES=相容的请求,NO不相容的请求,50,T1,T2,begin tran,begin tran,update accont with(holdlock)set 余额=余额-2000 where 帐号=010001,rollback,例1:当设置隔离级别为:READ COMMITTED或更高,或在selec语句中加上with(holdlock)。事务T1、T2的操作序列如下,则不会读脏数据:,select sum(余额)from accont with(holdlock),进入等待,等待,
24、select sum(余额)from accont with(holdlock),执行,T1修改之前加X锁,T2请求加S锁,由于T1未结束,T2等待,T1撤销,恢复为原值,T2读的是原值,51,T1,T2,begin tran,begin tran,update accont set 余额=余额-2000 where 帐号=010001,commit,例2:设置更高隔离级在selec语句中加上with(holdlock)。事务T1、T2的操作序列如下,不会产生幻想读,等待,等待,select余额from accont with(holdlock),insert into accont valu
25、es(010001,zhang,200),进入等待,select余额from accont,执行,T1查询时加锁,T2请求加锁,由于T1未结束,T2等待,T1提交,释放锁,T2获得锁,执行,52,两段式封锁协议的实施,为了不破坏事务的可串行性,事务对数据单元的加锁和释放锁要遵守一定的协议。两段式协议:一个进程分为两个阶段 第一阶段;锁的数目稳定的增长,全是加锁,不能释放锁。第二阶段:只能释放锁,而且是一起释放所有获得的锁。,53,两段式协议实施的过程和内容:,1)一个数据单元在第一次被访问之前必须对它加锁。2)一个数据单元已经有了一个共享锁,只能对它再加共享锁。如果已有了一个独占锁则不能再加任
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库管理系统 数据库 管理 系统 PPT 课件
链接地址:https://www.31ppt.com/p-5519547.html