oracle事物acid基本概念理解,第15章 事务处理和并发控制.ppt

第1页 第15章事务处理和并发控制 本章概述本章要点教学过程 第2页 本章概述 并发性是一个非常重要的概念 是用来解决多个用户对同一数据进行操作的问题 特别是对于分布式数据库来说 这个特点更加突出 提高数据库的处理速度 仅依靠提高计算机的物理速度是不够的 还必须充分考虑数据库的并发性问题 提高数据库并发的效率 OracleDatabase10g系统通过使用事务和锁机制 解决了数据库的并发性问题 本章将全面阐述Oracle的并发性技术 第3页 本章要点 了解并发性的基本概念理解事务处理的特点掌握事务管理技术理解事务的ACID属性掌握并发控制技术理解悲观锁定和乐观锁定的概念 第4页 教学过程 15 1概述15 2事务管理技术15 3事务的ACID属性15 4并发控制 第5页 教学过程 15 1概述15 2事务管理技术15 3事务的ACID属性15 4并发控制 第6页 15 1概述 并发性就是两个或两个以上的用户同时对个数据执行的操作 并发性问题就是并发操作时遇到的各种问题 OracleDatabase10g系统在解决并发性问题时采取了事务处理和锁定机制 事务处理和锁是两个紧密联系的概念 事务就是一个单元的工作 包括一系列的操作 这些操作要么全部成功 要么全部失败 事务确保多个数据的修改作为一个单元来处理 例如 在银行业务中 有一条记帐原则 即有借必有贷 借贷必相等 因此 为了保证这种原则 就得有确保借和贷的登记要么同时成功 要么同时失败 如果出现只记录了借 或只记录了贷 那么就违反了记帐原则 就会出现记错帐的情况 Oracle通过支持事务机制管理多个事务 保证事务的一致性 事务使用锁 防止其它用户修改另外一个还没有完成的事务中的数据 对于多用户系统来说 锁定机制是必须的 第7页 教学过程 15 1概述15 2事务管理技术15 3事务的ACID属性15 4并发控制 第8页 15 2事务管理技术 Oracle中的一个重要概念就是没有 开始事务处理 的语句 用户不能显式地开始一个事务处理 事务处理会隐式地开始与第一条修改数据的语句 或者一些要求事务处理的场合 使用commit或rollback语句将会显式地终止事务处理 事务处理具有原子性 即要么所有的语句都成功执行 要么所有语句都不能成功执行 Oracle提供了许多事务处理控制语句 用户可以用这些语句来控制这种行为 主要的事务处理控制语句包括 commit rollback savepoint rollbacktosavepoint settransaction以及setconstraints语句等 第9页 commit处理 在事务处理的最简单的形式中 用户只需使用SQL的commit命令即可 提交会结束用户的事务处理 并且使用户已经执行的任何改变永久生效 作为开发人员 用户应该使用commit或rollback显式终止用户的事务处理 否则用户正在使用的工具或环境就将为用户选择其中的一种方式 例如 如果用户没有进行提交或回滚就退出了用户的SQL Plus会话 那么SQL Plus就会认为用户希望提交用户工作 无论用户是否想要提交工作 系统都会为用户进行提交 无论事务处理的规模如何 提交都是非常快速的操作 第10页 提交时执行的任务 为用户的事务处理声称SCN systemchangenumber 系统改变编号 这是Oracle的内部时钟 可以称为数据库时间 SCN不是传统意义上的时钟 因为它不是随着时间推移而递进 相反 他是在事务处理提交时递进 由Oracle在内部使用 以对事务处理排序 将所有剩余的已经缓冲的重做日志表项写入磁盘 并且将SCN记录到在线重做日志文件中 这要由数据库后台进程LGWR执行 这一步实际上就是所谓的 提交 使事务处理永久地生效 释放用户会话所占有的所有锁定 第11页 rollback处理 回滚可以允许用户撤销其工作 当应用中出现错误 或运行程序的终端用户决定不保存其所做的改变时 可能需要进行回滚 如果不能够回滚错误或用户命令 就无法支持数据库中的事务处理 在回滚处理最简单的形式中 只需使用rollback 回滚可以终止用户的事务处理 并且撤销用户已经进行的所有改变 完成这项工作需要读取用户存储在回滚段或undo表空间中的信息 将数据库块恢复到用户事务处理开始之前的状态 与提交不同 回滚事务处理的时间是所改变数据量的函数 这是可以预料的 因为回滚必须在物理上撤销用户已经完成的工作 第12页 savepoint和rollbacktosavepoint savepoint可以允许用户在事务处理中建立标记点 用户可以在单独的事务处理中拥有多个保存点 当使用rollbacktosavepoint时 就可以让用户有选择地回滚更大的事务处理中的一组语句 用户可以将事务处理回滚到标记点 但是不回滚它们之间的任何工作 用户可以使用两个update语句 然后再使用一个savepoint 在savepoint之后 用户可以使用两个delete语句 当遇到某种类型的错误时 用户就可以回滚到指定的savepoint处 这将会撤销delete语句 但是却不会撤销以前的两个update语句 应该注意到 rollbacktosavepoint只会撤销用户所做的一部分工作 直到用户使用了commit或rollback时 用户的事务处理才会结束 保存点是很有用的事务处理特性 它们可以让用户将单独的大规模事务处理分割成一系列较小的部分 第13页 settransaction settransaction语句可以使用户设置事务处理的各种属性 例如 它的隔离层次 它是只读的还是可以进行读写的 是否需要使用特定的回滚段等 settransaction语句必须是事务处理中第一个使用的语句 也就是说 必须在任何insert update或delete语句以及任何其他可以开始事务处理的语句之前使用它 settransaction语句的作用域只是当前的事务处理 只要用户进行了提交或回滚 settransaction语句的结果才会完整 settransactionreadonlysettransactionreadwritesettransactionisolationlevelserializablesettransactionisolationlevelreadcommitted 第14页 readonly 使用settransactionreadonly命令可以完成两件事情 第一 它会确保用户无法执行修改数据的DML操作 例如 insert update或delete 如果执行了这样的操作 则系统就会发出错误消息 如图15 1所示的操作示意了这种过程 readonly事务处理的另外一个作用是 通过将事务处理设置为readonly 用户就可以有效地将其数据库视图冻结到某个时间点 也就是说 无论数据库中的其它会话如何工作 数据库在用户的前面都会是使用settransaction语句时的样子 第15页 readwrite readwrite是系统的默认设置 因此很少有人使用settransactionreadwrite命令 因为该命令的行为就是用户通常操作的行为 第16页 isolationlevelserializable settransactionisolationlevelserralizable与readonly有类似的地方 当使用了该命令之后 无论是否出现改变 数据库都会被冻结 如同用户在readonly事务处理中看到的那样 因此可以完全隔离其他事务处理的影响 用户可以看到自己进行的改变 但是不会出现其他用户的改变 第17页 isolationlevelreadcommitted settransactionisolationlevelreadcommitted命令相当于事务处理设置为readwrite 由于它是设置隔离层次时Oracle的默认操作模式 所以很少使用 如果用户在会话前面使用altersession命令 将用户会话的事务处理的默认隔离层次从readcommitted改变为serializable 那么就可能会用到这个命令 使用isolationlevelreadcommitted命令可以重置默认值 第18页 setconstraint 在Oracle中 约束可以在DML语句执行之后立即生效 也可以延迟到事务处理提交时才生效 setconstraint语句可以允许用户在事务处理中设置延迟约束的强制模式 可以使用下面的语法格式延迟单独的约束 setconstraintconstraint namedeferred也可以使用如下的语法格式延迟所有的约束 setconstraintalldeferred 第19页 教学过程 15 1概述15 2事务管理技术15 3事务的ACID属性15 4并发控制 第20页 15 3事务的ACID属性 ACID是原子性 Atomicity 一致性 Consistency 隔离性 Isolation 和持久性 Durability 的首字母缩写 原子性表示事务处理要么全部进行 要么全部不进行 一致性表示事务处理要将数据库从一种状态转变为另一种状态 隔离性表示在事务处理提交之前 事务处理的效果不能由系统中其他事务处理看到 持久性表示一旦提交了事务处理 它就永久生效 ACID特性描述了事务处理的规则 下面详细介绍事务的这些属性 第21页 原子性 在Oracle系统中 事务处理具有原子性 换句话说 或者提交所有的工作 或者什么工作都不提交 下面通过一个示例来介绍原子性的特点 第22页 一致性 这是非常重要的事务处理特性 任何事务处理都会将数据库从一种逻辑上的一致状态转变为另一种逻辑上的一致状态 这就是说 在事务处理开始之前 数据库中的所有数据都会满足已经施加给数据库的业务规则 约束 与此相似 当提交了事务处理之后 数据库仍然会满足施加的所有业务规则 下面通过一个示例来分析临时逻辑不一致的现象 第23页 隔离性 隔离性是数据库允许对其中数据进行并发修改和读取的能力 隔离性不仅可用于防止其他事务处理受到当前事务处理的干扰 而且也可以防止当前事务处理受到其他事务处理的干扰 当其他用户不能看到当前的改变时 当前的用户也不能够看到其他用户的改变 考虑这样的一种情况 如果正在更新表中的一行数据 没有提交 假设当前用户可以读取包含了已改变的行数据 没有提交 那么就可能导致当前用户根据错误的 不完整的或者没有保存 可能会回滚当前用户读取的改变 的信息做出错误的决策 所以 数据库能够防止这种情况的出现是非常重要的 第24页 隔离层次 第25页 持久性 持久性是数据库提供的最重要的特性之一 它可以确保一旦事务处理提交之后 它的改变就会永久生效 它们不会由于系统故障或错误而消失 数据库通过在线重做日志 也称为事务处理日志 可以确保当系统发生故障或崩溃时 能够提供复原数据所需的全部信息 当用户在数据库中通过insert update和delete语句修改数据时 Oracle将会生成两种重要的信息 undo和redo 如同其名称所示那样 undo可以用于撤销或回滚事务处理的工作 而redo可以用于重做这些工作 undo的目的很清楚 它类似于字处理程序中的恢复或撤销功能 相对来说 redo的目的比较模糊 为什么要重做事务处理呢 持久性 也就是说 为了确保出现系统故障时 用户能够恢复事务处理 第26页 教学过程 15 1概述15 2事务管理技术15 3事务的ACID属性15 4并发控制 第27页 15 4并发控制 如何最大化并发访问的效率 如何确保每个用户都能在一致的方式下读取和修改数据 这些都是需要通过并发控制解决的问题 本节主要讨论Oracle如何锁定数据 锁定 lock 是用来控制共享资源并发访问的机制 这里使用了共享资源 没有使用数据库行或数据库表 Oracle不仅可以在行级别上所定表数据 而且还可以在许多不同的层次上使用锁定 提供对各种资源的并发访问 例如 当执行存储过程视 过程本身就会处于锁定模式 允许其他用户执行它 但是不允许另外的用户采用任何方式改变它 在数据库中 可以使用锁来控制这些共享资源进行并发访问 同时提供数据完整性和一致性 第28页 死锁 首先介绍死锁的定义 死锁就是两个会话都进入了彼此等候对方的状态时的一种停止状态 当两个用户占用了两者都希望使用的资源时 就会出现死锁 Oracle处理死锁的方式非常简单 当检测出死锁时 Oracle就会选择其中一个会话作为 牺牲者 该会话将会获得错误信息 通知它所要访问的资源已经被其他会话锁定 就是被阻塞 等待牺牲者所锁定的资源的会话 这时 牺牲者就要作出选择 是尝试另外的资源 完成其事务处理并且提交 还是进行回滚 稍后再试 无论牺牲者的决定如何 另一个正在等候的会话都会在牺牲者通过提交或回滚完成其事务处理时继续执行 第29页 锁定升级 可以在许多层次上进行锁定 用户可以把锁定放在一行上 也可以把锁定放在一个表上 甚至还可以把锁定放在整个数据库上 在有些数据库系统中 锁定是稀缺的资源 拥有许多锁定可以负面地影响系统的性能 在这些数据库中 用户可以发现 为了保存这些资源 用户的100个行级锁定就会转换为一个表级锁定 这种过程就是锁定升级 它使得系统降低了用户锁定的粒度 换句话说 用户以前可能拥有很多行级锁定 现在可以拥有一个更高级别的单独锁定 可以使用一个锁来锁定以前需要锁定的所有资源 但是 Oracle不会升级锁定 锁定升级不是数据库想要的属性 事实上 数据库支持锁定升级暗示着其锁定机制存在固有的系统开销 管理上百个锁定是需要处理的重要工作 在Oracle中 拥有一个锁定或上百万个锁定的系统开销都是相同的 并没有任何区别 第30页 遗失更新 阻塞会在一个会话拥有另一个会话正在请求的资源上的锁定时出现 正在进行请求的会话会一直阻塞 直到占用资源的会话释放锁定资源为止 然而 在大多数情况下 阻塞都是可以避免的 阻塞的主要原因是在没有锁定的数据上进行更新 这是很明显的 如果没有更新它 当然就不会对其进行锁定 第31页 悲观锁定 悲观锁定听起来不太好 实际上并非如此 在使用悲观锁定时 实际上就是表明 某人很有可能会改变正在读取的相同数据 因此 在花费时间改变数据之前 需要锁定数据库中的行 防止其它会话更新它 采用悲观锁定 就是在选择数据之前 对其进行锁定 第32页 乐观锁定 第二种方法称为乐观锁定 它会在应用中同时保存旧值和新值 当更新数据时 用户可以使用一个更新将列设置为其新值 与此同时 验证数据库中的数据行是否具有与用户读取它时相同的值 第33页 教学过程 15 1概述15 2事务管理技术15 3事务的ACID属性15 4并发控制

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值