推荐一篇文章—oracle的事物隔离级别(isolation_level)

书影 2010-12-21 08:35:13
今天看到数据库的恢复技术那一章,关于事务的这一块有些不明白,做隔离测试的时候遇到一些问题。
上百度搜到一篇文章,写得很详细很清楚。
推荐上来看看。
文章来自百度空间——风沙度。
(主要是为了交流。不知道会不会侵权什么的,会的话和我说,我马上道歉。。。。)

oracle的事物隔离级别
(isolation_level)

有人问到,原来有点印象,现在整理一下。

首先说,隔离级别定义了事务与事务之间的隔离程度。隔离程度与并发度成反比。

oracle提供了两种隔离级别,分别是

read committed,递交后可读(默认级别)

serializable,序列化执行,仅能看到当前事物开始之前,其他事物已提交的和本事物中的操作。

有朋友说还有第三种,read only,这种级别在export 时,加入object_consistent=y 时生效,不能手动设置

测试如下:

设置事物1

SQL> alter session set isolation_level=serializable;

会话已更改。

SQL> select count(*) from emp;

COUNT(*)
----------
0

SQL> insert into emp (empno) values (1);

已创建 1 行。

SQL> select count(*) from emp;

COUNT(*)
----------
1

开启另外一个事物2

SQL> select count(*) from emp;

COUNT(*)
----------
0

SQL> insert into emp (empno) values(2);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select count(*) from emp;

COUNT(*)
----------
1

回到事物1中,

SQL> select count(*) from emp;

COUNT(*)
----------
1

此时,无法看到事物2递交的数据。把事物1递交后,事情发生变化,

SQL> commit;

提交完成。

SQL> select count(*) from emp;

COUNT(*)
----------
2

能看到事物2递交的数据了。

测试2

在事物2中更新操作

SQL> select empno,ename from emp;

EMPNO ENAME
---------- ----------
1
2

SQL> update emp set ename='tom' where empno=1;

已更新 1 行。

SQL> rollback;

回退已完成。

SQL> update emp set ename='tom' where empno=1;

已更新 1 行。

事物1中修改事物2所修改的行,

SQL> update emp set ename=ename||'jack' where empno=1;

此时,锁的原因,事物1等待。

如果事物2执行rollback,则事物1递交。

如果事物2执行commit,则事物1抛出ORA-08177: 无法连续访问此事务处理的异常,因为事物1看不到事物2的修改,且想在事物2修改的基础上再次修改,所以出错。

设置隔离级别:

alter session set isolation_level={serializable||read committed};


...全文
177 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
写代码的大熊 2010-12-21
  • 打赏
  • 举报
回复
数据库的隔离级别共有四种:
1.read uncommit 未提交读,即就是数据没有提交就可以查询到
2.read committed 提交读,即就是只有完成了commit 操作后才能读到数据
3.repeated read 可重复读
4.serializable 序列,

级别依次递增,一般的Oracle用的是 read committed ,mysql 用的是 repeated read
iihero_ 2010-12-21
  • 打赏
  • 举报
回复
不错的介绍。不过,演示当中,没有把会话和事务区分清楚。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧