콘텐츠로 이동

SET TRANSACTION

SET TRANSACTION#

구문#

set_transaction ::=#

set_transaction_image255

설명#

SET TRANSACTION 구문은 현재 세션에서 수행되는 트랜잭션에 read only, read/write 또는 고립화 수준(isolation level)을 설정할 수 있다.

고립화 수준을 READ COMMITTED 또는 SERIALIZABLE로 설정하면 행 수준 잠금과 다중버전 제어기법의 조합을 통하여 높은 수준의 데이터 일관성, 동시성 그리고 성능을 제공한다.

SET TRANSACTION 구문에 의해 수행된 동작들은 다른 사용자들이나 다른 트랜잭션이 아닌 오로지 현재 트랜잭션에만 영향을 미친다.

다음과 같은 3개의 고립화 수준 중 하나를 설정할 수 있다.

READ COMMITTED#

테이블 내의 커밋된 데이터에 대해 읽기를 허용하며, 커밋되지 않은 데이터에 대해서는 이전 버전의 값을 읽도록 동작한다. Altibase의 기본 고립화 수준은 READ COMMITTED이다.

REPEATABLE READ#

트랜잭션이 읽어간 데이터에 대해 그 트랜잭션이 완료될 때까지 잠금을 걸어서, 해당 데이터에 대한 다른 트랜잭션의 변경을 금지한다. 이러한 동작은 반복적으로 그 값을 다시 읽었을 때도 항상 같은 값이 반환될 것을 보장한다. 그러나 잠금이 걸려 있는 상태에서도 읽어간 검색 범위안에 포함되는 새로운 레코드를 다른 트랜잭션이 삽입하는 것은 가능하다. 이러한 레코드는 잠금을 걸고 있는 읽기 트랜잭션에 의한 최초 조회시에는 보이지 않았지만 삽입 이후에는 보일 것이다. 이를 "Phantom Reads"라고 한다.

SERIALIZABLE#

이는 가장 높은 고립화 수준이다. 이는 한번 SELECT하여 가져간 모든 데이터에 공유잠금을 걸뿐만 아니라, 그 검색 범위안에 있는 모든 키 값에 대해서도 잠금을 걸게 된다. 이는 "phantom reads"를 방지하는 효과를 내어 트랜잭션의 독립성(isolation)을 보장한다.

주의 사항#

현재 세션이 AUTOCOMMIT 모드일 경우에는 이 구문을 사용할 수 없다.

활성화된 트랜잭션이 있을 경우에는 이 구문을 사용할 수 없다.

예제#

iSQL> AUTOCOMMIT OFF;
Set autocommit off success.

iSQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
Command execute success.

iSQL> SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Command execute success.
Transaction A Time Point Transaction B
iSQL> AUTOCOMMIT OFF;
Set autocommit off success.
iSQL> AUTOCOMMIT OFF;
Set autocommit off success.
iSQL> SET TRANSACTION READ ONLY;
Command execute success.
1
iSQL> SELECT e_last name FROM employees WHERE eno = 20;
E_LASTNAME
------------------------
Blake
1 row selected.
2
3 iSQL> UPDATE employees SET e_lastname = 'Jung' WHERE eno = 20;
1 row updated.
iSQL> SELECT e_lastname FROM employees WHERE eno = 20;
E_LASTNAME
------------------------
Blake
1 row selected.
4
5 iSQL> commit;
Commit success.
iSQL> SELECT e_lastname FROM employees WHERE eno = 20;
E_LASTNAME
------------------------
Jung
1 row selected.
6