반응형
1. SAVEPOINT란?
SAVEPOINT는 오라클 데이터베이스에서 트랜잭션 내의 특정 지점을 저장하는 기능입니다. 트랜잭션이 진행되는 동안 여러 SAVEPOINT를 설정하면, 필요할 경우 특정 지점까지 작업을 복구(롤백)할 수 있습니다.
이 기능은 복잡한 트랜잭션 처리 중 일부 작업만 취소하고 나머지 작업은 유지하려는 경우 유용합니다.
2. SAVEPOINT의 특징
- 트랜잭션 내에서만 유효
- SAVEPOINT는 하나의 트랜잭션 내에서만 사용되며, 트랜잭션이 종료되면(커밋 또는 롤백) 해당 SAVEPOINT도 사라집니다.
- 부분 롤백 지원
- 특정 SAVEPOINT까지 롤백할 수 있으며, 이후의 작업만 취소됩니다.
- SAVEPOINT 이름 지정
- 각 SAVEPOINT는 고유한 이름으로 설정되며, 이름을 기준으로 롤백을 수행합니다.
3. SAVEPOINT 사용법
- SAVEPOINT 설정
- 트랜잭션 중간에 SAVEPOINT를 설정합니다.
- SAVEPOINT savepoint_name;
- SAVEPOINT로 롤백
- 지정한 SAVEPOINT로 롤백하여 이후의 작업만 취소합니다.
- ROLLBACK TO savepoint_name;
- SAVEPOINT 이후 작업
- 롤백 이후에도 트랜잭션은 유지되며, 추가 작업을 계속할 수 있습니다.
4. SAVEPOINT 예제
예제 시나리오
직원 테이블(employees)에서 데이터 삽입, 수정, 삭제 작업을 수행하는 트랜잭션 중 SAVEPOINT를 사용하여 특정 지점으로 롤백하는 과정입니다.
데이터 초기 상태
employee_id name salary
1 | 홍길동 | 5000000 |
2 | 이몽룡 | 4500000 |
트랜잭션 실행
-- 1. 트랜잭션 시작
BEGIN;
-- 2. 데이터 삽입
INSERT INTO employees (employee_id, name, salary)
VALUES (3, '성춘향', 4800000);
-- SAVEPOINT 설정
SAVEPOINT after_insert;
-- 3. 데이터 수정
UPDATE employees
SET salary = salary + 500000
WHERE employee_id = 1;
-- SAVEPOINT 설정
SAVEPOINT after_update;
-- 4. 데이터 삭제
DELETE FROM employees
WHERE employee_id = 2;
-- 현재 상태 확인
SELECT * FROM employees;
현재 테이블 상태
employee_id name salary
1 | 홍길동 | 5500000 |
3 | 성춘향 | 4800000 |
특정 지점으로 롤백
- after_update로 롤백
ROLLBACK TO after_update;
-- 현재 상태 확인
SELECT * FROM employees;
롤백 결과
employee_id name salary
1 | 홍길동 | 5500000 |
2 | 이몽룡 | 4500000 |
3 | 성춘향 | 4800000 |
- after_insert로 롤백
ROLLBACK TO after_insert;
-- 현재 상태 확인
SELECT * FROM employees;
롤백 결과
employee_id name salary
1 | 홍길동 | 5000000 |
2 | 이몽룡 | 4500000 |
3 | 성춘향 | 4800000 |
- 트랜잭션 전체 롤백
ROLLBACK;
-- 현재 상태 확인
SELECT * FROM employees;
롤백 결과
employee_id name salary
1 | 홍길동 | 5000000 |
2 | 이몽룡 | 4500000 |
5. SAVEPOINT 활용 시 유의사항
- 커밋(COMMIT) 후 SAVEPOINT는 사라짐
- SAVEPOINT는 트랜잭션 내에서만 유지되므로, COMMIT 또는 ROLLBACK이 실행되면 모든 SAVEPOINT가 제거됩니다.
- 이름 중복 방지
- 동일한 이름의 SAVEPOINT를 설정하면 기존 SAVEPOINT가 덮어쓰여집니다.
- 적절한 SAVEPOINT 사용
- 트랜잭션이 복잡한 경우, SAVEPOINT를 적절히 사용하여 부분 복구가 가능하도록 설계하면 실수를 최소화할 수 있습니다.
6. 결론
SAVEPOINT는 오라클 트랜잭션 처리에서 복잡한 작업의 안정성을 높이는 중요한 도구입니다.
- 트랜잭션 처리 중 특정 지점으로 롤백이 필요할 때 유용하며, 데이터 무결성을 유지할 수 있습니다.
SAVEPOINT를 적절히 활용하여 복잡한 데이터 처리 로직에서도 유연하고 안전한 트랜잭션 관리가 가능하도록 설계하는 것이 중요합니다.
반응형
'Database' 카테고리의 다른 글
오라클 SQL 제약 조건: NOT NULL, UNIQUE, CHECK (0) | 2024.12.03 |
---|---|
오라클 SQL 제약 조건: NOT NULL, UNIQUE, CHECK (0) | 2024.12.03 |
오라클 COMMIT과 ROLLBACK을 활용한 트랜잭션 관리 (0) | 2024.12.03 |
오라클 DELETE를 활용한 데이터 삭제 (0) | 2024.12.03 |
오라클 UPDATE로 데이터 수정하기 (0) | 2024.12.03 |