0

私は、Oracle 11g のさまざまな機能を説明する論文を書いていますが、ロックの説明に苦労しています。セッション分離レベルで「ダーティ読み取り」を防止できることを示そうとしていますが、サンプル コードではそれらを許可しているようですが、2 番目の SELECT では、SERIALIZABLE 分離レベルでも 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 はコミットされていないトランザクションの読み取りを許可していません 続きを読む

テストするには コミットせずに 2 つの異なるセッションでコードを実行する必要があります。

Oracle がダーティ リードを許可していた場合、並列セッションがコミットされていないエントリを作成しているときに、136 行を超える行を取得していたはずです。

Oracle 11g トランザクション分離レベルの詳細については、こちらを参照してください。

于 2014-11-12T08:20:36.897 に答える