Whiteship's Note

Chapter 10: Transactions

DB/SQL : 2008.01.06 20:46


참조 : The Programmer's Guide to SQL

트랜잭션의 특징 ACID
    - Atomic
    - Consistency
    - Isolation
    - Durable

오라클은 기본으로 Auto Transaction 상태.
    - 첫 번째 SQL문을 실행할 때, 트랜잭션이 자동으로 시작 됨.
    - 따라서 START TRANSACTION(SQL-99 표준) 을 사용하지 않아도 됨.
    - 그러나 10g에서는 기본으로 오토커밋 상태임.

사용자 삽입 이미지

오토커밋
    - 이 상태에서는 모든 SQL문을 개별 트랜잭션으로 처리함.
    - SET AUTOCOMMIT ON/OFF 오라클에서 오토커밋 상태로 전환 하는 방법.

롤백하기
    - ROLLBACK [세이브포인트 이름]
    - SAVEPOINT 이름 생략하면, 트랜잭션 시작 이전 상태로 돌아감.

세이브포인트 만들기
    - SAVEPOINT [이름];

커밋하기
    - COMMIT

트랜잭션 예제

BEGIN

   INSERT INTO Student (StudentID, Name) VALUES (101, 'Dave');
   INSERT INTO Student (StudentID, Name) VALUES (102, 'Claire');

   SAVEPOINT BeforeAddingAnne;
   INSERT INTO Student (StudentID, Name) VALUES (103, 'Anne');
   ROLLBACK TO BeforeAddingAnne;

   COMMIT;

EXCEPTION
   WHEN OTHERS
      THEN ROLLBACK;
END;
/

오라클의 Isolation level
    - 기본은 Read Commited
    - Read Uncommited와 Repeatable Read는 지원하지 않음.
    - Isolaction Level 변경하는 방법
    SET TRANSACTION
    { { READ ONLY | READ WRITE }
      | ISOLATION LEVEL
        { READ COMMITTED
        | SERIALIZABLE } };

동기화 테스트 하려면, 오토커밋 상태가 아닌 상태에서 두 개의 창을 띄워 놓고 하면 됨.(READ COMMITED 상태)
    - 한 쪽 창에서 한 개의 레코드를 추가한다.
    - 추가 됐는지 SELECT 문으로 확인한다.
    - 다른 쪽 창에서 SELECT 해본다.
    - 다른 쪽 창에는 첫 번째 창에서 추가한 레코드가 보이지 않는다.
    - 첫 번째 창의 SQL이 아직 커밋되지 않았기 때문이다.
    - 첫 번째 창에서 COMMIT 을 실행한다.
    - 두 번째 창에서 SELECT로 확인한다. 이번에는 보인다.

top