《精通Oracle核心技术和项目实战之事务和锁.pptx》由会员分享,可在线阅读,更多相关《精通Oracle核心技术和项目实战之事务和锁.pptx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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)、分离性(Isolated)、持久性(Durable)。18.1.2 事务的ACID特性1.原
4、子性原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。下面通过一个例子来加深读者对该特性的理解。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语句时会自动提交,例如create table语句。而操作失败时就会自动回退,这些都是被动完成的,不需要开发者的参
6、与。18.1.3事务类型利用语句可以设置事务是否自动提交,如图所示。18.1.4 事务的状态对数据库进行操作的各种事务共有5中状态,如图所示。18.1.4 事务的状态提交状态和中止状态的事务统称为已决事务,处于活动状态、部分提交状态和失败状态的事务称为未决事务。(1)活动状态:事务在执行的状态叫活动状态。(2)部分提交状态:事务中随后一条语句被执行后的状态叫部分提交状态。(3)失败状态:事务不能正常执行的状态叫失败状态。导致失败状态发生的可能原因有硬件原因或逻辑错误,这样事务必须回滚,就进入了中止状态。(4)提交状态:事务在部分提交后,将往硬盘上写入数据,最后一条信息写入后的状态叫提交状态。进
7、入提交状态的事务就成功完成了。(5)中止状态:事务回滚,并且数据库已经回复到事务开始执行前的状态叫中止状态。18.1.5提交事务当事务提交成功时,就意味着事务中的数据被永久地提交到了数据库中,其他用户也可以查看提交的数据。【示例18-1】对表customersnew中的数据进行部分修改,并在事务未提交以前,利用其他会话对表进行查询,查看该会话下的数据情况。18.1.6事务的保存点用户可以使用savepoint语句在事务内设置保存点或标记。保存点可以定义在按条件取消某个事务的一部分后,该事务可以返回的一个位置。18.1.6事务的保存点一旦把事务回滚到某个保存点,Oracle会释放保存点之后持有的
8、锁。这时之前等待被锁定资源的事务就可以继续了。有关保存点有如下注意点:当回滚到指定的保存点时,它以后的保存点会被删除,而指定的保存点会被保留。事务回滚时,只回滚保存点之后的操作。保存点之后的锁将被释放,之前的将会被保留。18.1.6事务的保存点【示例18-2】修改customersnew表中的数据,并在每次修改数据后都设置保存点,然后验证保存点是否可用。18.2 锁锁是在事务访问相同资源的时候,防止事务之间的有害性交互的机制,这些资源包括用户系统对象、内存和数据字典中的共享数据结构。Oracle通过不同类型的锁,来设置用户允许或阻止其他用户对相同资源的同时访问,从而实现数据的完整性、并行性与一
9、致性。在Oracle数据库中,多个事务并发执行的正确性由数据库管理系统的并发控制机制提供支持。18.2.1 并发访问的常见问题数据库系统的并发控制是以亊务为单位进行的,而亊务中用到的数据或资源,可以使用内部锁定的机制来限制事务对所需共同资源的存取操作从而确保数据的并行性和一致性。1.丢失信息2.未确认的相关性3.不一致的分析4.幻像读18.2.2锁概述锁是对数据进行并发控制的机制,是Oracle数据库引擎用来同步多个用户。当对一个数据源加锁后,此数据源就有了一定的访问机制。18.2.3锁分类锁是实现并发访问的重要手段,数据库将自动启用和取消锁,不需要人的参与。按照锁的权限来分,Oracle数据
10、库中存在两种类型的锁,分别是排他锁(X锁)和共享锁(S锁)。Oracle数据库中的锁按照所用对象的不同分为一下几种类型。DML锁DDL锁内部闩锁18.2.4锁等待和死锁在某些情况下,由于占用的资源不能及时释放,而造成锁等待。锁等待会严重影响数据库性能和日常工作。例如,当一个会话修改表A的记录时,它会对该记录加锁,而此时如果另一个会话也来修改此记录,那么第二个会话因得不到排他锁而一直等待,此时会出现执行SQL时,数据库长时间没有响应的现象。直到第一个会话把事务提交,释放锁,第二个会话才能对数据进行操作。18.2.4锁等待和死锁【示例18-3】对表customersnew中的某一行数据进行修改,在
11、事务未提交以前,在第二个会话中同一记录进行修改,查看该会话下的数据情况。【示例18-3】死锁的发生,我们在两个会话框中交替修改customersnew表中的两条记录。【示例18-4】使用企业管理器OEM查看并中止阻塞情况。18.2.5预防死锁尽管死锁不能完全避免,但是遵守特定的编码惯例可以将发生死锁的机会降低最低。一般而言,需要遵守的原则如下所示。按同一顺序访问对象。避免事务中的用户交互。保持事务简短并处于一个批处理中。18.3 小结本章重点讲解了Oracle中的事务和锁的概念及其实现,包括事务的ACID特性、事务的类型以及锁的分类、锁等待和死锁。事务保证了数据的一致性。而锁和事务两者联系紧密。本章重点是熟练掌握事务和锁的含义及实现功能。本章难点是如何避免死锁以及如何利用OEM管理器解决锁冲突。