精通Oracle核心技术和项目实战之事务和锁_第1页
精通Oracle核心技术和项目实战之事务和锁_第2页
精通Oracle核心技术和项目实战之事务和锁_第3页
精通Oracle核心技术和项目实战之事务和锁_第4页
精通Oracle核心技术和项目实战之事务和锁_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

第18章事务和锁 事务和锁是两个联系非常紧密的概念 事务很重要 可以保证多用户并发系统中的数据的完整性 在数据库中 存在多个用户同时对某一数据进行读写操作的情况 为了确保数据的并行性和一致性 可以使用事务 锁是Oracle数据库引擎用来同步多个用户 同时对同一个数据块访问的一种机制 锁可以消除多用户操作同一个资源产生的隐患 本章重点讨论有关事务和锁的概念 18 1什么是事务 事务 transaction 在数据库中主要用于保证数据的一致性 防止出现错误数据 在数据库中数据的完整性是一个广义概念 它包括数据的并行性和一致性 事务是单个的工作单元 如果某一事务成功 则在该事务中进行的所有数据修改均会提交 称为数据库中的永久组成部分 如果事务遇到错误且必须取消或回滚 则所有的数据均会被清除 18 1 1事务概述 事务 transaction 是用户定义的一个数据库操作序列 是一个不可分割的整体 这些操作要么全做 要么全不做 事务是对数据库进行操作的最基本的逻辑单位 它可以是一组SQL语句或整个程序 通常情况下 一个应用程序里包含多个事务 此外 事务还是恢复和并发控制的基本单位 18 1 1事务概述 事务和程序不同 一条语句或者多条语句甚至一段程序都可能在一个事务中 而一段程序又可以包含多个事务 事务可以根据自己的需要把一段程序分成多个组 然后把每个组都当成一个单元 而这个单元就可以理解为一个事务 18 1 1事务概述 事务在没有提交之前可以回滚 而且在提交前 当前用户可以查看已经修改的数据 但其他用户看不到该数据 一旦事务提交就不能再撤销修改了 Oracle数据库的事务基本控制语句有如下几种 settransaction 设置事务的属性 commit 提交事务 savepoint 设置保存点 rollback 回滚事务 rollbacktosavepoint 回滚至保存点 18 1 2事务的ACID特性 事务有4个特性 分别是原子性 Atomic 一致性 Consistent 分离性 Isolated 持久性 Durable 18 1 2事务的ACID特性 1 原子性原子性是指事务是一个不可分割的工作单位 事务中的操作要么都发生 要么都不发生 下面通过一个例子来加深读者对该特性的理解 18 1 2事务的ACID特性 2 一致性事务必须使数据库从一个一致性状态变换到另一个一致性状态 因此 当数据库中只包含了成功事务提交的结果时 就说数据库处于一致性状态 18 1 2事务的ACID特性 3 分离性即使每个事务都能确保一致性和原子性 但如果有几个事务并发执行 如果在执行的过程中发生了事务间的交叉 也会导致数据库发生不一致的情况 事务的分离性是指一个事务的执行不能被其他事务干扰 即一个事务内部的操作及使用的数据对并发的其他事务是隔离的 并发执行的各个事务之间不能互相干扰 18 1 2事务的ACID特性 4 持久性持久性是指一个事务一旦被提交 它对数据库中数据的改变就是永久性的 接下来的其他操作和数据库故障不应该对其有任何影响 18 1 3事务类型 在Oracle数据库中 操作事务可分为两种方式 显示操作方式和隐示管理方式 1 显示操作方式显式操作方式是对事务的提交或回滚 需要用户利用脚本来完成 相关脚本如图所示 18 1 3事务类型 2 隐示管理方式隐示管理方式没有明确的开始和结束标志 它同样由数据库自动开启 当一个程序正常结束或执行DDL语句时会自动提交 例如createtable语句 而操作失败时就会自动回退 这些都是被动完成的 不需要开发者的参与 18 1 3事务类型 利用语句可以设置事务是否自动提交 如图所示 18 1 4事务的状态 对数据库进行操作的各种事务共有5中状态 如图所示 18 1 4事务的状态 提交状态和中止状态的事务统称为已决事务 处于活动状态 部分提交状态和失败状态的事务称为未决事务 1 活动状态 事务在执行的状态叫活动状态 2 部分提交状态 事务中随后一条语句被执行后的状态叫部分提交状态 3 失败状态 事务不能正常执行的状态叫失败状态 导致失败状态发生的可能原因有硬件原因或逻辑错误 这样事务必须回滚 就进入了中止状态 4 提交状态 事务在部分提交后 将往硬盘上写入数据 最后一条信息写入后的状态叫提交状态 进入提交状态的事务就成功完成了 5 中止状态 事务回滚 并且数据库已经回复到事务开始执行前的状态叫中止状态 18 1 5提交事务 当事务提交成功时 就意味着事务中的数据被永久地提交到了数据库中 其他用户也可以查看提交的数据 示例18 1 对表customersnew中的数据进行部分修改 并在事务未提交以前 利用其他会话对表进行查询 查看该会话下的数据情况 18 1 6事务的保存点 用户可以使用savepoint语句在事务内设置保存点或标记 保存点可以定义在按条件取消某个事务的一部分后 该事务可以返回的一个位置 18 1 6事务的保存点 一旦把事务回滚到某个保存点 Oracle会释放保存点之后持有的锁 这时之前等待被锁定资源的事务就可以继续了 有关保存点有如下注意点 当回滚到指定的保存点时 它以后的保存点会被删除 而指定的保存点会被保留 事务回滚时 只回滚保存点之后的操作 保存点之后的锁将被释放 之前的将会被保留 18 1 6事务的保存点 示例18 2 修改customersnew表中的数据 并在每次修改数据后都设置保存点 然后验证保存点是否可用 18 2锁 锁是在事务访问相同资源的时候 防止事务之间的有害性交互的机制 这些资源包括用户系统对象 内存和数据字典中的共享数据结构 Oracle通过不同类型的锁 来设置用户允许或阻止其他用户对相同资源的同时访问 从而实现数据的完整性 并行性与一致性 在Oracle数据库中 多个事务并发执行的正确性由数据库管理系统的并发控制机制提供支持 18 2 1并发访问的常见问题 数据库系统的并发控制是以亊务为单位进行的 而亊务中用到的数据或资源 可以使用内部锁定的机制来限制事务对所需共同资源的存取操作从而确保数据的并行性和一致性 1 丢失信息2 未确认的相关性3 不一致的分析4 幻像读 18 2 2锁概述 锁是对数据进行并发控制的机制 是Oracle数据库引擎用来同步多个用户 当对一个数据源加锁后 此数据源就有了一定的访问机制 18 2 3锁分类 锁是实现并发访问的重要手段 数据库将自动启用和取消锁 不需要人的参与 按照锁的权限来分 Oracle数据库中存在两种类型的锁 分别是排他锁 X锁 和共享锁 S锁 Oracle数据库中的锁按照所用对象的不同分为一下几种类型 DML锁DDL锁内部闩锁 18 2 4锁等待和死锁 在某些情况下 由于占用的资源不能及时释放 而造成锁等待 锁等待会严重影响数据库性能和日常工作 例如 当一个会话修改表A的记录时 它会对该记录加锁 而此时如果另一个会话也来修改此记录 那么第二个会话因得不到排他锁而一直等待 此时会出现执行SQL时 数据库长时间没有响应的现象 直到第一个会话把事务提交 释放锁 第二个会话才能对数据进行操作 18 2 4锁等待和死锁 示例18 3 对表customersnew中的某一行数据进行修改 在事务未提交以前 在第二个会话中同一记录进行修改 查看该会话下的数据情况 示例18 3 死锁的发生 我们在两个会话框中交替修改customersnew表中的两条记录 示例18 4 使用企业管理器OEM查看并中止阻塞情况 18 2 5预防死锁 尽管死锁不能完全避免 但是遵守特定的编码惯例可以将发生死锁的机会降低最低 一般而言 需要遵守的原则如下所示 按同一顺序访问对象

温馨提示

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

评论

0/150

提交评论