第12章 事务处理与并发控制

上传人:资****亨 文档编号:133876666 上传时间:2020-05-31 格式:PPT 页数:38 大小:119KB
返回 下载 相关 举报
第12章 事务处理与并发控制_第1页
第1页 / 共38页
第12章 事务处理与并发控制_第2页
第2页 / 共38页
第12章 事务处理与并发控制_第3页
第3页 / 共38页
第12章 事务处理与并发控制_第4页
第4页 / 共38页
第12章 事务处理与并发控制_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《第12章 事务处理与并发控制》由会员分享,可在线阅读,更多相关《第12章 事务处理与并发控制(38页珍藏版)》请在金锄头文库上搜索。

1、 1 第12章事务处理与并发控制 2 主要内容 12 1概述12 2事务管理技术12 3事务的ACID属性12 4并发控制 3 12 1概述 并发性就是两个或两个以上的用户同时对一个数据执行的操作 并发性问题就是并发操作时遇到的各种问题 OracleDatabase10g系统在解决并发性问题时采取了事务处理和锁定机制 事务处理和锁是两个紧密联系的概念 事务就是一个单元的工作 包括一系列的操作 这些操作要么全做 要么全不做 事务确保多个数据的修改作为一个单元来处理 例如 在银行业务中 有一条记帐原则 即有借必有贷 借贷必相等 因此 为了保证这种原则 就得有确保借和贷的登记要么同时成功 要么同时失

2、败 如果出现只记录了借 或只记录了贷 那么就违反了记帐原则 就会出现记错帐的情况 Oracle通过支持事务机制管理多个事务 保证事务的一致性 事务使用锁 防止其它用户修改另外一个还没有完成的事务中的数据 对于多用户系统来说 锁定机制是必须的 12 2数据库的事务 以第一个DML语句的执行作为开始以下面之一作为结束 COMMIT或ROLLBACK语句DDL或DCL语句 自动提交 用户会话正常结束系统异常终了 5 一个事务的生命周期包括 事务开始 事务执行和事务结束 在Oracle中 并不会显式声明事务的开始 而是由Oracle自行处理 事务的结束可以利用commit或者rollback命令 Or

3、acle提供了许多事务处理控制语句 主要的事务处理控制语句包括 commit rollback savepoint rollbacktosavepoint settransaction以及setconstraints语句等 6 1 Commit的处理 在事务处理的最简单的形式中 用户只需使用SQL的commit命令即可 提交会结束用户的事务处理 并且使用户已经执行的任何改变永久生效 作为开发人员 用户应该使用commit或rollback显式终止用户的事务处理 否则用户正在使用的工具或环境就将为用户选择其中的一种方式 例如 如果用户没有进行提交或回滚就退出了用户的SQL Plus会话 那么SQ

4、L Plus就会认为用户希望提交用户工作 无论用户是否想要提交工作 系统都会为用户进行提交 Commit事务提交命令 Oracle在内存中将为每个客户机建立工作区 客户机对数据库进行操作处理的事务都在工作区内完成 只有在输入commit命令后 工作区内的修改内容才写入到数据库上 称为物理写入 这样可以保证在任意的客户机没有物理提交修改以前 别的客户机读取的后台数据库中的数据是完整的 一致的 8 Commit时执行的任务 为用户的事务处理申请SCN systemchangenumber 系统改变编号 这是Oracle的内部时钟 可以称为数据库时间 SCN不是传统意义上的时钟 因为它不是随着时间推

5、移而递进 相反 他是在事务处理提交时递进 由Oracle在内部使用 以对事务处理排序 将所有剩余的已经缓冲的重做日志表项写入磁盘 并且将SCN记录到在线重做日志文件中 这要由数据库后台进程LGWR执行 这一步实际上就是所谓的 提交 使事务处理永久生效 释放用户会话所占有的所有锁定 9 2 rollback处理 回滚可以允许用户撤销其工作 当应用中出现错误 或运行程序的终端用户决定不保存其所做的改变时 可能需要进行回滚 如果不能够回滚错误或用户命令 就无法支持数据库中的事务处理 在回滚处理最简单的形式中 只需使用rollback 回滚可以终止用户的事务处理 并且撤销用户已经进行的所有改变 完成这

6、项工作需要读取用户存储在回滚段或undo表空间中的信息 将数据库恢复到用户事务处理开始之前的状态 与提交不同 回滚事务处理的时间是所改变数据量的函数 这是可以预料的 因为回滚必须在物理上撤销用户已经完成的工作 ORACLE事务控制 回退段 ORACLE为了适应事务控制设置了回退段这一数据库对象 系统利用回退段来确保诸如读一致性 数据库恢复等管理功能 ORACLE在缺省情况下 读数据不加锁 通过回退段 RollbackSegment 保证用户不读脏数据和可重复读 表空间中的数据按段来组织 数据段 索引段 暂存段和回退段 回退段是一块磁盘存储区域 回退段可以由用户创建 但只能由系统进程使用 3 自

7、动提交的事务 当执行DDL语句时会自动提交事务 当执行DCL语句 grantrevoke 当退出SQL Plus时 12 4 savepoint和rollbacktosavepoint savepoint允许用户在事务处理中建立标记点 用户可以在单独的事务处理中拥有多个保存点 当使用rollbacktosavepoint时 就可以让用户有选择地回滚更大的事务处理中的一组语句 用户可以将事务处理回滚到标记点 但是不回滚它们之间的任何工作 例 用户可以使用两个update语句 然后再使用一个savepoint 在savepoint之后 用户可以使用两个delete语句 当遇到某种类型的错误时 用户

8、就可以回滚到指定的savepoint处 这将会撤销delete语句 但是却不会撤销以前的两个update语句 应该注意到 rollbacktosavepoint只会撤销用户所做的一部分工作 直到用户使用了commit或rollback时 用户的事务处理才会结束 保存点是很有用的事务处理特性 它们可以让用户将单独的大规模事务处理分割成一系列较小的部分 13 5 settransaction settransaction语句可以使用户设置事务处理的各种属性 例如 它的隔离层次 它是只读的还是可以进行读写的 是否需要使用特定的回滚段等 settransaction语句必须是事务处理中第一个使用的语句

9、 也就是说 必须在任何insert update或delete语句以及任何其他可以开始事务处理的语句之前使用它 settransaction语句的作用域只是当前的事务处理 只要用户进行了提交或回滚 settransaction语句的结果才会完整 settransactionreadonlysettransactionreadwritesettransactionisolationlevelserializablesettransactionisolationlevelreadcommitted 14 readonly 使用settransactionreadonly命令可以完成两件事情 第一

10、它会确保用户无法执行修改数据的DML操作 例如 insert update或delete 如果执行了这样的操作 则系统就会发出错误消息 readonly事务处理的另外一个作用是 通过将事务处理设置为readonly 用户就可以有效地将其数据库视图冻结到某个时间点 也就是说 无论数据库中的其它会话如何工作 数据库在用户的前面都会是使用settransaction语句时的样子 15 readwrite readwrite是系统的默认设置 因此很少有人使用settransactionreadwrite命令 因为该命令的行为就是用户通常操作的行为 16 isolationlevelserializab

11、le settransactionisolationlevelserralizable与readonly有类似的地方 当使用了该命令之后 无论是否出现改变 数据库都会被冻结 如同用户在readonly事务处理中看到的那样 因此可以完全隔离其他事务处理的影响 用户可以看到自己进行的改变 但是不会出现其他用户的改变 17 isolationlevelreadcommitted settransactionisolationlevelreadcommitted命令相当于事务处理设置为readwrite 由于它是设置隔离层次时Oracle的默认操作模式 所以很少使用 如果用户在会话前面使用alters

12、ession命令 将用户会话的事务处理的默认隔离层次从readcommitted改变为serializable 那么就可能会用到这个命令 使用isolationlevelreadcommitted命令可以重置默认值 18 setconstraint 在Oracle中 约束可以在DML语句执行之后立即生效 也可以延迟到事务处理提交时才生效 setconstraint语句可以允许用户在事务处理中设置延迟约束的强制模式 可以使用下面的语法格式延迟单独的约束 setconstraintconstraint namedeferred也可以使用如下的语法格式延迟所有的约束 setconstraintall

13、deferred 19 12 3事务的ACID属性 ACID是原子性 Atomicity 一致性 Consistency 隔离性 Isolation 和持久性 Durability 的首字母缩写 原子性表示事务处理要么全部进行 要么全部不进行 一致性表示事务处理要将数据库从一种状态转变为另一种状态 隔离性表示在事务处理提交之前 事务处理的效果不能由系统中其他事务处理看到 持久性表示一旦提交了事务处理 它就永久生效 ACID特性描述了事务处理的规则 下面详细介绍事务的这些属性 20 原子性 在Oracle系统中 事务处理具有原子性 换句话说 或者提交所有的工作 或者什么工作都不提交 21 一致性

14、 这是非常重要的事务处理特性 任何事务处理都会将数据库从一种逻辑上的一致状态转变为另一种逻辑上的一致状态 这就是说 在事务处理开始之前 数据库中的所有数据都会满足已经施加给数据库的业务规则 约束 与此相似 当提交了事务处理之后 数据库仍然会满足施加的所有业务规则 22 隔离性 隔离性是数据库允许对其中数据进行并发修改和读取的能力 隔离性不仅可用于防止其他事务处理受到当前事务处理的干扰 而且也可以防止当前事务处理受到其他事务处理的干扰 当其他用户不能看到当前的改变时 当前的用户也不能够看到其他用户的改变 考虑这样的一种情况 如果正在更新表中的一行数据 没有提交 假设当前用户可以读取包含了已改变的

15、行数据 没有提交 那么就可能导致当前用户根据错误的 不完整的或者没有保存 可能会回滚当前用户读取的改变 的信息做出错误的决策 所以 数据库能够防止这种情况的出现是非常重要的 23 隔离层次 24 持久性 持久性是数据库提供的最重要的特性之一 它可以确保一旦事务处理提交之后 它的改变就会永久生效 它们不会由于系统故障或错误而消失 数据库通过在线重做日志 也称为事务处理日志 确保当系统发生故障或崩溃时 提供复原数据所需的全部信息 当用户在数据库中通过insert update和delete语句修改数据时 Oracle将会生成两种重要的信息 undo和redo undo可以用于撤销或回滚事务处理的工

16、作 而redo用于重做这些工作 undo的目的很清楚 它类似于字处理程序中的恢复或撤销功能 相对来说 redo的目的比较模糊 为什么要重做事务处理呢 持久性 也就是说 为了确保出现系统故障时 用户能够恢复事务处理 25 12 4并发控制 如何最大化并发访问的效率 如何确保每个用户都能在一致的方式下读取和修改数据 这些都是需要通过并发控制解决的问题 锁 lock 是用来控制共享资源并发访问的机制 这里使用了共享资源 没有使用数据库行或数据库表 Oracle不仅可以在行级别上锁定表数据 而且还可以在许多不同的层次上使用锁定 提供对各种资源的并发访问 例如 当执行存储过程时 过程本身就会处于锁定模式 允许其他用户执行它 但是不允许另外的用户采用任何方式改变它 在数据库中 可以使用锁来控制这些共享资源进行并发访问 同时提供数据完整性和一致性 26 1 ORACLE的锁机制 设立封锁机制主要是为了对并发操作进行控制 对干扰进行封锁 保证数据的一致性和准确性 OracleRDBMS的封锁类型可分为如下三类 内部级封锁内部级封锁是用于保护ORACLE内部结构 由系统内部实现 用户不能访问 因此我们不

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号