[오라클]DELETE와 TRUNCATE의 차이점
1. DELETE
-------------------------------------
- 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)를 변경함
'01.오라클 > 007.DB Knowledge Base' 카테고리의 다른 글
[오라클]DB링크 개념 (0) | 2013.02.20 |
---|---|
[오라클]비용기반 옵티마이저 (0) | 2013.02.20 |
[오라클]NLS_LANG 관련 정보 (0) | 2013.02.01 |
[오라클] V$ object 와 object 의 차이점 (0) | 2013.01.23 |
[오라클]전문가가 되기 위해 무엇을 준비해야 하는가? (0) | 2012.12.19 |