第5章 数据库保护 之事务.

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

数据库完整性 第 10 章 完整性约束条件 完整性控制 Oracle 的完整性. 什么是数据库的完整性  数据的正确性和相容性  防止不合语义的数据进入数据库 例 : 学生的年龄必须是整数,取值范围为 ; 学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在的系必须是学校开设的系。
2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
教学网站: 数据库及应用 授课教师:岳静 Tel: 教学网站:
图 书 馆 导 引.
行政法 之 行政救济篇.
第2章 資料庫系統 2-1 資料庫環境的四大組成元件 2-2 ANSI/SPARC的三層資料庫系統架構
SQL的简单查询.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
数据库系统概论 华中科技大学能源与动力工程学院
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
复习重点; 1. 关系模型、ER模型 2. SQL 3. 事务管理 4. 函数依赖与规范化 5. 数据库设计  复习题 一、单项选择题
第10章 并发控制技术 10.1 并发控制概述 10.2 并发控制的正确性准则 10.3 加锁协议 10.4 死锁的检测、处理和预防
Access数据库程序设计 总复习.
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第八課 蓼莪.
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
数据库原理及应用 第10章 事务与锁 10.1 事务 10.2 锁.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
数据库原理与SQL Server 第9章 保证数据完整性.
第7章 事务管理 事务管理(transaction management): 恢复——保证事务在并发执行时满足ACID准则的技术。
软件设计师培训.
计算机应用基础 上海大学计算中心.
資料庫管理 資管二 賴柏融.
并发控制 讲授者:李川.
数据库原理 Database Principles 第五章 数据库完整性 Database Principles.
走自立自强之路 自己的事情自己做.
人類的循環系統.
第四章 关系系统及其查询优化 这一章包括两个内容,一是关系系统(关系数据库系统的简称),二是关系系统的查询优化。第一部分讨论关系系统的定义和分类;第二部分讨论关系系统中查询优化的概念、查询优化的基本原理和技术。
数据库技术 第十章 数据库完整性 中国科学技术大学网络学院 阚卫华.
第 8 章 資料的 新增、修改與刪除.
課程名稱:資料庫系統 授課老師:李春雄 博士
解振宇 客户技术经理 客户售前技术部 微软中国有限公司广州办事处
实验二 交互式SQL 邓云.
数据库技术 第三章 关系数据库标准语言SQL 中国科学技术大学网络学院 阚卫华.
第4章 SQL语言基础及数据库定义 4.1 基本概念 4.2 SQL Server 提供的主要数据类型 4.3 数据定义.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
第三章 关系数据库标准查询语言SQL 3.1 SQL概述 3.2数据定义语言(DDL) 3.3 SQL的数据查询(DML)
第 7 章 建立資料表與 資料庫圖表.
課程名稱:資料庫系統 授課老師:李春雄 博士
5 数据库管理与保护 数据库运行的最小逻辑工作单位是事务,所有对数据库的操作,都以事务作为一个整体来执行或撤销。
第三章:包   包(package)是一个可以将相关对象存储在一起的PL/SQL结构。包包含了两个分离的部件------包说明(specification)和包主体(body)。每个部件都单独被存储在数据字典中。包只能存储在数据库中,不能是本地的。除了可以将相关对象作为一组存在一起以外,包也是十分有用的,因为它们在依赖性方面的限制是比较小的。也有许多性能上的优点。
第9章 事务.
SQL SERVER 一些经典语句 1.
刘红岩 清华大学 管理科学与工程系 第17章 事务管理 刘红岩 清华大学 管理科学与工程系
作业3-点评.
Ch4.SQL Server 2005資料庫組成員元件介紹
分布式数据库系统及其应用.
实验二讲评 … 张榆….
数据库技术.
数据库技术与应用.
第3章 关系数据库的创建与维护 Microsoft SQL Server2008 概述 SQL Server数据库基础 数据库的创建与维护
第11章 事务与锁 11.1 事务Transact 11.2 数据并发的问题 11.3 锁Lock 11.4 事务隔离级别.
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
An Introduction to Database System An Introduction to Database System
SQL查询语句 蔡海洋.
17 交易處理與鎖定 17-1 交易的基礎 17-2 交易處理 17-3 並行控制 17-4 資料鎖定 17-5 死結問題.
An Introduction to Database System
第三章 SQL Server数据管理.
第 7 章 建立資料表與資料庫圖表.
課稅負擔的歸屬.
黎明职业大学图书馆使用指南 1.图书馆概况 2.图书馆布局 3.图书馆提供的服务 4.反对不文明现象.
第4章 数据查询.
第8章 并发控制 概述 封锁 封锁协议 活锁和死锁 并发调度的可串行性 两段锁协议 封锁的粒度 Oracle的并发控制 2019/11/20
Presentation transcript:

第5章 数据库保护 之事务

数据库的安全性 安全性的含义: 安全性控制的方法: 数据库的安全性是指保护数据库,防止因用户非法适用数据库造成数据泄露、更改或破坏。 用户标识和鉴定 存取控制 定义视图 审计 数据加密

数据库的完整性 完整性的含义: 完整性约束条件分为6类- 图5-3 数据库的完整性是指保护数据库中数据的正确性、有效性(相容性)和一致性,防止错误的数据进入数据库造成无效操作。 完整性约束条件分为6类- 图5-3 对象粒度:列级、元组级、关系级 状态: 动态:反映数据库状态变迁的约束 静态:反映数据库状态合理性的约束

数据库的完整性 静态列级约束 静态元组约束 静态关系约束 对数据类型、格式、取值范围、空值以及其他约束 例如发货量 <= 订货量 实体完整性 参照完整性 函数依赖约束 统计约束

数据库的完整性 动态列级约束 修改定义、修改值 动态元组约束 动态关系约束 表5-5

数据库的完整性 完整性控制 立即执行的约束/延迟执行的约束 RDBMS在实现参照完整性时需要考虑的几个方面: 定义、检查、维护完整性约束条件 外码是否可空 删除被参照关系元组时的考虑 级联、受限、置空值删除 修改被参照关系中主码的考虑 级联、受限、置空值修改

Oracle的完整性控制 实体完整性 参照完整性 用户自定义完整性 要求主属性非空(primary key) 外码(foreign key) On delete cascade关键字:删除被参照元组时,同事删除参照该元组的那些元组。 用户自定义完整性 Not null Unique check

并发控制的含义 并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。 DBMS的并发控制以事务为单位。通常采用封锁技术。

提纲 事务概念 事务模型 事务调度 事务隔离性级别 事务冲突可串行化 事务视图可串行化

事务概念 事务定义 事务是由一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单位 例如银行转帐 SQL中事务的定义 事务以Begin transaction开始,以Commit work或 Rollback 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) 事务中包含的所有操作要么全做,要么全不做 原子性由恢复机制实现 一致性(Consistency) 事务的隔离执行必须保证数据库的一致性 事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态 数据库的一致性状态由用户来负责 如银行转帐,转帐前后两个帐户金额之和应保持不变(意大利香肠)

事务概念 隔离性(Isolation) 系统必须保证事务不受其它并发执行事务的影响 对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行 隔离性通过并发控制机制实现 持久性(Durability) 一个事务一旦提交之后,它对数据库的影响必须是永久的 系统发生故障不能改变事务的持久性 持久性通过恢复机制实现

事务概念 事务生命周期图 活动状态 失败状态 部分 提交状态 中止状态 初始状态 事务无法继 续正常执行 事务回滚,数据库恢 复到事务开始前状态 最后一条语 句被执行后 成功完成,永 久写入数据库 事务生命周期图

update SC set GRADE = GRADE+15 事务概念 事务执行模式 显式事务 以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束 隐含事务 事务自动开始,直到遇到COMMIT或ROLLBACK时结束 自动事务 每个数据操作语句作为一个事务 update SC set GRADE = GRADE+15

事务模型 平面事务 平面事务的缺点(不能部分回滚) 一层结构BEGIN TRAN……COMMIT 确定旅行路线 批量更新 如银行结算利息,可以把更新每个帐号作为一个事务,也可以把更新所有帐号作为一个事务 北京 郑州 上海 天津 济南

事务模型 保存点 begin_transaction() S1; sp1 := create_savepoint(); … Sn; spn := create_savepoint(); if(condition){ rollback(spi); } commit();

事务模型 嵌套事务 事务中包含事务 北京 上海 北京 天津 天津 上海 天津 济南 济南 上海 天津 上海 天津 郑州 郑州 上海 T1

事务模型 分布式事务 tx_begin(); … execute T1 DBMS execute T2 execute T3 tx_commit(); DBMS Site B Site C Site D Site A

事务模型 工作流 工作流是一个,它涉及由不同的处理实体所执行的多个任务的相互协同的执行

事务模型 Take Order Update Remove Package Arrange Shipping By Air Land Complete Bill AND OR

事务调度 事务的执行顺序称为一个调度,表示事务的指令在系统中执行的时间顺序 一组事务的调度必须保证 串行调度 并行调度 包含了所有事务的操作指令 一个事务中指令的顺序必须保持不变 串行调度 在串行调度中,属于同一事务的指令紧挨在一起 对于有n个事务的事务组,可以有n!个有效调度 并行调度 在并行调度中,来自不同事务的指令可以交叉执行 当并行调度等价于某个串行调度时,则称它是正确的

事务调度 并行 Vs 串行 基本比较 并行的优点 并行事务会破坏数据库的一致性 串行事务效率低 一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量 系统中存在着周期不等的各种事务,串行会导致难于预测的时延。如果各个事务所涉及的是数据库的不同部分,采用并发会减少平均响应时间

事务调度 事务执行示例 T2 read(A); T1 temp := A0.1 read(A); A := A  temp; 的10%到B 开始状态: A=1000¥ B=2000¥ A+B=3000¥ 从A过户 50¥到B T2 read(A); temp := A0.1 A := A  temp; write(A); read(B); B := B + temp; write(B); T1 read(A); A := A  50; write(A); read(B); B := B + 50; write(B);

事务调度 T1 T2 read(A); read(A); write(A); 串 A := A  50; 行 write(A); 调 read(B); B := B + 50; write(B); 串 行 调 度 1 read(A); temp := A0.1 A := A  temp; write(A); read(B); B := B + temp; write(B); A=950¥ B=2050¥ 结束状态: A=855¥ B=2145¥ A+B=3000¥

事务调度 T1 T2 read(A); write(A); read(A); 串 temp := A0.1 行 A := A  temp; write(A); read(B); B := B + temp; write(B); 串 行 调 度 2 read(A); A := A  50; write(A); read(B); B := B + 50; write(B); A=900¥ B=2100¥ 结束状态: A=850¥ B=2150¥ A+B=3000¥

事务调度 T1 T2 read(A); read(A); write(A); 并 A := A  50; 行 write(A); 调 度 3 A=950¥ B=2000¥ read(A); temp := A0.1 A := A  temp; write(A); A=855¥ B=2000¥ read(B); B := B + 50; write(B); A=855¥ B=2050¥ 结束状态: A=855¥ B=2145¥ A+B=3000¥ read(B); B := B + temp; write(B);

事务调度 可恢复调度 事务的恢复:一个事务失败了,应该能够撤消该事务对数据库的影响。如果有其它事务读取了失败事务写入的数据,则该事务也应该撤消 不可恢复的调度 T1 T2 可恢复调度 对于每对事务T1与T2,如果T2读取了T1所写的数据,则T1必须先于T2提交 read(A); write(A); read(A); commit read(B); rollback;

事务调度 T1 T2 T3 无级联调度 级联调度 无级联调度 由于一个事务故障而 导致一系列事务回滚 无级联调度 对于每对事务T1与T2, 如果T2读取了T1所写 的数据,则T1必须在 T2读取之前提交 read(A); read(B); write(A); T1 T2 read(A) T3 rollback; 无级联调度必是可恢复调度

事务隔离性级别:丢失修改 T1 T2 read(A); read(A); write(A); read(B); write(A); 并 A := A  50; 并 行 调 度 4 A=1000¥ B=2000¥ read(A); temp := A0.1 A := A  temp; write(A); read(B); 两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改丢失 A=900¥ B=2000¥ write(A); read(B); B := B + 50; write(B); A=950¥ B=2000¥ A=950¥ B=2050¥ 结束状态: A=950¥ B=2100¥ A+B=3050¥ B := B + temp; write(B);

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

事务隔离性级别:不能重复读 T1 T2 read(A); write(A); read(B); 并 A1 := A 行 调 度 6 A=1000¥ B=2000¥ read(A); A := A  50; write(A); read(B); B := B + 50; write(B); 事务T1读取某一数据后,事务T2对其做了修改,当T1再次读取该数据时,得到与前次不同的值 read(B); B1 := B A1+B1=3050 A=950¥ B=2050¥

事务隔离性级别:发生幻象 T1 T2 select * insert into SC from SC where CNO = C01 and SNO = S01 insert into SC values(S01, C01, null)

事务隔离性级别 SQL中隔离性级别的定义 serializable:一个调度的执行必须等价于一个串行调度的结果 repeatable read:只允许读取已提交的记录,并要求一个事务对同一记录的两次读取之间,其它事务不能对该记录进行更新 read committed:只允许读取已提交的记录,但不要求可重复读 read uncommitted:允许读取未提交的记录

冲突可串行化 指令的顺序 考虑一个调度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'是冲突等价的

冲突可串行化 T1 T2 T1 T2 并 行 调 度 3 read(A); write(A); read(A); write(A); read(B); read(B); write(B); write(A); 1 write(B); read(B); write(B); read(B); write(B); read(A); write(A); read(B); write(B); read(A); write(A); read(B); read(A); write(A); 2 3 read(A); write(A); write(B); read(B); write(B); read(B); write(B);

冲突可串行化 T1 T2 冲突可串行化 当一个调度S与一个串行调度冲突等价时,则称该调度是冲突可串行化的 如并行调度3是冲突可串行化的 read(A); T1 T2 write(A); 非冲突串行化的例子: 存在结果相同,但非冲突等价的调度

冲突可串行化 T1 T2 T1 T2 read(A); A := A - 50 write(A); read(A); A := A - 50 read(B); B := B + 50 write(B); A=950¥ B=2000¥ read(B); B := B - 10 write(B); A=950¥ B=1990¥ A=950¥ B=2050¥ 冲突指令 read(B); B := B + 50 write(B); read(B); B := B - 10 write(B); read(A); A := A + 10 write(A); A=950¥ B=2040¥ read(A); A := A + 10 write(A); A=960¥ B=2040¥ A=960¥ B=2040¥

冲突可串行化判定 优先图(precedence graph) 一个调度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 T1 T2 T2 T1 T2 T1 write(A); write(A); write(A); 并 行 调 度 3 read(A); write(A); read(A); 并 行 调 度 4 read(A); write(A); read(B); read(A); write(A); read(B); write(B); write(A); read(B); write(B); read(B); write(B); write(B); T2 T1 T2 T1

冲突可串行化判定 T2 T1 T2 T1 如果优先图中存在边TiTj ,则在任何等价于S的串行调度S'中,Ti都必须出现在Tj之前 冲突可串行化判定准则 如果调度S的优先图中有环,则调度S是非冲突可串行化的。如果图中无环,则调度S是冲突可串行化的 T2 T1 T2 T1 并行调度3是冲 突可串行化的 并行调度4是非 冲突可串行化的

冲突可串行化判定 T1 T1 T2 T3 T4 T2 T3 T1 T3 T2 T4 T4 与冲突可串行化等价的串行顺序 串行顺序可由拓扑排序得到,求出与优先图的偏序相一致的线序 T1 T1 T2 T3 T4 T2 T3 T1 T3 T2 T4 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)

视图可串行化 T1 T1 T2 T2 read(A); read(A); write(A); write(A); write(A); 注:条件①、②保证两个调度中的每个事务都读取相同的值,从而进行相同的计算 条件①、②、③保证两个调度得到最终相同的系统状态 T1 T2 T1 T2 视图等价 read(A); write(A); read(B); write(B); read(A); write(A); read(A); write(A); 由T1产生的A值 read(A); write(A); read(B); write(B); read(B); write(B); 由T1产生的A值 read(B); write(B);

视图可串行化 T1 T1 T2 T2 read(A); write(A); write(A); read(A); write(A); 非视图等价 read(A); write(A); read(B); write(B); read(A); write(A); read(B); write(B); 调度执行前的A值 read(A); write(A); read(B); write(B); read(A); write(A); read(B); write(B); 由T1产生的A值

视图可串行化 T1 T2 T3 视图可串行化 如果某个调度视图等价于一个串行调度,则称该调度是视图可串行化的 冲突可串行化调度一定是视图可串行化的 存在视图可串行化但非冲突可串行化的调度 T1 T2 T3 视图等价 read(Q); < T1, T2, T3 > write(Q); write(Q); write(Q); 盲目写操作

视图可串行化判定 T1 T2 T3 T2 T1 T3 read(Q); write(Q); write(Q); write(Q); 非冲突可串行化 无用的写操作

视图可串行化判定 带标记的优先图的构造 设调度S包含了事务{T1, T2, … , Tn},设Tb, Tf是两个虚事务,其中Tb为S中所有write(Q)操作, Tf为S中所有read(Q)操作。在调度S的开头插入Tb ,在调度S的末尾插入Tf,得到一个新的调度S' ①如果Tj读取Ti写入的数据项的值,则加入边Ti Tj ②删除所有关联无用事务的边。如果在优先图中不存在从Ti到Tf的通路,则Ti是无用事务 ③对于每个数据项Q,如果Tj读取Ti读取写入的Q值, Tk执行write (Q)操作且Tk≠Tb ,则:

视图可串行化判定 ⒈如果Ti = Tb且Tj≠Tf,则在带标记的优先图中插入边Tj Tk ⒉如果Ti≠Tb且Tj = Tf,则在带标记的优先图中插入边Tk Ti ⒊如果Ti≠Tb且Tj≠Tf,则在带标记的优先图中插入边Tk Ti与Tj Tk 。其中p是一个唯一的,在前面边的标记中未曾用过的大于0的整数

视图可串行化判定 T1 T1 T2 read(A); Tb Tf write(A); write(A); T2

视图可串行化判定 T1 T1 T2 T3 Tb T2 Tf T3 read(Q); write(Q); write(Q); read(Q); Tb T2 Tf write(Q); write(Q); write(Q); T3

视图可串行化判定 T1 T1 T2 T3 Tb T2 Tf T3 read(Q); write(Q); read(Q); write(Q); 1 1 read(Q); Tb T2 Tf write(Q); read(Q); write(Q); write(Q); T3

判定准则:只要有一个优先图无环,则调度是视图可串行化的 视图可串行化判定 T1 T1 1 Tb Tb T2 Tf T2 Tf 1 T3 T3 每个优先图包含标号大于1的边对中的一条 判定准则:只要有一个优先图无环,则调度是视图可串行化的