1. Transaction
- 더 이상 분할할 수 없는 최소 수행 단위를 뜻하며, 하나의 작업 또는 밀접하게 연관된 작업을 수행하기 위해 한 개 이상의 DML로 이뤄진다. 즉 어떤 기능 한 가지를 수행하는 SQL문 덩어리라고 볼 수 있다.
- 하나의 트랜잭션 내에 있는 여러 명령어를 한 번에 수행하여 작업을 완료하거나 아예 모두 수행하지 않는 상태, 즉 모든 작업을 취소한다.
- 트랜잭션을 제어하기 위해 사용하는 명령어를 TCL(Transaction Control Language)이라고 한다. 트랜잭션은 TCL 명령어를 사용하는 시점에 끝나며 새로운 트랙잭션이 시작된다.
1.1 ACID
- 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 의미한다.
특성 | 설명 |
Atomicity(원자성) | 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 혹은 전혀 실행되지 않는다. |
Consistency(일관성) | 트랜잭션 실행 전 일관성 있던 데이터베이스는 종료된 후에도 일관성 있는 데이터베이스 상태를 유지한다. |
Isolation(고립성) | 트랜잭션 실행 중 다른 트랜잭션의 영향을 받지 않는다. |
Durability(지속성) | 트랜잭션이 성공적으로 종료되면 해당 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다. |
2. TCL(Transaction Control Language)
- 데이터 조작을 데이터베이스에 영구히 반영하거나 작업 전체를 취소한다.
명령어 | 설명 |
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://mozi.tistory.com/209
- https://ko.wikipedia.org/wiki/ACID
- http://wiki.gurubee.net/pages/viewpage.action?pageId=22904833
'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 |