본문 바로가기
개발언어/SQL

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

by 엔돌슨 2008. 3. 6.
반응형
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>