查看ORACLE事务隔离级别方法(转)
众所周知,事务的隔离级别有序列化(serializable),可重复读(repeatable read),读已提交(read committed),读未提交(read uncommitted)。根据隔离级别的等级,对事务隔离的严格度也不同,如序列化的隔离级别最严格,并发的效果就越不理想,各种数据库都有对事务隔离的支持,那么如何查看ORACLE对事务的隔离级别呢?还是做个试验验证吧
一 首先做个测试表,表结构和其中的数据如下
ID PHONE
43071 126811
二 打开一个session, 这里叫session1,编写如下PL/SQL
DECLARE
V_OLD VARCHAR2(32);
V_NOW VARCHAR2(32);
V_SYSDATE DATE;
V_LIMIT DATE;
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
SELECT PHONE FROM TEST.TEST_HIS_CHILD WHERE PHONE='126811';
DBMS_OUTPUT.PUT_LINE('FIRST SELECT: ' || V_OLD || ' sysdate:' ||
TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss'));
SELECT SYSDATE INTO V_SYSDATE FROM DUAL;
SELECT SYSDATE + 1 / 1440 / 8 INTO V_LIMIT FROM DUAL;
LOOP
IF SYSDATE > V_LIMIT THEN
EXIT;
END IF;
END LOOP;
SELECT PHONE INTO V_NOW FROM TEST.TEST_HIS_CHILD WHERE PHONE='126811';
DBMS_OUTPUT.PUT_LINE('SECOND SELECT: ' || V_NOW || ' sysdate:' ||
TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss'));
COMMIT;
END;
再打开一个session2 输入如下sql
UPDATE TEST.TEST_HIS_CHILD SET PHONE='126811000' where PHONE='126811';
COMMIT;
这里用于测试事务的不可重复读,对同一条数据读两次,在第二次读之前,打开session2,修改相同的记录,之后再查看session1的运行结果
FIRST SELECT: 126811 sysdate:2015-02-11 16:51:32
ORA-01403:未找到数据
这说明在session1中对同一条记录读取第二次之前数据已被修改,而session1 在第二次读取时能够发现另一个session2对本条记录的修改结果,所以报告未找到数据
也就是说ORACLE这里克服了不可重复读的问题。
在运行session2时还可以去掉commit,不提提交事务,这样session1得到的结果是
FIRST SELECT: 126811 sysdate:2015-02-11 17:00:09
SECOND SELECT: 126811 sysdate:2015-02-11 17:00:18
说明ORACLE完成的是一致度操作,而不是脏读
这里可以看出ORACLE使用的隔离级别是可重复读(repeatable read)
http://blog.itpub.net/750077/viewspace-1433569/
查看ORACLE事务隔离级别方法(转)的更多相关文章
- Oracle事务隔离级别处理差异
Oracle事务隔离是事务读操作不同程度的数据隔离,分为READ_UNCOMMITTED.READ_COMMITTED(默认).SERIALIZABLE. Oracle事务隔离级别SERIALIZAB ...
- Oracle事务隔离级别
转自:https://blog.csdn.net/leozhou13/article/details/50449965
- oracle,mysql,sql server三大数据库的事务隔离级别查看方法
1:mysql的事务隔离级别查看方法 mysql 最简单,执行这条语句就行:select @@tx_isolation 详情: 1.查看当前会话隔离级别 select @@tx_isolation; ...
- 事务,Oracle,MySQL及Spring事务隔离级别
一.什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种): 原子性 (atomicity):强调事务的不可分割:一致性 (consiste ...
- mysql事务隔离级别及传播机制
TRANSACTION(事务隔离级别) 在说明事务隔离级别之前先说一下脏读.不可重复读.幻读这三个概念. 脏读:一个事务读取到另一事务未提交的更新新据.当一个事务正在访问数据,并且对数据进行了修改,而 ...
- mysql,oracle,sql server中的默认事务隔离级别查看,更改
未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据) 已提交读(数据库引擎的默认级别) 可重复读 可序列化(隔离事务的最高级别,事务之间完全隔离) 可串行化比较严谨,级别高; MySQL m ...
- 数据库事务隔离级ORACLE数据库事务隔离级别介绍
本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...
- ★ MYSQL隔离级别 通俗理解 + mysql、oracle默认事务隔离级别
★ 脏读 : 读取了前一事务 未提交 的数据 ; 不可重复读 : 读取了前一事务 提交 的数据: ★ 幻读 与 不可重复读 common :都是读取了另一条已经提交的事务(这点与脏读不 ...
- Oracle Database Transaction Isolation Levels 事务隔离级别
Overview of Oracle Database Transaction Isolation Levels Oracle 数据库提供如下事务隔离级别: 已提交读隔离级别 可串行化隔离级别 只读隔 ...
随机推荐
- Qt中将QTableView中的数据导出为Excel文件
如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类 ...
- There is an error in invoking javac. A full JDK (not just JRE) is required
最近调整了磁盘分区,硬盘里什么都没有了,可惜了我很多项目还有数据库资源然后把以前ssh项目重新导入进来的时候出现了一个错误org.apache.jasper.JasperException: PWC6 ...
- file.encoding到底指的是什么呢?
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50918506 <Java利用System.getProperty(“file. ...
- 基于visual Studio2013解决C语言竞赛题之0204实数求值
题目
- __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程 )
root@xuanfei-desktop:~/cpropram/2# cat global.h //头文件#ifndef CLOBAL_H #define GLOBAL_H ...
- FMDB 的基本操作
在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包 FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码. FMDB常用类: F ...
- Cocos2d-x 精灵碰撞检測(方法二)
将"Cocos2d-x 精灵碰撞检測(方法一)" update函数改动一下. 使用精灵boundingBox函数获取直接精灵边界框, 不用自己计算精灵矩形大小了,还比較精确,然后调 ...
- python字符串方法以及注释
转自fishC论坛:http://bbs.fishc.com/forum.php?mod=viewthread&tid=38992&extra=page%3D1%26filter%3D ...
- 静态化 - 伪静态技术(PHP正则表达式实现)
效果: 代码: <?php // + —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— // + 正则表达式,实 ...
- BZOJ 1036: [ZJOI2008]树的统计Count( 树链剖分 )
树链剖分... 不知道为什么跑这么慢 = = 调了一节课啊跪.. ------------------------------------------------------------------- ...