세이브포인트
**Savepoint(세이브포인트)**란 무엇인가?
Savepoint
는 데이터베이스 트랜잭션 중에 특정 시점으로 **롤백(ROLLBACK)**할 수 있도록 저장하는 중간 저장 지점입니다. 트랜잭션 내에서 여러 변경 작업이 수행되는 도중 일부 작업만 취소하고 싶을 때 유용합니다.
특징
트랜잭션 내부에서 사용됨:
Savepoint는 반드시 활성화된 트랜잭션(
BEGIN
혹은START TRANSACTION
) 안에서 사용해야 합니다.
부분 롤백 가능:
전체 트랜잭션을 롤백하지 않고, 지정한 Savepoint 이후의 작업만 취소할 수 있습니다.
성능 개선:
트랜잭션 중간에 상태를 저장하여 필요 시 특정 지점으로 복구할 수 있어 데이터 처리의 안정성과 효율성을 높입니다.
Savepoint는 이름을 가짐:
각 Savepoint는 고유한 이름을 가져야 하며, 이 이름을 사용해 해당 지점으로 롤백할 수 있습니다.
Savepoint의 주요 SQL 문법
1. Savepoint 생성
Savepoint를 생성하려면 SAVEPOINT
키워드를 사용합니다.
2. Savepoint로 롤백
특정 Savepoint까지 롤백하려면 다음을 사용합니다:
이 명령은 지정된 Savepoint 이후에 수행된 작업을 취소합니다.
Savepoint 이전의 작업은 유지됩니다.
3. Savepoint 제거
더 이상 필요하지 않은 Savepoint를 제거하려면 다음을 사용합니다:
Savepoint를 해제하면 해당 지점으로 더 이상 롤백할 수 없습니다.
4. 트랜잭션 종료
트랜잭션을 전체적으로 커밋하거나 롤백하면 Savepoint도 자동으로 제거됩니다:
COMMIT
→ 모든 Savepoint가 제거됨.ROLLBACK
→ 트랜잭션 전체가 취소되며 Savepoint도 제거됨.
Savepoint 사용 예시
트랜잭션과 Savepoint
Savepoint의 장점
부분적인 오류 처리:
트랜잭션 중 일부 작업에서 오류가 발생하더라도, 전체 트랜잭션을 롤백하지 않고 원하는 Savepoint까지 롤백할 수 있습니다.
복잡한 트랜잭션 처리:
여러 단계로 구성된 작업에서 단계별 상태를 저장하여 데이터 무결성을 보장합니다.
유연성 제공:
필요에 따라 특정 지점까지 작업을 되돌리거나 전체 트랜잭션을 유지할 수 있는 유연성을 제공합니다.
Savepoint의 주의사항
Savepoint는 트랜잭션 내부에서만 유효:
트랜잭션이 종료되면 Savepoint는 자동으로 제거됩니다.
오버헤드:
Savepoint를 과도하게 생성하면 데이터베이스 리소스에 부하가 생길 수 있으므로 적절히 사용해야 합니다.
지원 여부:
일부 데이터베이스 시스템(MySQL, PostgreSQL, Oracle 등)은 Savepoint를 지원하지만, 일부는 제한적일 수 있습니다.
데이터베이스별 Savepoint 지원
DBMS
지원 여부
주요 제한 사항
MySQL
지원
RELEASE SAVEPOINT
명령은 불완전하게 지원됨.
PostgreSQL
지원
완벽하게 지원.
Oracle
지원
표준 SQL과 호환.
SQL Server
지원
Savepoint는 지원하지만 일부 트랜잭션 격리 수준에서 제한.
Last updated