공부/데이터베이스

[오라클로 배우는 데이터베이스 입문] 11. 트랜잭션 제어와 세션

losey_J 2022. 3. 30. 18:06

1. 하나의 단위로 데이터를 처리하는 트랜잭션

- 트랜잭션이란? 더 이상 분할할 수 없는 최소 수행 단위, 어떤 기능 한 가지를 수행하는 SQL덩어리

○ 트랜잭션의 특징: 하나의 트랜잰션 내에 있는 여러 명령어를 한 번에 수행하여 작업을 완료하거나 아예 모두를 수행하지 않는 상태, 모든 작업 취소(ALL OR NOTHING)이어야 함

-TCL(Transaction Control Language): 트랜잭션을 제어하기 위한 명령어

2. 트랜잭션을제어하는 명령어

DEPT테이블 복사로 DEPT_TCL테이블 생성
데이터 삽입, 삭제, 갱신해보기(위의 원본과 비교)

- 트랜잭션을 취소하고 싶을 때 쓰는 ROLLBACK : 현재 트랜잭션에 포함된 데이터 조작 관련 명령어의 수행을 모두 취소

ROLLBACK명령어로 취소된 삽입, 삭제, 갱신

- 트랜잭션을 영원히 반영하고 싶을 때 쓰는 COMMIT: 수행한 명령어를 데이터베이스에 영구히 반영할 때 사용

※ COMMIT실행 후 반영된 데이터내용은 되돌릴 수 없으므로 신중하게 진행해야 함

① COMMIT이후 ②의 데이터가 영구히 반영되어 ③과 같이 ROLLBACK해도 소용 없음

3. 세션과 읽기 일관성의 의미

 

- 세션이란? 어떤 활동을 위한 시간이나 기간으로 데이터베이스 접속을 시작으로 여러 데이터베이스에서 관련 작업 수행 후 접속을 종료하기까지 전체 기간을 의미

세션과 트랜잭션의 관계

- 읽기 일관성의 중요성

○ 읽기 일관성이란? 어떤 특정 세션에서 테이블의 데이터를 변경 중일 때 그 외 다른 세션에서는 데이터의 변경이 확정되기 전까지 변경사항을 알 필요가 없으므로 데이터를 변경중인 세션을 제외한 나머지 세션에서는 현재 진행중인 변경과 무관한 본래의 데이터를 보여주는 특성

※ 하나의 데이터베이스에는 수많은 세션이 연결되고 각 세션에서는 여러 트랜잭션이 끊임없이 시작,종료하기 때문에 데이터를 직접 변경중인 해당 세션을 제외한 모든 섹션은 확정된 데이터만 검색됨으로써 읽기 일관성을 보장함

세션 개념 알아보기
세션A의 데이터 삭제가 적용되지 않은 세션B

 

세션A의 COMMIT 후에 삭제가 반영된 세션B

4. 수정 중인 데이터 접근을 막는 LOCK

- LOCK이란? 특정 세션에서 조작중인 데이터는 트랜잭션이 완료되기 전까지 다른 섹션에서 조작할 수 없도록 접근을 보류시키는 것

LOCK개념 알아보기_별다른 작업을 하지 않은 세션
세션A의 작업이 COMMIT or ROLLBACK할 때까지 잠겨있는 세션B
세션A의 COMMIT이 완료되어 보류된 UPDATE문이 실행된 세션B

- LOCK 종류

○ 행 레벨 록(row level lock): SQL문으로 조작하는 대상 데이터가 테이블의 특정 행 데이터인경우 해당 행만 LOCK 발생

○ 테이블 레벨 록(table level lock): 테이블에 변경되는 행 수와 상관없이 데이터 조작 명령어를 사용하여 데이터가 변경중인 테이블인 경우 테이블 단위의 LOCK 발생

EX) WHERE절을 지정하지 않은 UPDATE, DELETE문(단, LOCK상태여도 INSERT문은 수행 가능)