truncate table 로그를 남기지않고 delete하기

2008. 3. 6. 09:47 개발언어/SQL
truncate table 로그를 남기지않고 delete하기

데이타가 아주 큰테이블을 지울때는 이런걸 사용해야 한단다
예)  truncate table 테이블명


좋은 설명이 있어 퍼왔다.
Truncate 문은 테이블이나 cluster로부터 모든 행(row)을 삭제하기 위해 사용된다.

• drop과 동일한 테이블 삭제 명령이지만, TRUNCATE 명령은 테이블내의 모든 데이터만 삭제된다.
• 기억공간과 구조 모두를 반납하는 drop과 달리 이 명령은 테이블에 사용된 기억공간(memory)은 회수되지만 테이블의 구조는 남는다.
• delete 문은 rollback이 가능하지만, TRUNCATE 명령은 auto COMMIT이므로 rollback할 수 없다.
• 테이블 소유자나 DELETE TABLE 권한이 있어야만 가능하다.
• 테이블에 생성된 제약조건과 연관된 인덱스, 뷰, 시노늄은 그대로 유지된다.

명령어 대상
DROP row,기억공간, 객체구조
TRUNCATE row,기억공간
DELETE row

【형식】
	TRUNCATE TABLE [SCHEMA.] table [{PRESERVE|PURGE} MATERIALIZED VIEW LOG ]
	  [{DROP|REUSE} STORAGE];
또는
	TRUNCATE CLUSTER [SCHEMA.] cluster [{DROP|REUSE} STORAGE];
여기서
drop storage는 truncate table의 디폴트 동작이며, 테이블의 초기 저장 속성을 복구하는 기능을 가지고 있다.

reuse storage는 테이블에 할당되었던 모든 익스텐트가 그대로 유지되며, 테이블에 삽입될 다른 행을 보관하는데 이용될 수 있다.
테이블이 매우 빨리 성장하고, 새로운 행을 삽입하기 위해 기존의 행들을 삭제하려는 경우에는 reuse storage를 이용한다.

Truncate table 문은 롤백 데이터를 생성하지 않으므로 delete 문을 이용하는 것보다 더 효율적이다.

【예제】
SQL> create table test
  2  ( first_name       varchar2(20),
  3    last_name        varchar2(25));
 
Table created.
 
SQL> insert into test values('arirang','kim');
 
1 row created.
 
SQL> select * from test;
 
FIRST_NAME           LAST_NAME
-------------------- -------------------------
arirang              kim
 
SQL> truncate table test;
 
Table truncated.
 
SQL> select * from test;
 
no rows selected
 
SQL>