事务隔离级别_第1页
事务隔离级别_第2页
事务隔离级别_第3页
全文预览已结束

下载本文档

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

文档简介

1、1.ORA-08177: 无法连续访问此事务修改方法:原先的代码: 修改后的代码: 这个问题是由oracle 事务隔离级别引起的在一个事务中执行update t set object_type=zl where object_id=17286不要 提交此事务然后再其他事务中执行set transaction isolation level serializable;update t set object_type=zl where object_id=17286这个时候事务2 会等待事务1执行完成,提交事务1 的时候会出现上述问题2.隔离级别(isolation level)隔离级别定义了事务

2、与事务之间的隔离程度。隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别: 未提交读(read uncommitted) 提交读(read committed) 重复读(repeatable read) 序列化(serializable) 通过一些现象,可以反映出隔离级别的效果。这些现象有: 更新丢失(lost update):当系统允许两个事务同时更新同一数据是,发生 更新丢失。 脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。 非重复读(nonre

3、peatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。 幻像(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。下面是隔离级别及其对应的可能出现或不可能出现的现象:Dirty ReadNonRepeatable ReadPhantom ReadRead uncommittedPossiblePossiblePossibleRead committedNot possiblePossiblePossibleRepeatable readNo

4、t possibleNot possiblePossibleSerializableNot possibleNot possibleNot possible3. ORACLE的隔离级别ORACLE提供了SQL92标准中的read committed和serializable,同时提供了非SQL92标准的read-only。 read committed: 这是ORACLE缺省的事务隔离级别。 事务中的每一条语句都遵从语句级的读一致性。 保证不会脏读;但可能出现非重复读和幻像。 serializable: 简单地说,serializable就是使事务看起来象是一个接着一个地顺序地执行。仅仅能看见

5、在本事务开始前由其它事务提交的更改和在本事务中所做的更改。保证不会出现非重复读和幻像。 Serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作。 如果有在serializable事务开始时未提交的事务在serializable事务结束之前修改了serializable事务将要修改的行并进行了提交,则serializable事务不会读到这些变更,因此发生无法序列化访问的错误。换一种解释方法:只要在serializable事务开始到结束之间有其他事务对serializable事务要修改的东西进行了修改并提交了修改,则发生无法序列化访问

6、的错误(英文错误信息:ORA-08177: Cannot serialize access for this transaction) ORACLE在数据块中记录最近对数据行执行修改操作的N个事务的信息,目的是确定是否有在本事务开始时未提交的事务修改了本事务将要修改的行。 read-only: 遵从事务级的读一致性,仅仅能看见在本事务开始前由其它事务提交的更改。 不允许在本事务中进行DML操作。read only是serializable的子集。它们都避免了非重复读和幻像。区别是在read only中是只读;而在serializable中可以进行DML操作。 read committed和se

7、rializable的区别和联系: 事务1先于事务2开始,并保持未提交状态。事务2想要修改正被事务1修改的行。事务2等待。如果事务1回滚,则事务2(不论是read committed还是serializable方式)进行它想要做的修改。如果事务1提交,则当事务2是read committed方式时,进行它想要做的修改;当事务2是serializable方式时,失败并报错“Cannot serialize access”,因为事务2看不见事务1提交的修改,且事务2想在事务一修改的基础上再做修改。 注: 语句级的读一致性:ORACLE保证语句级的读一致性,即一个语句所处理的数据集是在单一时间点上的

8、数据集,这个时间点是这个语句开始的时间。一个语句看不见在它开始执行后提交的修改。对于DML语句,它看不见由自己所做的修改,即DML语句看见的是它本身开始执行以前存在的数据。 事务级的读一致性: 事务级的读一致性保证了可重复读,并保证不会出现幻像。4.设置隔离级别的方法 设置一个事务的隔离级别 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ ONLY; 设置整个会话的隔离级别 ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE; ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED; 5.选择隔离级别 read committed (1)在事务量大、高性能的

温馨提示

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

评论

0/150

提交评论