데이터 적재 작업을 하던가 DB 운영 작업을 하면 테이블만 남기고 데이터를 삭제해야 되는 경우가 발생한다.
현재 V9.7 코브라에서는 truncate 명령문을 지원하지만 그 하위 버전에서는 사용할 수 없었다. (V9.5에서는 Registry 변수 DB2_COMPATIBILITY_VECTOR 값을 설정함으로써 제한적으로 사용 가능했던 것으로 기억이 난다. 현재 9.5 정보센터를 찾아보니 검색되지 않는다.-_-;)
9.7 코브라가 나오기 전에 이런 작업을 어떻게 했는지 기록을 남겨 본다.
(1) db2 load/import 를 사용하는 방법
(유닉스, 리눅스) db2 “load from /dev/null of del replace into 스키마명.테이블명”
(윈도우) db2 “load from 빈파일명 of del replace into 스키마명.테이블명”
* 빈 파일명: notepad를 실행하여 만든 내용없는 텍스트 파일(txt) 을 의미한다.
(2) Alter Table 명령문의 사용하는 방법
(유닉스,리눅스,윈도우) db2 “alter table 테이블명 activate not logged initially with emtpy table”
* 참고: ‘not logged initially’ 키워드는 테이블 단위 로깅 옵션이다. transaction log 파일에
로깅하지 못하게 하는 옵션이며 추가적으로 with empty table 구문을 주어 로깅없이 테
이블의 데이터를 삭제한다.
DB2 적인 truncate 표현법은 alter table을 이용한 명령문이라 할 수 있겠다.
추가로, not logged initially 옵션은 Insert ~ Select 방식의 대용량의 데이터를 작업 상황에서 트랜잭션 로그 full 상황을 피하고자 할 때 사용할 수 있다.
이 경우 한 트랜잭션(작업 단위, UOW) 안에서 처리를 해야 되기에 db2 CLP 옵션을 주어야 한다.
db2 +p +c –tv <<EOF
alter table 테이블명 activate not logged initially ;
insert into 테이블명 select * from 테이블1 ;
EOF
혹은 위 SQL을 파일로 만든 후 “db2 +c –tvf 파일명” 으로 실행을 할 수도 있다.
이런 식으로 하면 대용량 데이터를 추가/변경/삭제 작업 시, transaction log full이 발생하는 것을 피할 수 있다.
단, 해당 SQL이 실행 중에 오류가 발생하거나 작업이 정상적으로 실행되지 못해 rollback되는 경우 table을 재생성 해야되므로 주의해서 사용해야 된다.
'Note' 카테고리의 다른 글
[운영] DB2의 과도한 Bufferpool 생성의 종말은? (0) | 2011.07.29 |
---|---|
[관리] DB2가 설치된 시스템일까? 아닐까? (0) | 2011.07.29 |
[관리] 우리가 쓰는 DB2는 Compliance 문제가 없는 것일까? (0) | 2011.07.28 |
[운영] DB2 진단로그를 편하게 보기! (0) | 2011.07.11 |
[설치] CentOS에서 TSAMP 설치하기! (1) | 2011.07.11 |