Chapter 10: Transactions
참조 : 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
트랜잭션 예제
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로 확인한다. 이번에는 보인다.