DB의 savepoint & truncate

송해광·2022년 8월 1일
0

SavePoint

savepoint를 지정하면 롤백할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 savepoint까지 트랜잭션의 일부만 롤백한다.
롤백 -> 변경된 데이터를 테이블에 영구적으로 저장하려면 commit을 해줘야 하는데 이 commit 작업 전에 실행되어 변경 사항을 취소하는 것
따라서 복잡한 대규모 트랜잭션에서 에러가 발생했을 때 Savepoint까지의 트랜잭션만 롤백하고 실패한 부분에 대해서만 다시 실행가능하다.
여러개의 savepoint를 정의할 수 있고 동일한 이름으로 정의하면 나중에 정의한 savepoint가 유효하다.

(hoon93.tistory.com/24 에서 이미지 발췌하였습니다.)
savepoint 정의 방법 -> SAVEPOINT A; (A라는 savepoint 지정)
'ROLLBACK TO A' 실행 -> savepoint A를 실행한 시점까지 롤백 실행.

TrunCate

개념 : 테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납

  • 해당 테이블의 데이터가 모두 삭제되지만 테이블 자체가 지워지지 않는다.
  • 해당 테이블에 생성되어 있던 인덱스도 함께 truncate 된다.

즉, truncate와 일반적으로 알고 있는 delete 모두 삭제하는 명령어이다.
delete -> 데이터만 지워지고 쓰던 디스크 상의 공간은 유지
truncate -> 데이터와 인덱스 모두 삭제, 컬럼값 유지

DELETE -> 원하는 데이터만 삭제 가능
TRUNCATE -> 특정 데이터만 삭제 불가

profile
끝까지 해보고 하는 후회는 반성이 되어 앞을 보게 하지만 끝까지 하지 않고 하는 후회는 미련이 되어 뒤를 보게 한다.

0개의 댓글