`
flyfoxs
  • 浏览: 298121 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

白话2种Oracle的事务隔离

阅读更多

Oracle事务的隔离级别有2总, Read Commitment, Serializable, Read Only (另外还有2种事务隔离级别,Read Uncommitted, Repatable Read,Oracle没有单独提供.)

 

Read Only, 看名字就比较简单,在此我们不做讨论,下面主要分析一下Read Commitment, Serializable. 

 

一句话描述:

Read Commitment: 读取在语句开始时已经提交的, 修改冲突通过写一致性来解决数据的一致性.

Serializable:            读取在事务开始时已经提交的. 修改冲突确保先提交的成功,后修改的回滚.

 

比较细节

 

不同点 

  读一致性 写冲突
Read Commitment 如果事务进行过程中,有数据在别的事务里面提交了,可以立即被当前事务读取到. 先修改的可以正常提交,后修改的必须等到先修改提交之后.然后通过写一致性来重启事务
Serializable:  事务开始后,其他事务的所有修改对当前事务没有任何影响 后修改数据的事务同样会被阻塞,但是当阻塞解除提交时会出现ORA-08177异常.
(ORA-08177: can't serialize access for this transaction)

 

 

 

相同点

 
  读一致性 写冲突
Read Commitment 只有提交后的数据才会被读取,都不会读取脏数据. 后修改数据的事务都会被阻塞,无法提交.
Serializable: 
 
 实验过程
下面的2个实验,比较了Oracle所支持的事务隔离模式, 在读取和修改数据时的详细区别. 如何切换数据库的隔离模式,可以参考下面的语句.
ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;
ALTER SESSION SET ISOLATION_LEVEL = serializable;
 
  •  数据初始化
 下面的2个实验,在开始前需要使用上面的初始化脚本Reset数据.
DROP TABLE XXRPTH.TEST;

CREATE TABLE XXRPTH.TEST
(
  NAME   VARCHAR(10),
  VALUE  NUMBER(22)
);

insert into test values('lilao_1', 1);
insert into test values('lilao_2', 2);
insert into test values('lilao_3', 3);

commit;
 
  • 实验#1: 读取变化数据的区别
关键比较点,已经标红高亮
时间 事务1 事务2 Read Commitment Serializable: 
t1 savepoint aaa;    显示开启事务1  
t2   savepoint bbb;     显示开启事务2
t3   update test 
set value=value+10 ;
   
t4 select count(*) from test
where value>10;
  结果是0(读可提交) 结果是0
t5   commit;    
t6 select count(*) from test
where value>10;
  结果是3(幻象读,和t4时间读取的记录条数不一样了) 结果是0
t7 commit;      
t8 select * from test;   NAME            VALUE
---------- ----------
lilao_1            11
lilao_2            12
lilao_3            13
NAME            VALUE
---------- ----------
lilao_1            11
lilao_2            12
lilao_3            13
  
 
 
  • 实验#2: 写冲突的区别 
关键比较点,已经标红高亮
时间 事务1 事务2 Read Commitment Serializable: 
t1 savepoint aaa;    显示开启事务1  
t2   savepoint bbb;    显示开启事务2
t3   update test 
set value=value+10 ;
   
t4 select count(*) from test
 where value>10;
  结果是0(读可提交) 结果是0
t5 update test 
set value=value+100;
     
t6   commit;   事务2提交时,事务1会抛出异常
ORA-08177: can't serialize access for this transaction
t7 select * from test;   NAME            VALUE
---------- ----------
lilao_1           111
lilao_2           112
lilao_3           113
NAME            VALUE
---------- ----------
lilao_1             1
lilao_2             2
lilao_3             3
t8 commit;     虽然事务1在T6时,抛出异常,但是事务并未终止.
所以T7时间没有查询到事务2的修改
t9 select * from test;   NAME            VALUE
---------- ----------
lilao_1           111
lilao_2           112
lilao_3           113
NAME            VALUE
---------- ----------
lilao_1            11
lilao_2            12
lilao_3            13
 
 
1
0
分享到:
评论
2 楼 flyfoxs 2014-07-17  
cwqcwqmax9 写道
感觉 楼主测试  Serializable   的结果 和我 预想的不同,按照道理  设置完Serializable 后 ,第二个事物读取 和  写入应该在第一个事物完成 后再执行


谢谢你反馈.你说的有道理,如果第一个事务先写数据是好理解些.

但是安装上面的测试步骤下来,测试结果就会像上面写的,我都是严格测试了的.

如果的确有不对的,你可以指出来,哪个结果不对,我再看看.
1 楼 cwqcwqmax9 2014-07-17  
感觉 楼主测试  Serializable   的结果 和我 预想的不同,按照道理  设置完Serializable 后 ,第二个事物读取 和  写入应该在第一个事物完成 后再执行

相关推荐

    MoreWindows白话经典算法之七大排序第2版(高清)

    本书《更多Windows白话经典算法之七大排序第2版》是一部深入浅出讲解七种经典排序算法的著作,旨在帮助读者理解并掌握冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序以及堆排序等基本概念和...

    06 白话容器基础(二):隔离与限制.pdf

    【标题】:“06 白话容器基础(二):隔离与限制.pdf” 【描述】:“06 白话容器基础(二):隔离与限制.pdf”这篇文章深入探讨了容器技术中的核心概念——隔离与限制,主要围绕Linux容器的Namespace技术以及它与...

    oracle 开源轻量级数据库连接客户端 instantclient-basic-windows.x64-11.2.0.4.0

    Oracle Instant Client是一款由Oracle公司提供的轻量级数据库连接客户端,主要功能是允许应用程序在无需完整Oracle数据库服务器的情况下,与Oracle数据库进行通信。这个版本——"instantclient-basic-windows.x64-...

    子平真诠白话解释.doc

    综合来看,《子平真诠白话解释》不仅为读者提供了一种简化版的命理学知识,还融入了哲学和生活智慧。作者通过白话文的表达方式,让这些古老的知识变得生动而易于理解,使得更多人能够接触到并从这门学问中受益。无论...

    《白话C++》教程章节完整版

    C++是一种通用的、面向对象的编程语言,由Bjarne Stroustrup于1979年在贝尔实验室创建,它是C语言的超集,同时引入了类、模板、异常处理等面向对象的概念,使得程序设计更为灵活高效。C++的特性使其在系统软件、应用...

    白话中台战略-中台是个什么鬼.pdf

    白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-...

    白话c++(绝对经典)

    《白话C++》是一本深受读者喜爱的编程著作,由中国的编程大师撰写,旨在以通俗易懂的方式解析复杂的C++编程语言。作者通过简洁幽默的语言,使得这本教程不仅适合初学者,也对有一定经验的程序员有很高的参考价值。在...

    白话机器学习的数学-立石贤吾-源代码.zip

    白话机器学习的数学-立石贤吾-源代码.zip

    《罗织经》白话全译.doc

    《罗织经》白话全译.doc

    白话机器学习的数学.docx

    白话机器学习的数学 机器学习是一种人工智能的方法论,通过让计算机自主学习数据中的规律和模式,从而完成特定的任务。机器学习有监督学习和无监督学习两种类型。在监督学习中,我们向模型提供带有标签的训练数据,...

    06 _ 白话容器基础(二):隔离与限制1

    【容器技术的基础与隔离原理】 在现代IT领域,容器技术,特别是Docker,已经成为应用程序部署和管理的关键工具。本文将深入探讨容器的核心概念——隔离与限制,以及它们如何与虚拟机进行对比。 容器的隔离主要依赖...

    instantclient-basic-windows.x64-12.2.0.1.0.zip oracle开源 轻量级数据库连接客户端

    1. **Oracle Instant Client**:这是Oracle公司提供的一种小型、快速的数据库连接工具,它允许应用程序无需完整安装Oracle数据库服务器就能连接到远程Oracle数据库。它包含必要的动态链接库(DLLs)和其他文件,可以...

    《白话 Windows 编程》

    《白话 Windows 编程》EXE格式电子书,收藏版!!!

    白话c++.rar

    2. **控制结构**:C++中的控制结构主要包括条件语句(if-else)、循环(for、while、do-while)和选择结构(switch-case)。这些是编写逻辑代码的核心部分。 3. **函数**:函数是C++中组织代码的基本单元,用于封装...

    白话统计学

    本书对统计学原理和术语进行了简洁、清晰而准确的解释,并通过大量实例讲述统计技术的操作方法。书中涵盖了社会科学研究所使用的大部分统计原理和方法,诸如集中趋势、变异程度、正态分布、z分数、标准误等基本概念...

    白话文运动的危机

    白话文运动的危机,CAJViewer 文件,使用CAJViewer软件查看

    白话C++编程(有用)

    在IT领域,C++是一种强大的、通用的编程语言,它以其高效性、灵活性和面向对象的特性而闻名。"白话C++编程"这个资源显然旨在以通俗易懂的方式介绍C++编程的基础知识,这对于初学者或者需要巩固基础的开发者来说是...

    白话C++

    白话 C++ 第二学堂 适合入门级C++的学习,比较全的C++细节知识

    白话C++编程.rar

    《白话C++编程》是一本面向初学者和进阶者的C++编程教程,旨在用通俗易懂的语言讲解复杂的C++概念。C++是一种强大的、通用的编程语言,被广泛应用于系统软件、游戏开发、应用软件以及高性能计算等多个领域。本书以...

Global site tag (gtag.js) - Google Analytics