视图可串行化_第1页
视图可串行化_第2页
视图可串行化_第3页
视图可串行化_第4页
视图可串行化_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 数据库保护之事务,数据库的安全性,安全性的含义: 数据库的安全性是指保护数据库,防止因用户非法适用数据库造成数据泄露、更改或破坏。 安全性控制的方法: 用户标识和鉴定 存取控制 定义视图 审计 数据加密,数据库的完整性,完整性的含义: 数据库的完整性是指保护数据库中数据的正确性、有效性(相容性)和一致性,防止错误的数据进入数据库造成无效操作。 完整性约束条件分为6类- 图5-3 对象粒度:列级、元组级、关系级 状态: 动态:反映数据库状态变迁的约束 静态:反映数据库状态合理性的约束,数据库的完整性,静态列级约束 对数据类型、格式、取值范围、空值以及其他约束 静态元组约束 例如发货量 =

2、 订货量 静态关系约束 实体完整性 参照完整性 函数依赖约束 统计约束,数据库的完整性,动态列级约束 修改定义、修改值 动态元组约束 动态关系约束 表5-5,数据库的完整性,完整性控制 定义、检查、维护完整性约束条件 立即执行的约束/延迟执行的约束 RDBMS在实现参照完整性时需要考虑的几个方面: 外码是否可空 删除被参照关系元组时的考虑 级联、受限、置空值删除 修改被参照关系中主码的考虑 级联、受限、置空值修改,Oracle的完整性控制,实体完整性 要求主属性非空(primary key) 参照完整性 外码(foreign key) On delete cascade关键字:删除被参照元组时

3、,同事删除参照该元组的那些元组。 用户自定义完整性 Not null Unique check,并发控制的含义,并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。 DBMS的并发控制以事务为单位。通常采用封锁技术。,提纲,事务概念 事务模型 事务调度 事务隔离性级别 事务冲突可串行化 事务视图可串行化,事务概念,事务定义 事务是由一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单位 例如银行转帐 SQL中事务的定义 事务以Begin transaction开始,以Commit work或 Rollba

4、ck work结束 Commit work表示提交,事务正常结束 Rollback work表示事务非正常结束,撤消事务已做的操作,回滚到事务开始时状态,事务概念,示例 银行转帐:事务T从A帐户过户50¥到B帐户 T:read(A); A := A 50; write(A); read(B); B := B + 50; write(B); read(X):从数据库传送数据项X到事务的工作区中 write(X):从事务的工作区中将数据项X写回数据库,事务概念,事务特性(ACID) 原子性(Atomicity) 事务中包含的所有操作要么全做,要么全不做 原子性由恢复机制实现 一致性(Consist

5、ency) 事务的隔离执行必须保证数据库的一致性 事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态 数据库的一致性状态由用户来负责 如银行转帐,转帐前后两个帐户金额之和应保持不变(意大利香肠),事务概念,隔离性(Isolation) 系统必须保证事务不受其它并发执行事务的影响 对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行 隔离性通过并发控制机制实现 持久性(Durability) 一个事务一旦提交之后,它对数据库的影响必须是永久的 系统发生故障不能改变事务的持久性 持久性通过恢复机制实现,事务概念,事务生命周期图,

6、事务概念,事务执行模式 显式事务 以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束 隐含事务 事务自动开始,直到遇到COMMIT或ROLLBACK时结束 自动事务 每个数据操作语句作为一个事务,update SC set GRADE = GRADE+15,事务模型,平面事务 一层结构BEGIN TRANCOMMIT 平面事务的缺点(不能部分回滚) 确定旅行路线 批量更新 如银行结算利息,可以把更新每个帐号作为一个事务,也可以把更新所有帐号作为一个事务,事务模型,保存点,begin_transaction() S1; sp1 := create_savepoint(

7、); Sn; spn := create_savepoint(); if(condition) rollback(spi); commit();,事务模型,嵌套事务 事务中包含事务,事务模型,分布式事务,事务模型,工作流 工作流是一个,它涉及由不同的处理实体所执行的多个任务的相互协同的执行,事务模型,事务调度,事务的执行顺序称为一个调度,表示事务的指令在系统中执行的时间顺序 一组事务的调度必须保证 包含了所有事务的操作指令 一个事务中指令的顺序必须保持不变 串行调度 在串行调度中,属于同一事务的指令紧挨在一起 对于有n个事务的事务组,可以有n!个有效调度 并行调度 在并行调度中,来自不同事务的

8、指令可以交叉执行 当并行调度等价于某个串行调度时,则称它是正确的,事务调度,并行 Vs 串行 基本比较 并行事务会破坏数据库的一致性 串行事务效率低 并行的优点 一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量 系统中存在着周期不等的各种事务,串行会导致难于预测的时延。如果各个事务所涉及的是数据库的不同部分,采用并发会减少平均响应时间,事务调度,事务执行示例,T1 read(A); A := A 50; write(A); read(B); B := B + 50; write(B);,T2 read(A); temp := A0.1 A := A t

9、emp; write(A); read(B); B := B + temp; write(B);,从A过户 50¥到B,从A过户存款 的10%到B,开始状态: A=1000¥ B=2000¥ A+B=3000¥,事务调度,read(A); A := A 50; write(A); read(B); B := B + 50; write(B);,read(A); temp := A0.1 A := A temp; write(A); read(B); B := B + temp; write(B);,T1,T2,A=950¥ B=2050¥,结束状态: A=855¥ B=2145¥ A+B=30

10、00¥,串 行 调 度 1,事务调度,read(A); A := A 50; write(A); read(B); B := B + 50; write(B);,read(A); temp := A0.1 A := A temp; write(A); read(B); B := B + temp; write(B);,T1,T2,A=900¥ B=2100¥,结束状态: A=850¥ B=2150¥ A+B=3000¥,串 行 调 度 2,事务调度,read(A); A := A 50; write(A);,read(B); B := B + temp; write(B);,T1,T2,A=9

11、50¥ B=2000¥,结束状态: A=855¥ B=2145¥ A+B=3000¥,read(B); B := B + 50; write(B);,read(A); temp := A0.1 A := A temp; write(A);,A=855¥ B=2000¥,A=855¥ B=2050¥,并 行 调 度 3,事务调度,可恢复调度 事务的恢复:一个事务失败了,应该能够撤消该事务对数据库的影响。如果有其它事务读取了失败事务写入的数据,则该事务也应该撤消,read(A); write(A);,T1,T2,read(B); rollback;,read(A); commit,不可恢复的调度,

12、可恢复调度 对于每对事务T1与T2,如果T2读取了T1所写的数据,则T1必须先于T2提交,事务调度,无级联调度,级联调度 由于一个事务故障而 导致一系列事务回滚,无级联调度 对于每对事务T1与T2,如果T2读取了T1所写的数据,则T1必须在T2读取之前提交,无级联调度必是可恢复调度,事务隔离性级别:丢失修改,read(A); A := A 50;,B := B + temp; write(B);,T1,T2,A=1000¥ B=2000¥,结束状态: A=950¥ B=2100¥ A+B=3050¥,write(A); read(B); B := B + 50; write(B);,read(

13、A); temp := A0.1 A := A temp; write(A); read(B);,A=900¥ B=2000¥,A=950¥ B=2000¥,A=950¥ B=2050¥,并 行 调 度 4,两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改丢失,事务隔离性级别:读脏数据,read(A); A1 := A; read(B); B1 := B; A1 + B1 = 2950;,read(B); B := B + 50; write(B);,T1,T2,A=1000¥ B=2000¥,read(A); A := A 50; write(A);,

14、并 行 调 度 5,事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据与数据库中数据不一致,则T2读到的数据就是脏数据,事务隔离性级别:不能重复读,read(A); A1 := A,T1,T2,A=1000¥ B=2000¥,read(A); A := A 50; write(A); read(B); B := B + 50; write(B);,read(B); B1 := B A1+B1=3050,A=950¥ B=2050¥,并 行 调 度 6,事务T1读取某一数据后,事务T2对其做了修改,当T1再次读取该

15、数据时,得到与前次不同的值,事务隔离性级别:发生幻象,select * from SC where CNO = C01 and SNO = S01,T1,T2,发 生 幻 象,insert into SC values(S01, C01, null),事务隔离性级别,SQL中隔离性级别的定义 serializable:一个调度的执行必须等价于一个串行调度的结果 repeatable read:只允许读取已提交的记录,并要求一个事务对同一记录的两次读取之间,其它事务不能对该记录进行更新 read committed:只允许读取已提交的记录,但不要求可重复读 read uncommitted:允许

16、读取未提交的记录,冲突可串行化,指令的顺序 考虑一个调度S中的两条连续指令(仅限于read与 write操作)Ii与Ij,分别属于事务Ti与Tj Ii = read(Q), Ij = read(Q); Ii = read(Q), Ij = write(Q); Ii = write(Q), Ij = read(Q); Ii = write(Q), Ij = write(Q); 在 情况下,Ii与Ij的次序无关紧要。其余情况下,Ii与Ij的次序不同,其执行结果也不同,数据库最终状态也不同,冲突可串行化,冲突指令 当两条指令是不同事务在相同数据项上的操作,并且其中至少有一个是write指令时,则称这

17、两条指令是冲突的 如在、情况下,Ii与Ij 是冲突的 非冲突指令交换次序不会影响调度的最终结果 冲突等价 如果调度S可以经过一系列非冲突指令交换转换成调度S,则称调度S与S是冲突等价的,冲突可串行化,read(A); write(A);,read(B); write(B);,T1,T2,read(B); write(B);,并 行 调 度 3,read(A); write(A);,read(A); write(A);,read(B); write(B);,T1,T2,write(B);,read(A);,write(A);,read(B);,read(A); write(A);,read(B)

18、; write(B);,write(B);,read(A); write(A);,read(B);,1,2,3,read(A); write(A); read(B); write(B);,read(B); write(B);,read(A);,write(A);,冲突可串行化,冲突可串行化 当一个调度S与一个串行调度冲突等价时,则称该调度是冲突可串行化的 如并行调度3是冲突可串行化的,存在结果相同,但非冲突等价的调度,冲突可串行化,read(A); A := A - 50 write(A);,T1,T2,冲突指令,T1,T2,read(B); B := B - 10 write(B);,rea

19、d(B); B := B + 50 write(B);,read(A); A := A + 10 write(A);,read(A); A := A - 50 write(A); read(B); B := B + 50 write(B);,read(B); B := B - 10 write(B); read(A); A := A + 10 write(A);,A=950¥ B=2000¥,A=950¥ B=1990¥,A=950¥ B=2040¥,A=960¥ B=2040¥,A=960¥ B=2040¥,A=950¥ B=2050¥,冲突可串行化判定,优先图(precedence gra

20、ph) 一个调度S的优先图是这样构造的:它是一个有向图G =(V,E),V是顶点集,E是边集。顶点集由所有参与调度的事务组成,边集由满足下述条件之一的边Ti Tj组成: 在Tj执行read(Q)之前,Ti执行write(Q) 在Tj执行write(Q)之前,Ti执行read(Q) 在Tj执行write(Q)之前,Ti执行write(Q),冲突可串行化判定,T1,T2,并 行 调 度 3,T1,T2,read(A);,write(B);,T1,T2,write(A); read(B); write(B);,并 行 调 度 4,read(A); write(A); read(B);,T1,T2,r

21、ead(A); write(A);,read(B); write(B);,read(B); write(B);,read(A); write(A);,冲突可串行化判定,如果优先图中存在边TiTj ,则在任何等价于S的串行调度S中,Ti都必须出现在Tj之前 冲突可串行化判定准则 如果调度S的优先图中有环,则调度S是非冲突可串行化的。如果图中无环,则调度S是冲突可串行化的,T1,T2,T1,T2,并行调度3是冲 突可串行化的,并行调度4是非 冲突可串行化的,冲突可串行化判定,与冲突可串行化等价的串行顺序 串行顺序可由拓扑排序得到,求出与优先图的偏序相一致的线序,T1,T3,T2,T4,T1,T2,

22、T3,T4,T1,T3,T2,T4,视图可串行化,视图等价 考虑关于某个事务集的两个调度S,S,若调度S,S满足以下条件,则称它们是视图等价的: 对于每个数据项Q,若事务Ti在调度S中读取了Q的初始值,那么Ti在调度S中也必须读取Q的初始值 对于每个数据项Q,若事务Ti在调度S中执行了read(Q),并且读取的值是由Tj产生的,那么Ti在调度S中读取的Q值也必须是由Tj产生的 对于每个数据项Q,若在调度S中有事务执行了最后的write(Q),则在调度S中该事务也必须执行最后的write(Q),视图可串行化,注:条件、保证两个调度中的每个事务都读取相同的值,从而进行相同的计算 条件、保证两个调度

23、得到最终相同的系统状态,read(A); write(A); read(B); write(B);,read(A); write(A); read(B); write(B);,T1,T2,read(B); write(B);,read(A); write(A);,T1,T2,由T1产生的A值,read(A); write(A);,read(B); write(B);,由T1产生的A值,视图等价,视图可串行化,read(A); write(A); read(B); write(B);,read(A); write(A); read(B); write(B);,T1,T2,read(A); write(A); read(B); write(B);,read(A); write(A); read(B); write(B);,T1,T2,由T1产生的A值,调度执行前的A值,非视图等价,视图可串行化,视图可串行化 如果某个调度视图等价于一个串行调度,则称该调度是视图可串行化的 冲突可串行化调度一定是视图可串行化的 存在视图可串行化但非冲突可串行化的调度,read(Q);,T1,T2,write(Q);,write(Q);,write(Q);,T3,盲目写操作,视图等价,视图

温馨提示

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

评论

0/150

提交评论