j2ee‎ > ‎

Transaction 분리 Level (Transaction Isolation Level)

posted Jun 20, 2010, 7:40 PM by Kuwon Kang

용어 설명

1. Dirty Read

어떤 트렌젝션이 데이타를 변경하고, COMMIT 하지 않았을때도, 다른 트렌젝션에서 값을 읽으면 변경된 값이 반영되는 경우이다.

1) TX_A 시작되고, SELECT NAME FROM TABLE_A WHERE ID=1에서 ORIGIN 출력되었다고 가정하자.

2) TX_B에서 UPDATE TABLE_A SET NAME=”CHANGED” WHERE ID =1 실행한후

3) TX_A 시작되고, SELECT NAME FROM TABLE_A WHERE ID=1에서 CHANGED 출력된다.

2)에서 UPDATE 내용을 COMMIT하지 않았는데도 반영이 되면 이를 Dirty Read라고 한다.

2. NonRepeatable Read (Fuzzy Read)

어떤 트렌젝션이 데이타를 변경 (update delete 해당됨)하고, COMMIT 하면, COMMIT 내용은 다른 트렌젝션에 반영된다.insert 내용은 반영되지 않는다.

1) TX_A 시작되고, SELECT NAME FROM TABLE_A WHERE ID=1에서 ORIGIN 출력되었다고 가정하자.

2) TX_B에서 UPDATE TABLE_A SET NAME=”CHANGED” WHERE ID =1 실행한후

3) TX_A에서 SELECT NAME FROM TABLE_A WHERE ID=1하면 ORIGIN 출력된다.

4) TX_B COMMIT한후

5) SELECT NAME FROM TABLE_A WHERE ID=1하면 CHAGNED 출력된다.

3. Phantom Read

어떤 트렌젝션이 새로운 데이트를 삽입(Insert)하고, COMMIT하면, COMMIT 내용은 다른 트렌젝션에 반영된다. (NonRepeatable read 같으나, NonRepetable update,delete, Phantom Read insert 내용이 반영된다.)

1) TX_A 시작되고, SELECT COUNT(*) FROM TABLE_A WHERE GRP=1에서 10 출력되었다고 가정하자.

2) TX_B에서 INSERT INTO TABLE_A (ID,GRP) VALUES(100,1);

3) TX_A에서 SELECT COUNT(*) FROM TABLE_A WHERE GRP=1하면 10 출력된다.

4) TX_B COMMIT한후

5) TX_A에서 SELECT COUNT(*) FROM TABLE_A WHERE GRP=1하면 11 출력된다

Isolation Level

ANSI/ISO SQL 표준 (SQL92)에서는 4가지 Isolation Level 지원하는데. 내용은 간단하게 다음과 같은 표로 정리된다.

Isolation Level

Dirty Read

NonRepetable Read

Phantom Read

Read uncommitted

Possible

Possible

Possible

Read committed

Not Possible

Possible

Possible

Repetable read

Not Possible

Not Possible

Possible

Serializable

Not Possible

Not Possible

Not Possible

How to setup Oracle and Java Isolation Level

많이 사용하고있는 Oracle DBMS 경우에는 Default Read Commited 설정이 되어 있으며, Oracle 9(현재)까지, Isolation Level Read commited, Serializable 두가지만 지원하고 있다.

Oracle에서 Isolation Level 변경하는 방법은 SQL PLUS에서 LEVEL 따라서 다음과 같은 명령어를 치면된다.

SET TRANSACTION ISOLATION LEVEL READ COMMITED;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

아래 사이트에서 발췌...

Comments