精通oracle核心技术和项目实战之事务和锁

上传人:kms****20 文档编号:51471583 上传时间:2018-08-14 格式:PPTX 页数:27 大小:297.09KB
返回 下载 相关 举报
精通oracle核心技术和项目实战之事务和锁_第1页
第1页 / 共27页
精通oracle核心技术和项目实战之事务和锁_第2页
第2页 / 共27页
精通oracle核心技术和项目实战之事务和锁_第3页
第3页 / 共27页
精通oracle核心技术和项目实战之事务和锁_第4页
第4页 / 共27页
精通oracle核心技术和项目实战之事务和锁_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《精通oracle核心技术和项目实战之事务和锁》由会员分享,可在线阅读,更多相关《精通oracle核心技术和项目实战之事务和锁(27页珍藏版)》请在金锄头文库上搜索。

1、第18章 事务和锁事务和锁是两个联系非常紧密的概念。事 务很重要,可以保证多用户并发系统中的 数据的完整性。在数据库中,存在多个用 户同时对某一数据进行读写操作的情况, 为了确保数据的并行性和一致性,可以使 用事务。锁是Oracle数据库引擎用来同步多 个用户,同时对同一个数据块访问的一种 机制。锁可以消除多用户操作同一个资源 产生的隐患。本章重点讨论有关事务和锁 的概念。18.1 什么是事务事务(transaction)在数据库中主要用于保 证数据的一致性,防止出现错误数据。在 数据库中数据的完整性是一个广义概念, 它包括数据的并行性和一致性。事务是单 个的工作单元。如果某一事务成功,则在

2、该事务中进行的所有数据修改均会提交, 称为数据库中的永久组成部分;如果事务 遇到错误且必须取消或回滚,则所有的数 据均会被清除。18.1.1 事务概述事务(transaction)是用户定义的一个数据 库操作序列,是一个不可分割的整体。这 些操作要么全做,要么全不做。事务是对 数据库进行操作的最基本的逻辑单位,它 可以是一组SQL语句或整个程序。通常情况 下,一个应用程序里包含多个事务。此外 ,事务还是恢复和并发控制的基本单位。18.1.1 事务概述事务和程序不同,一条语句或者多条语句 甚至一段程序都可能在一个事务中,而一 段程序又可以包含多个事务。事务可以根 据自己的需要把一段程序分成多个组

3、,然 后把每个组都当成一个单元,而这个单元 就可以理解为一个事务。18.1.1 事务概述事务在没有提交之前可以回滚,而且在提交前 ,当前用户可以查看已经修改的数据,但其他 用户看不到该数据,一旦事务提交就不能再撤 销修改了。Oracle数据库的事务基本控制语句 有如下几种:set transaction,设置事务的属性。commit,提交事务。savepoint,设置保存点。rollback,回滚事务。rollback to savepoint,回滚至保存点。18.1.2 事务的ACID特性事务有4个特性,分别是原子性(Atomic )、一致性(Consistent)、分离性( Isolate

4、d)、持久性(Durable)。18.1.2 事务的ACID特性1.原子性原子性是指事务是一个不可分割的工作单 位,事务中的操作要么都发生,要么都不 发生。下面通过一个例子来加深读者对该 特性的理解。18.1.2 事务的ACID特性2.一致性事务必须使数据库从一个一致性状态变换 到另一个一致性状态。因此,当数据库中 只包含了成功事务提交的结果时,就说数 据库处于一致性状态。18.1.2 事务的ACID特性3.分离性即使每个事务都能确保一致性和原子性, 但如果有几个事务并发执行,如果在执行 的过程中发生了事务间的交叉,也会导致 数据库发生不一致的情况。事务的分离性 是指一个事务的执行不能被其他事

5、务干扰 ,即一个事务内部的操作及使用的数据对 并发的其他事务是隔离的,并发执行的各 个事务之间不能互相干扰。18.1.2 事务的ACID特性4.持久性持久性是指一个事务一旦被提交,它对数 据库中数据的改变就是永久性的,接下来 的其他操作和数据库故障不应该对其有任 何影响。18.1.3 事务类型在Oracle数据库中,操作事务可分为两种方 式:显示操作方式和隐示管理方式。1.显示操作方式显式操作方式是对事务的提交或回滚,需要用户利用脚本 来完成。相关脚本如图所示。18.1.3 事务类型2.隐示管理方式隐示管理方式没有明确的开始和结束标志 ,它同样由数据库自动开启。当一个程序 正常结束或执行DDL

6、语句时会自动提交, 例如create table语句。而操作失败时就会自 动回退,这些都是被动完成的,不需要开 发者的参与。18.1.3 事务类型利用语句可以设置事务是否自动提交,如 图所示。18.1.4 事务的状态对数据库进行操作的各种事务共有5中状态 ,如图所示。18.1.4 事务的状态提交状态和中止状态的事务统称为已决事务,处于活动 状态、部分提交状态和失败状态的事务称为未决事务。(1)活动状态:事务在执行的状态叫活动状态。(2)部分提交状态:事务中随后一条语句被执行后的 状态叫部分提交状态。(3)失败状态:事务不能正常执行的状态叫失败状 态。导致失败状态发生的可能原因有硬件原因或逻辑错

7、 误,这样事务必须回滚,就进入了中止状态。(4)提交状态:事务在部分提交后,将往硬盘上写入 数据,最后一条信息写入后的状态叫提交状态。进入提 交状态的事务就成功完成了。(5)中止状态:事务回滚,并且数据库已经回复到事 务开始执行前的状态叫中止状态。18.1.5 提交事务当事务提交成功时,就意味着事务中的数 据被永久地提交到了数据库中,其他用户 也可以查看提交的数据。【示例18-1】对表customersnew中的数据进 行部分修改,并在事务未提交以前,利用 其他会话对表进行查询,查看该会话下的 数据情况。18.1.6 事务的保存点用户可以使用savepoint语句在事务内设置 保存点或标记。保

8、存点可以定义在按条件 取消某个事务的一部分后,该事务可以返 回的一个位置。18.1.6 事务的保存点一旦把事务回滚到某个保存点,Oracle会释 放保存点之后持有的锁。这时之前等待被 锁定资源的事务就可以继续了。有关保存 点有如下注意点:当回滚到指定的保存点时,它以后的保存 点会被删除,而指定的保存点会被保留。事务回滚时,只回滚保存点之后的操作。保存点之后的锁将被释放,之前的将会被 保留。18.1.6 事务的保存点【示例18-2】修改customersnew表中的数据 ,并在每次修改数据后都设置保存点,然 后验证保存点是否可用。18.2 锁锁是在事务访问相同资源的时候,防止事 务之间的有害性交

9、互的机制,这些资源包 括用户系统对象、内存和数据字典中的共 享数据结构。Oracle通过不同类型的锁,来 设置用户允许或阻止其他用户对相同资源 的同时访问,从而实现数据的完整性、并 行性与一致性。在Oracle数据库中,多个事 务并发执行的正确性由数据库管理系统的 并发控制机制提供支持。18.2.1 并发访问的常见问题数据库系统的并发控制是以亊务为单位进 行的,而亊务中用到的数据或资源,可以 使用内部锁定的机制来限制事务对所需共 同资源的存取操作从而确保数据的并行性 和一致性。1. 丢失信息2. 未确认的相关性3. 不一致的分析4. 幻像读18.2.2 锁概述锁是对数据进行并发控制的机制,是O

10、racle 数据库引擎用来同步多个用户。当对一个 数据源加锁后,此数据源就有了一定的访 问机制。18.2.3 锁分类锁是实现并发访问的重要手段,数据库将自动 启用和取消锁,不需要人的参与。按照锁的权 限来分,Oracle数据库中存在两种类型的锁, 分别是排他锁(X锁)和共享锁(S锁)。Oracle数据库中的锁按照所用对象的不同分为 一下几种类型。DML锁DDL锁内部闩锁18.2.4 锁等待和死锁在某些情况下,由于占用的资源不能及时 释放,而造成锁等待。锁等待会严重影响 数据库性能和日常工作。例如,当一个会 话修改表A的记录时,它会对该记录加锁, 而此时如果另一个会话也来修改此记录, 那么第二个

11、会话因得不到排他锁而一直等 待,此时会出现执行SQL时,数据库长时间 没有响应的现象。直到第一个会话把事务 提交,释放锁,第二个会话才能对数据进 行操作。18.2.4 锁等待和死锁【示例18-3】对表customersnew中的某一行 数据进行修改,在事务未提交以前,在第 二个会话中同一记录进行修改,查看该会 话下的数据情况。【示例18-3】死锁的发生,我们在两个会 话框中交替修改customersnew表中的两条记 录。【示例18-4】使用企业管理器OEM查看并 中止阻塞情况。18.2.5 预防死锁尽管死锁不能完全避免,但是遵守特定的 编码惯例可以将发生死锁的机会降低最 低。一般而言,需要遵守的原则如下所 示。按同一顺序访问对象。避免事务中的用户交互。保持事务简短并处于一个批处理中。18.3 小结本章重点讲解了Oracle中的事务和锁的概念 及其实现,包括事务的ACID特性、事务的 类型以及锁的分类、锁等待和死锁。事务 保证了数据的一致性。而锁和事务两者联 系紧密。本章重点是熟练掌握事务和锁的 含义及实现功能。本章难点是如何避免死 锁以及如何利用OEM管理器解决锁冲突。

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

当前位置:首页 > 生活休闲 > 科普知识

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