출처 :  http://blog.naver.com/itisksc?Redirect=Log&logNo=30079254385




# DELTE

1. DML(Data Manuplation Language)
2. 데이터의 일부 또는 전부를 삭제 할 수 있음
3. 삭제할 데이터들은 디스크에서 메모리로 로딩(loading)한 후 작업
4. 
Disk I/O가 많이 발생하므로 메모리(Data buffer cache)에 있는 데이터를 삭제하기 전에 삭제할
   데이터에 해당하는 Redo data, Undo Data를 생성

5. COMMIT하기 전 ROLLBACK이 가능
6. 삭제할 데이터를 해당 블록 내에서 하나씩 찾아서 삭제하기 때문에 시간이 오래 걸림
7. 모두 삭제하였을 때도 사용된 블럭의 EXTENT 및 HWM을 그대로 유지
8. 삭제(delete)하는 테이블의 데이터를 참조(reference)하는 테이블의 데이터에서 row단위로 체크해서
   참조하는 테이블에 row가 없으면 삭제 가능
9. 삭제한 row의 수를 반환함
10. delete로 삭제된 데이터는 FLASHBACK QUERY로 복구 가능
11. 통계정보(Analyze)를 변경하지 않음



# TRUNCATE

1. DDL(Data Definition Language)
2. 데이터의 일부 삭제는 불가, 전부 삭제됨
3. DDL(Data Definition Language) 이므로 데이터를 메모리로 로딩(Loading)하지 않음
4. Undo, Redo log를 생성하지 않음
   (테이블이나 인덱스가 차지하고 있던 저장공간 관리영역에 대한 적은 량의 redo log는 생성함)

5. Undo, Redo log를 생성하지 않기 때문에 ROLLBACK 불가, 복구 불가
6. 타 테이블에서 참조하고 있으면 Truncate 불가
7. 모두 삭제되기 때문에 사용된 EXTENT 및 HWM을 초기화
8. 참조(reference) 제약이 ENABLE인 경우 ORA-02266 오류 발생
9. 실제 해당 데이터를 일일이 찾아서 지우지 않고, 데이터 딕셔너리(Data Dictionary)에 삭제 표시 및 빈 공간
   표시만을 하기 때문에 빠른 시간 내에 시스템 부하없이 데이터를 삭제 가능
10. 삭제한 row의 수를 반환하지 않음
11. Truncate한 Table 하나만을 특정 시점으로 복구 시 Archive Log Mode로 운영 중인 경우에 Hot Backup 또는 
    Cold Backup을 이용한 별도 데이터베이스에서 Incomplete Recovery를 한 후 해당 테이블을 exp/imp해야 복구 가능
12. truncate table로 삭제된 데이터는 FLASHBACK QUERY로도 복구 불가
    (ORA-01466: unable to read data - table definition has changed)
13. 통계정보(Analyze)를 변경함


+ Recent posts