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

下载本文档

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

文档简介

第18章 事务和锁 事务和锁是两个联系非常紧密的概念。事 务很重要,可以保证多用户并发系统中的 数据的完整性。在数据库中,存在多个用 户同时对某一数据进行读写操作的情况, 为了确保数据的并行性和一致性,可以使 用事务。锁是Oracle数据库引擎用来同步多 个用户,同时对同一个数据块访问的一种 机制。锁可以消除多用户操作同一个资源 产生的隐患。本章重点讨论有关事务和锁 的概念。 18.1 什么是事务 事务(transaction)在数据库中主要用于保 证数据的一致性,防止出现错误数据。在 数据库中数据的完整性是一个广义概念, 它包括数据的并行性和一致性。事务是单 个的工作单元。如果某一事务成功,则在 该事务中进行的所有数据修改均会提交, 称为数据库中的永久组成部分;如果事务 遇到错误且必须取消或回滚,则所有的数 据均会被清除。 18.1.1 事务概述 事务(transaction)是用户定义的一个数据 库操作序列,是一个不可分割的整体。这 些操作要么全做,要么全不做。事务是对 数据库进行操作的最基本的逻辑单位,它 可以是一组SQL语句或整个程序。通常情况 下,一个应用程序里包含多个事务。此外 ,事务还是恢复和并发控制的基本单位。 18.1.1 事务概述 事务和程序不同,一条语句或者多条语句 甚至一段程序都可能在一个事务中,而一 段程序又可以包含多个事务。事务可以根 据自己的需要把一段程序分成多个组,然 后把每个组都当成一个单元,而这个单元 就可以理解为一个事务。 18.1.1 事务概述 事务在没有提交之前可以回滚,而且在提交前 ,当前用户可以查看已经修改的数据,但其他 用户看不到该数据,一旦事务提交就不能再撤 销修改了。Oracle数据库的事务基本控制语句 有如下几种: set transaction,设置事务的属性。 commit,提交事务。 savepoint,设置保存点。 rollback,回滚事务。 rollback to savepoint,回滚至保存点。 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语句时会自动提交, 例如create table语句。而操作失败时就会自 动回退,这些都是被动完成的,不需要开 发者的参与。 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

提交评论