您好,欢迎访问三七文档
第5章数据库保护之事务数据库的安全性安全性的含义:数据库的安全性是指保护数据库,防止因用户非法适用数据库造成数据泄露、更改或破坏。安全性控制的方法:用户标识和鉴定存取控制定义视图审计数据加密数据库的完整性完整性的含义:数据库的完整性是指保护数据库中数据的正确性、有效性(相容性)和一致性,防止错误的数据进入数据库造成无效操作。完整性约束条件分为6类-图5-3对象粒度:列级、元组级、关系级状态:动态:反映数据库状态变迁的约束静态:反映数据库状态合理性的约束数据库的完整性静态列级约束对数据类型、格式、取值范围、空值以及其他约束静态元组约束例如发货量=订货量静态关系约束实体完整性参照完整性函数依赖约束统计约束数据库的完整性动态列级约束修改定义、修改值动态元组约束动态关系约束表5-5数据库的完整性完整性控制定义、检查、维护完整性约束条件立即执行的约束/延迟执行的约束RDBMS在实现参照完整性时需要考虑的几个方面:外码是否可空删除被参照关系元组时的考虑级联、受限、置空值删除修改被参照关系中主码的考虑级联、受限、置空值修改Oracle的完整性控制实体完整性要求主属性非空(primarykey)参照完整性外码(foreignkey)Ondeletecascade关键字:删除被参照元组时,同事删除参照该元组的那些元组。用户自定义完整性NotnullUniquecheck并发控制的含义并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。DBMS的并发控制以事务为单位。通常采用封锁技术。提纲事务概念事务模型事务调度事务隔离性级别事务冲突可串行化事务视图可串行化事务概念事务定义事务是由一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单位例如银行转帐SQL中事务的定义事务以Begintransaction开始,以Commitwork或Rollbackwork结束Commitwork表示提交,事务正常结束Rollbackwork表示事务非正常结束,撤消事务已做的操作,回滚到事务开始时状态事务概念示例银行转帐:事务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)事务中包含的所有操作要么全做,要么全不做原子性由恢复机制实现一致性(Consistency)事务的隔离执行必须保证数据库的一致性事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态数据库的一致性状态由用户来负责如银行转帐,转帐前后两个帐户金额之和应保持不变(意大利香肠)事务概念隔离性(Isolation)系统必须保证事务不受其它并发执行事务的影响对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行隔离性通过并发控制机制实现持久性(Durability)一个事务一旦提交之后,它对数据库的影响必须是永久的系统发生故障不能改变事务的持久性持久性通过恢复机制实现事务概念活动状态失败状态部分提交状态提交状态中止状态初始状态事务无法继续正常执行事务回滚,数据库恢复到事务开始前状态最后一条语句被执行后成功完成,永久写入数据库事务生命周期图事务概念事务执行模式显式事务以BEGINTRANSACTION开始,以COMMIT或ROLLBACK结束隐含事务事务自动开始,直到遇到COMMIT或ROLLBACK时结束自动事务每个数据操作语句作为一个事务updateSCsetGRADE=GRADE+15事务模型平面事务一层结构BEGINTRAN……COMMIT平面事务的缺点(不能部分回滚)确定旅行路线批量更新如银行结算利息,可以把更新每个帐号作为一个事务,也可以把更新所有帐号作为一个事务北京郑州上海天津济南事务模型保存点begin_transaction()S1;sp1:=create_savepoint();…Sn;spn:=create_savepoint();…if(condition){rollback(spi);…}…commit();事务模型嵌套事务事务中包含事务T1T2T7T4T8T5T3T6T1北京上海T2北京天津T3天津上海T5天津济南T6济南上海T4天津上海T7天津郑州T8郑州上海事务模型分布式事务tx_begin();…executeT1…executeT2…executeT3…tx_commit();DBMSDBMSDBMSSiteBSiteCSiteDSiteA事务模型工作流工作流是一个,它涉及由不同的处理实体所执行的多个任务的相互协同的执行事务模型TakeOrderUpdateRemovePackageArrangeShippingByAirByLandCompleteBillANDOR事务调度事务的执行顺序称为一个调度,表示事务的指令在系统中执行的时间顺序一组事务的调度必须保证包含了所有事务的操作指令一个事务中指令的顺序必须保持不变串行调度在串行调度中,属于同一事务的指令紧挨在一起对于有n个事务的事务组,可以有n!个有效调度并行调度在并行调度中,来自不同事务的指令可以交叉执行当并行调度等价于某个串行调度时,则称它是正确的事务调度并行Vs串行基本比较并行事务会破坏数据库的一致性串行事务效率低并行的优点一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量系统中存在着周期不等的各种事务,串行会导致难于预测的时延。如果各个事务所涉及的是数据库的不同部分,采用并发会减少平均响应时间事务调度事务执行示例T1read(A);A:=A50;write(A);read(B);B:=B+50;write(B);T2read(A);temp:=A0.1A:=Atemp;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:=A50;write(A);read(B);B:=B+50;write(B);read(A);temp:=A0.1A:=Atemp;write(A);read(B);B:=B+temp;write(B);T1T2A=950¥B=2050¥结束状态:A=855¥B=2145¥A+B=3000¥串行调度1事务调度read(A);A:=A50;write(A);read(B);B:=B+50;write(B);read(A);temp:=A0.1A:=Atemp;write(A);read(B);B:=B+temp;write(B);T1T2A=900¥B=2100¥结束状态:A=850¥B=2150¥A+B=3000¥串行调度2事务调度read(A);A:=A50;write(A);read(B);B:=B+temp;write(B);T1T2A=950¥B=2000¥结束状态:A=855¥B=2145¥A+B=3000¥read(B);B:=B+50;write(B);read(A);temp:=A0.1A:=Atemp;write(A);A=855¥B=2000¥A=855¥B=2050¥并行调度3事务调度可恢复调度事务的恢复:一个事务失败了,应该能够撤消该事务对数据库的影响。如果有其它事务读取了失败事务写入的数据,则该事务也应该撤消read(A);write(A);T1T2read(B);rollback;read(A);commit不可恢复的调度可恢复调度对于每对事务T1与T2,如果T2读取了T1所写的数据,则T1必须先于T2提交事务调度无级联调度级联调度由于一个事务故障而导致一系列事务回滚read(A);read(B);write(A);T1T2read(A)write(A);T3read(A)rollback;无级联调度对于每对事务T1与T2,如果T2读取了T1所写的数据,则T1必须在T2读取之前提交无级联调度必是可恢复调度事务隔离性级别:丢失修改read(A);A:=A50;B:=B+temp;write(B);T1T2A=1000¥B=2000¥结束状态:A=950¥B=2100¥A+B=3050¥write(A);read(B);B:=B+50;write(B);read(A);temp:=A0.1A:=Atemp;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);T1T2A=1000¥B=2000¥read(A);A:=A50;write(A);并行调度5事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据与数据库中数据不一致,则T2读到的数据就是脏数据事务隔离性级别:不能重复读read(A);A1:=AT1T2A=1000¥B=2000¥read(A);A:=A50;write(A);read(B);B:=B+50;write(B);read(B);B1:=BA1+B1=3050A=950¥B=2050¥并行调度6事务T1读取某一数据后,事务T2对其做了修改,当T1再次读取该数据时,得到与前次不同的值事务隔离性级别:发生幻象select*fromSCwhereCNO=C01andSNO=S01T1T2发生幻象insertintoSCvalues(S01,C01,null)事务隔离性级别SQL中隔离性级别的定义serializable:一个调度的执行必须等价于一个串行调度的结果repeatableread:只允许读取已提交的记录,并要求一个事务对同一记录的两次读取之间,其它事务不能对该记录进行更新readcommitted:只允许读取已提交的记录,但不要求可重复读readuncommitted:允许读取未提交的记录冲突可串行化指令的顺序考虑一个调度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指令时,则称这两条指令是冲突的如在②、③、④情况下,Ii与Ij是冲突的非冲突指令交换次序不会影响调度的最终结果冲突等价如果调度S可以经过一系列非冲突指令交换转换成调度S',则称调度S与S'是冲突等价的冲突可串行化read(A);write(A);read(B);write(B);T1T2read(B);write(B);并行调度3read(A);write(A);read(A);write(A);read(B);write(B);T1T2write(B);read(A);write(A);read(B);read(A);write(A);re
本文标题:视图可串行化
链接地址:https://www.777doc.com/doc-3697732 .html