演示Oracle 11g中的会话隔离级别

时间:2013-11-11 22:10:24

标签: sql oracle oracle11g locking isolation-level

我正在写一篇论文,演示Oracle 11g的花里胡哨,我很难展示锁定。我正在尝试使用会话隔离级别来显示可以防止“脏读”但是我的示例代码似乎允许它们但是我的第二个SELECT似乎看到了我的INSERTed行即使有SERIALIZABLE隔离级别:

/* --------------- */
ALTER SESSION SET ISOLATION_LEVEL=SERIALIZABLE;   
set transaction name 'gen_trx';
select count(*) from genres;
-- 135
insert into genres
VALUES (60,'Bar');
select count(*) from genres;
-- 136
COMMIT;
select count(*) from genres;
-- 136

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

您当前的会话始终可以读取未提交的行,并且无法从其他会话中读取未提交的行。 Oracle不允许读取未提交的事务read more

测试它必须在没有提交的情况下在两个不同的会话中运行代码。

如果Oracle确实允许脏读,那么当并行会话进行未提交的条目时,你应该获得超过136行。

您将找到有关Oracle 11g事务隔离级别here

的更多信息