01.오라클/007.DB Knowledge Base

[오라클]Delete와 Truncate 비교

redkite 2012. 12. 19. 17:01

-------------------------------------

1. DELTE

-------------------------------------

   - DML(Data Manuplation Language)
   - 사용 : DELETE FROM 테이블명 WHERE 조건;

   - 데이터의 일부 또는 전부를 삭제 할 수 있음
   - 삭제할 데이터들은 디스크에서 메모리로 로딩(loading)한 후 작업
   - Disk I/O가 많이 발생하므로 메모리(Data buffer cache)에 있는 데이터를 삭제하기 전에
     삭제할 데이터에 해당하는 Redo data, Undo Data를 생성
   - COMMIT하기 전 ROLLBACK이 가능
   - 삭제할 데이터를 해당 블록 내에서 하나씩 찾아서 삭제하기 때문에 시간이 오래 걸림
   - 모두 삭제하였을 때도 사용된 블럭의 EXTENT 및 HWM을 그대로 유지   
   - 삭제(delete)하는 테이블의 데이터를 참조(reference)하는 테이블의 데이터에서
     row단위로 체크해서 참조하는 테이블에 row가 없으면 삭제 가능
   - 삭제한 row의 수를 반환함
   - delete로 삭제된 데이터는 FLASHBACK QUERY로 복구 가능

   - 통계정보(Analyze)를 변경하지 않음

 

-------------------------------------

2. TRUNCATE
-------------------------------------

   - DDL(Data Definition Language)
   - 사용 : TRUNCATE TABLE 테이블명;

   - 데이터의 일부 삭제는 불가, 전부 삭제됨
   - DDL(Data Definition Language) 이므로 데이터를 메모리로 로딩(Loading)하지 않음
   - Undo, Redo log를 생성하지 않음

     (테이블이나 인덱스가 차지하고 있던 저장공간 관리영역에 대한 적은 량의 redo log는 생성함)
   - Undo, Redo log를 생성하지 않기 때문에 ROLLBACK 불가, 복구 불가
   - 타 테이블에서 참조하고 있으면 Truncate 불가
   - 모두 삭제되기 때문에 사용된 EXTENT 및 HWM을 초기화
   - 참조(reference) 제약이 ENABLE인 경우 ORA-02266 오류 발생
   - 실제 해당 데이터를 일일이 찾아서 지우지 않고,

      데이터 딕셔너리(Data Dictionary)에 삭제 표시 및
      빈 공간 표시만을 하기 때문에 빠른 시간 내에 시스템 부하없이 데이터를 삭제 가능
   - 삭제한 row의 수를 반환하지 않음
   - Truncate한 Table 하나만을 특정 시점으로 복구 시 Archive Log Mode로 운영 중인 경우에

      Hot Backup 또는 Cold Backup을 이용한 별도 데이터베이스에서 Incomplete Recovery를

      한 후 해당 테이블을 exp/imp해야 복구 가능
   - truncate table로 삭제된 데이터는 FLASHBACK QUERY로도 복구 불가

     (ORA-01466: unable to read data - table definition has changed)

   - 통계정보(Analyze)를 변경함