개요
TRUNCATE TABLE은 오라클 데이터베이스에서 테이블의 모든 데이터를 빠르게 삭제하는 DDL(Data Definition Language) 명령어입니다. DELETE 문과 달리 테이블 구조는 유지하면서 데이터만 완전히 제거합니다.
주요 특징
- 테이블의 모든 행을 즉시 삭제
- 테이블 구조는 그대로 유지 (컬럼, 인덱스, 제약조건 보존)
- High Water Mark를 리셋하여 저장 공간 회수
- 롤백 불가능 (자동 커밋 발생)
- 트리거가 실행되지 않음
기본 구문
TRUNCATE TABLE [schema.]table_name [DROP STORAGE | REUSE STORAGE] [CASCADE];
옵션 설명
DROP STORAGE
- 기본값
- 할당된 저장 공간을 시스템에 반환
REUSE STORAGE
- 저장 공간을 테이블에 유지
- 새로운 데이터 삽입 시 재사용
CASCADE
- 파티션 테이블이나 중첩 테이블에서 사용
- 관련된 모든 객체의 데이터 삭제
사용 예제
기본 사용법
TRUNCATE TABLE employees;
저장 옵션 지정
TRUNCATE TABLE departments REUSE STORAGE;
파티션 테이블
TRUNCATE TABLE sales PARTITION (sales_q1);
TRUNCATE vs DELETE 비교
기능 | TRUNCATE | DELETE |
---|---|---|
실행 속도 | 매우 빠름 | 느림 |
롤백 가능 | 불가능 | 가능 |
저장 공간 | 즉시 반환 | 유지 |
트리거 실행 | 안함 | 함 |
WHERE 조건 | 사용 불가 | 사용 가능 |
주의사항
- 외래키 제약조건이 참조하는 테이블은 TRUNCATE 불가
- 시스템 권한 필요 (일반 사용자는 테이블 소유자여야 함)
- 백업 필수 - 복구 불가능한 작업
- 로그 최소화로 인한 빠른 수행
성능 팁
- 대량 데이터 삭제 시 DELETE 대신 TRUNCATE 사용 권장
- 파티션 테이블은 개별 파티션 단위로 TRUNCATE 가능
- 테이블 통계 정보는 삭제 후 재생성 필요