본문 바로가기
Database

오라클 SAVEPOINT로 복구 지점 설정하기

by 굿센스굿 2024. 12. 3.
반응형

 


1. SAVEPOINT란?

SAVEPOINT는 오라클 데이터베이스에서 트랜잭션 내의 특정 지점을 저장하는 기능입니다. 트랜잭션이 진행되는 동안 여러 SAVEPOINT를 설정하면, 필요할 경우 특정 지점까지 작업을 복구(롤백)할 수 있습니다.

이 기능은 복잡한 트랜잭션 처리 중 일부 작업만 취소하고 나머지 작업은 유지하려는 경우 유용합니다.


2. SAVEPOINT의 특징

  1. 트랜잭션 내에서만 유효
    • SAVEPOINT는 하나의 트랜잭션 내에서만 사용되며, 트랜잭션이 종료되면(커밋 또는 롤백) 해당 SAVEPOINT도 사라집니다.
  2. 부분 롤백 지원
    • 특정 SAVEPOINT까지 롤백할 수 있으며, 이후의 작업만 취소됩니다.
  3. SAVEPOINT 이름 지정
    • 각 SAVEPOINT는 고유한 이름으로 설정되며, 이름을 기준으로 롤백을 수행합니다.

3. SAVEPOINT 사용법

  1. SAVEPOINT 설정
    • 트랜잭션 중간에 SAVEPOINT를 설정합니다.
  2. SAVEPOINT savepoint_name;
  3. SAVEPOINT로 롤백
    • 지정한 SAVEPOINT로 롤백하여 이후의 작업만 취소합니다.
  4. ROLLBACK TO savepoint_name;
  5. 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

특정 지점으로 롤백

  1. after_update로 롤백
ROLLBACK TO after_update;

-- 현재 상태 확인
SELECT * FROM employees;

롤백 결과

employee_id name salary

1 홍길동 5500000
2 이몽룡 4500000
3 성춘향 4800000
  1. after_insert로 롤백
ROLLBACK TO after_insert;

-- 현재 상태 확인
SELECT * FROM employees;

롤백 결과

employee_id name salary

1 홍길동 5000000
2 이몽룡 4500000
3 성춘향 4800000
  1. 트랜잭션 전체 롤백
ROLLBACK;

-- 현재 상태 확인
SELECT * FROM employees;

롤백 결과

employee_id name salary

1 홍길동 5000000
2 이몽룡 4500000

5. SAVEPOINT 활용 시 유의사항

  1. 커밋(COMMIT) 후 SAVEPOINT는 사라짐
    • SAVEPOINT는 트랜잭션 내에서만 유지되므로, COMMIT 또는 ROLLBACK이 실행되면 모든 SAVEPOINT가 제거됩니다.
  2. 이름 중복 방지
    • 동일한 이름의 SAVEPOINT를 설정하면 기존 SAVEPOINT가 덮어쓰여집니다.
  3. 적절한 SAVEPOINT 사용
    • 트랜잭션이 복잡한 경우, SAVEPOINT를 적절히 사용하여 부분 복구가 가능하도록 설계하면 실수를 최소화할 수 있습니다.

6. 결론

SAVEPOINT는 오라클 트랜잭션 처리에서 복잡한 작업의 안정성을 높이는 중요한 도구입니다.

  • 트랜잭션 처리 중 특정 지점으로 롤백이 필요할 때 유용하며, 데이터 무결성을 유지할 수 있습니다.
    SAVEPOINT를 적절히 활용하여 복잡한 데이터 처리 로직에서도 유연하고 안전한 트랜잭션 관리가 가능하도록 설계하는 것이 중요합니다.
반응형