본문 바로가기
BackEnd/DB, SQL

SQL 15편: 트랜잭션과 세션 (ROLLBACK, COMMIT, 읽기 일관성, LOCK, HANG)

by summer_light 2022. 1. 3.

트랜잭션

- 한 개 이상의 데이터 조작 명령어(DML)로 이루어진 어떤 기능 한 가지를 수행하는 SQL문 덩어리이다.

- 하나의 트랜잭션 내에 있는 여러 명령어를 한 번에 수행하여 작업을 완료하거나 아예 모두 수행하지 않는 상태, 즉 모든 작업을 취소하도록 한다. ='ALL OR NOTHING' 

- 트랜잭션을 제어하기 위해 사용하는 명령어를 TCL이라고 하며, COMMIT과 ROLLBACK이 이에 해당된다. 

- 데이터베이스에 접속하는 동시에 시작되어 TCL, DDL, DCL을 실행할 때 기존 트랜잭션이 끝나고 새 트랜잭션이 시작되는 것이 반복된다.

 

ROLLBACK :트랜잭션을 취소하고 싶을 때

현재 트랜잭션에 포함된 데이터 조작 관련 명령어의 수행을 모두 취소한다. 

명령어가 취소될 경우에 대비해 변경 전 데이터를 언두 세그먼트(undo segment)에 따로 저장해둔 것을 불러온다. 

 

COMMIT :트랜잭션을 영구하게 반영하고 싶을 때

현재 트랜잭션에 포함된 데이터 조작 관련 명령어의 수행을 모두 반영한다. 

 

 

 

 

세션

- 데이터베이스에서 세션은 데이터베이스 접속을 시작으로 여러 데이터베이스에서 관련 작업을 수행한 후 접속을 종료하기까지 전체 기간을 의미한다.

- 세션이 여러 개라는 말의 의미는 현재 데이터베이스에 접속하여 사용 중인 연결이 여러 개 있다는 뜻이다. 즉 서로 다른 프로그램에서 해당 데이터베이스에 연결 중이라는 것이다. (같은 계정으로 접속하여도 세션은 각각이다.)

 

트랜잭션과 세션의 관계

세션이 트랜잭션보다 큰 범위의 개념이다.  

트랜잭션은 데이터 조작 명령어가 모인 하나의 작업 단위를 뜻하고,

세션은 데이터베이스에 접속한 후 종료하기까지의 과정을 의미하기 때문이다. 

 

읽기 일관성

데이터베이스는 여러 곳에서 동시에 접근하여 데이터를 관리/사용하는 것이 목적이므로 대부분 수많은 세션이 동시에 연결되어 있다. 이 때 어떤 특정 세션에서 테이블의 데이터를 변경 중일 때 그 외 다른 세션에서는 데이터의 변경이 확정되기 전까지 변경 사항을 알 필요가 없으므로, 데이터를 변경 중인 세션을 제외한 나머지 세션에서는 현재 진행 중인 변경과 무관한 본래의 데이터를 보여주는 특성을 말한다. 즉 데이터 조작이 포함된 트랜잭션이 완료(COMMIT, ROLLBACK)되기 전까지 데이터 조작 전의 내용이 조회/출력/검색 되는 특성을 읽기 일관성이라고 한다. 

 

LOCK

특정 세션에서 조작중인 데이터는 트랜잭션이 완료되기 전까지 다른 세션에서 조작할 수 없는 상태가 된다. 이 때 데이터가 LOCK되었다고 표현한다. 조작 데이터가 특정 행 데이터일 경우에는 해당 행만 LOCK 이 발생한다는 의미의 '행 레벨 록'이 발생한다. 테이블 전체 행이 LOCK 상태여도 INSERT문의 수행은 가능하다. 하지만 테이블에 변경되는 행의 수와는 사오간없이 데이터 조작 명령어를 사용하여 데이터가 변경 중인 테이블은 테이블 단위 잠금이라는 의미로 '테이블 레벨 록'이 걸린다. 즉, 데이터를 변경 중인 세션 외 다른 세션에서 DDL을 통한 테이블의 구조를 변경할 수는 없다. 

 

HANG

조작 중인 세션에서 COMMIT/ROLLBACK 을 통해 트랜잭션을 완료하기 전까지, 다른 세션에서 해당 데이터 조작을 기다리는 현상을 HANG이라고 한다. 다른 트랜잭션이 완료되면, 자동으로 적어두었던 명령어를 실행한다. 

 

 

 

댓글