[SQL] 트랜잭션(Transaction) 개념 및 오라클 예제
1. 트랜잭션(Transaction)이란?
트랜잭션(Transaction)은 데이터베이스에서 **하나의 논리적인 작업 단위**를 의미합니다.
즉, 여러 개의 SQL 문장을 하나의 작업 단위로 묶어 **모두 성공하거나, 모두 실패해야 하는 원칙**을 따릅니다.
✔️ 예시: 은행 계좌 이체를 생각해보면, - A 계좌에서 **100만 원을 출금**하고 - B 계좌에 **100만 원을 입금**하는 작업은 **둘 중 하나라도 실패하면 전체 작업이 취소되어야 합니다.**
2. 트랜잭션의 주요 특성 (ACID 원칙)
- ✅ 원자성(Atomicity): 트랜잭션 내의 모든 작업이 **모두 수행되거나, 전혀 수행되지 않아야 함**
- ✅ 일관성(Consistency): 트랜잭션 실행 후에도 **데이터의 무결성이 유지되어야 함**
- ✅ 격리성(Isolation): 하나의 트랜잭션이 실행되는 동안 **다른 트랜잭션의 영향을 받지 않아야 함**
- ✅ 지속성(Durability): 트랜잭션이 성공적으로 완료되면 **영구적으로 저장되어야 함**
3. 오라클에서 트랜잭션 사용 예제
✅ 1) 트랜잭션 시작과 종료 (COMMIT & ROLLBACK)
-- 계좌 이체 예제
UPDATE accounts SET balance = balance - 100000 WHERE account_id = 'A001';
UPDATE accounts SET balance = balance + 100000 WHERE account_id = 'B001';
-- 모든 작업이 정상적으로 수행되었을 경우 확정(COMMIT)
COMMIT;
-- 문제가 발생했을 경우 이전 상태로 복구(ROLLBACK)
ROLLBACK;
✅ 2) SAVEPOINT를 활용한 부분 롤백
-- 특정 지점에서 저장
SAVEPOINT step1;
-- 일부 데이터 수정
UPDATE accounts SET balance = balance - 50000 WHERE account_id = 'A001';
-- 문제가 발생하면 여기까지만 롤백 가능
ROLLBACK TO step1;
-- 최종적으로 확정
COMMIT;
4. 트랜잭션 격리 수준 (Isolation Level)
여러 트랜잭션이 동시에 실행될 때, 데이터 충돌을 방지하기 위해 **격리 수준(Isolation Level)**을 설정할 수 있습니다.
격리 수준 | 설명 | 발생 가능 문제 |
---|---|---|
READ UNCOMMITTED | 다른 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있음 | Dirty Read |
READ COMMITTED | 다른 트랜잭션이 **커밋된 데이터만** 읽을 수 있음 | Non-repeatable Read |
REPEATABLE READ | 트랜잭션이 시작될 때 조회한 데이터는 변경되지 않음 | Phantom Read |
SERIALIZABLE | 트랜잭션을 순차적으로 실행하여 충돌을 방지 | 성능 저하 |
✅ 오라클에서 격리 수준 설정 예제
-- READ COMMITTED (오라클 기본 격리 수준)
ALTER SESSION SET ISOLATION LEVEL READ COMMITTED;
-- SERIALIZABLE 격리 수준으로 변경
ALTER SESSION SET ISOLATION LEVEL SERIALIZABLE;
5. 트랜잭션이 중요한 이유
- ✔ **데이터 무결성을 유지** (데이터 손실 방지)
- ✔ **여러 작업을 안전하게 수행** (은행 계좌 이체, 주문 처리 등)
- ✔ **데이터 충돌을 방지** (다중 사용자 환경에서도 안정적인 데이터 처리)
🔍 결론
트랜잭션은 데이터베이스에서 매우 중요한 개념이며, 특히 **안정적인 데이터 처리를 위해 ACID 원칙을 반드시 지켜야 합니다.**
또한, 오라클에서는 트랜잭션을 활용하여 **데이터 무결성을 보장하고, 복구 기능을 사용할 수 있습니다.**
📖 다른 SQL 개념도 함께 확인하세요!
'SQL & 데이터베이스 > 데이터 무결성 & 트랜잭션' 카테고리의 다른 글
ORA-00060: Deadlock Detected 오류 해결 방법 (0) | 2025.03.24 |
---|---|
[SQL] 데이터 정규화(Normalization)란? - 개념과 장단점, 과정별 설명 (0) | 2025.03.13 |
[SQL] PRIMARY KEY vs UNIQUE KEY 차이점 (0) | 2025.03.12 |
[SQL] Deadlock(교착 상태) 문제 해결 방법 (0) | 2025.03.11 |