[오라클로 배우는 데이터베이스 입문] 11. 트랜잭션 제어와 세션
1. 하나의 단위로 데이터를 처리하는 트랜잭션
- 트랜잭션이란? 더 이상 분할할 수 없는 최소 수행 단위, 어떤 기능 한 가지를 수행하는 SQL덩어리
○ 트랜잭션의 특징: 하나의 트랜잰션 내에 있는 여러 명령어를 한 번에 수행하여 작업을 완료하거나 아예 모두를 수행하지 않는 상태, 모든 작업 취소(ALL OR NOTHING)이어야 함
-TCL(Transaction Control Language): 트랜잭션을 제어하기 위한 명령어
2. 트랜잭션을제어하는 명령어
- 트랜잭션을 취소하고 싶을 때 쓰는 ROLLBACK : 현재 트랜잭션에 포함된 데이터 조작 관련 명령어의 수행을 모두 취소
- 트랜잭션을 영원히 반영하고 싶을 때 쓰는 COMMIT: 수행한 명령어를 데이터베이스에 영구히 반영할 때 사용
※ COMMIT실행 후 반영된 데이터내용은 되돌릴 수 없으므로 신중하게 진행해야 함
3. 세션과 읽기 일관성의 의미
- 세션이란? 어떤 활동을 위한 시간이나 기간으로 데이터베이스 접속을 시작으로 여러 데이터베이스에서 관련 작업 수행 후 접속을 종료하기까지 전체 기간을 의미
- 읽기 일관성의 중요성
○ 읽기 일관성이란? 어떤 특정 세션에서 테이블의 데이터를 변경 중일 때 그 외 다른 세션에서는 데이터의 변경이 확정되기 전까지 변경사항을 알 필요가 없으므로 데이터를 변경중인 세션을 제외한 나머지 세션에서는 현재 진행중인 변경과 무관한 본래의 데이터를 보여주는 특성
※ 하나의 데이터베이스에는 수많은 세션이 연결되고 각 세션에서는 여러 트랜잭션이 끊임없이 시작,종료하기 때문에 데이터를 직접 변경중인 해당 세션을 제외한 모든 섹션은 확정된 데이터만 검색됨으로써 읽기 일관성을 보장함
4. 수정 중인 데이터 접근을 막는 LOCK
- LOCK이란? 특정 세션에서 조작중인 데이터는 트랜잭션이 완료되기 전까지 다른 섹션에서 조작할 수 없도록 접근을 보류시키는 것
- LOCK 종류
○ 행 레벨 록(row level lock): SQL문으로 조작하는 대상 데이터가 테이블의 특정 행 데이터인경우 해당 행만 LOCK 발생
○ 테이블 레벨 록(table level lock): 테이블에 변경되는 행 수와 상관없이 데이터 조작 명령어를 사용하여 데이터가 변경중인 테이블인 경우 테이블 단위의 LOCK 발생
EX) WHERE절을 지정하지 않은 UPDATE, DELETE문(단, LOCK상태여도 INSERT문은 수행 가능)