0

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

/* --------------- */
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

我在这里想念什么?

4

1 回答 1

2

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

要对其进行测试,您必须在两个不同的会话中运行您的代码而无需提交。

因为如果 Oracle 确实允许脏读,那么当并行会话正在创建未提交的条目时,您应该获得超过 136 行。

您将在此处找到有关 Oracle 11g 事务隔离级别的更多信息

于 2014-11-12T08:20:36.897 回答