1. Transaction

- 더 이상 분할할 수 없는 최소 수행 단위를 뜻하며, 하나의 작업 또는 밀접하게 연관된 작업을 수행하기 위해 한 개 이상의 DML로 이뤄진다. 즉 어떤 기능 한 가지를 수행하는 SQL문 덩어리라고 볼 수 있다.

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

- 트랜잭션을 제어하기 위해 사용하는 명령어를 TCL(Transaction Control Language)이라고 한다. 트랜잭션은 TCL 명령어를 사용하는 시점에 끝나며 새로운 트랙잭션이 시작된다.

 

1.1 ACID

- 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 의미한다.

특성 설명
Atomicity(원자성) 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 혹은 전혀 실행되지 않는다.
Consistency(일관성) 트랜잭션 실행 전 일관성 있던 데이터베이스는 종료된 후에도 일관성 있는 데이터베이스 상태를 유지한다.
Isolation(고립성) 트랜잭션 실행 중 다른 트랜잭션의 영향을 받지 않는다.
Durability(지속성) 트랜잭션이 성공적으로 종료되면 해당 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

2. TCL(Transaction Control Language)

- 데이터 조작을 데이터베이스에 영구히 반영하거나 작업 전체를 취소한다.

TCL 예시

명령어 설명
COMMIT 지금까지 수행한 트랜잭션 명령어를 데이터베이스에 영구히 반영한다.
ROLLBACK 현재 트랜잭션에 포함된 데이터 조작 관련 명령어의 수행을 모두 취소한다.
SAVEPOINT - 트랜잭션에 포함된 전체 작업이 아닌 현 시점에서 SAVEPOINT 시점까지의 일부만 ROLLBACK 할 수 있도록 설정한다.
- 복수의 SAVEPOINT 설정이 가능하다.
/* COMMIT 예시 */
COMMIT;

/* ROLLBACK 예시 */
ROLLBACK;
ROLLBACK TO SP1;
ROLLBACK TO SP2;

/* SAVEPOINT 예시 */
SAVEPOINT SP1;
SAVEPOINT SP2;

 

3. Session

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

- 트랜잭션은 데이터 조작 명령어가 모인 하나의 작업 단위를 뜻하고, 세션 내부에는 하나 이상의 트랜잭션이 존재한다. 즉 세션이 트랜잭션보다 큰 범위의 개념이다.

 

3.1 Read Consistency(읽기 일관성)

- 어떤 특정 세션에서 데이터를 변경 중일 때, 데이터를 변경 중인 세션을 제외한 나머지 세션에서는 현재 진행 중인 변경과 무관한 본래의 데이터를 보여주는 특성을 의미한다.

- 어떤 데이터 조작이 포함된 트랜잭션이 COMMIT 혹은 ROLLBACK되기 전까지 데이터를 직접 조작하는 세션 외 다른 세션에서는 데이터 조작 전 상태의 내용이 일관적으로 조회, 출력, 검출되는 특성이다.

 

3.2 Undo Segment

- 오라클 9i 이전엔 Rollback Segment라고 불렸다. 이후 버전부터 Undo Segment라는 용어를 사용한다.

- 읽기 일관성을 유지시켜준다.

- 변경 전 데이터를 저장함으로써 Transaction Rollback 및 Recovery를 가능하게 한다.

 

4. LOCK

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

- 아래 두 가지 외에도 다양한 종류의 LOCK이 존재한다.

종류 설명
row level lock 복수의 트랜잭션이 동시에 같은 로우를 변경하는 것을 방지한다.
table level lock 현재 트랜잭션이 갱신 중인 테이블에 대한 테이블 구조 변경을 방지한다.

 

4.1 HANG

- 특정 세션에서 데이터 조작이 완료될 때까지 다른 세션에서 해당 데이터 조작을 기다리는 현상이다.

 

참고

- 『오라클로 배우는 데이터베이스 입문』

- https://wikidocs.net/4098

- https://mozi.tistory.com/209

- https://ko.wikipedia.org/wiki/ACID

- http://wiki.gurubee.net/pages/viewpage.action?pageId=22904833 

- http://www.gurubee.net/lecture/1868

'Database' 카테고리의 다른 글

Data Dictionary  (0) 2021.10.26
DDL(Data Definition Language)  (0) 2021.10.25
Schema  (0) 2021.10.21
DML(Data Manipulation Language)  (0) 2021.10.21
Oracle 테이블 및 데이터 복사  (0) 2021.10.21