Database/DB2

[DB2] import 로 bulkinsert 하기

Peter Ahn 2018. 6. 22. 13:42
반응형

안녕하세요 피터입니다.

IBM의 DBMS인 db2에서 특정 테이블을 import 하는 방법을 소개하겠습니다.


bulkinsert 란 일반적으로 대용량 데이터를 건별로 insert 문을 이용해서 데이터를 입력하는 것은 매우 리소스 사용 측면이나 성능 측면에서 모두 비효율적이기 때문에 구조화된 데이터 (ex CSV) 파일로부터 단일 트랜잭션(transaction)으로 한번에 입력하는 방법을 말합니다.


import 명령어는 주로 대용량 데이터를 처리할 때 사용하며 export 로 추출한 데이터 파일이나 기타 형식화된 파일을 bulk 방식으로 table에 insert 할 때 사용합니다.

[DB2] 특정 테이블 export 하기



db2 계정으로 로그인 후 아래와 같이 명령어 수행

db2 connect
db2 "import from test.del of del insert into tbtest"



import가 완료되면 아래 처럼 몇 행이 처리되었는지 확인할 수 있습니다.


[db2inst2@localhost ~]$ db2 "import from test.del of del insert into tbtest"
SQL3109N  The utility is beginning to load data from file "test.del".

SQL3110N  The utility has completed processing.  "4096" rows were read from
the input file.

SQL3221W  ...Begin COMMIT WORK. Input Record Count = "4096".

SQL3222W  ...COMMIT of any database changes was successful.

SQL3149N  "4096" rows were processed from the input file.  "4096" rows were
successfully inserted into the table.  "0" rows were rejected.


Number of rows read         = 4096
Number of rows skipped      = 0
Number of rows inserted     = 4096
Number of rows updated      = 0
Number of rows rejected     = 0
Number of rows committed    = 4096

test.del 파일에서 읽은 rows 개수가 4096 이고,

tbtest 테이블에 insert 된 건수가 4096,

commit 완료된 행수가 4096 으로 확인됩니다.


중간에 포맷이 맞지 않거나 키 위반 등의 사유로 insert가 실패되면 해당 건수가 reject 항목에 표시되며 에러 로그가 출력됩니다.


때때로 파일에 존재하는 데이터가 너무 방대하여 transaction log full 이 발생할 수 있습니다.

이런 경우에는 트랜잭션 중간 중간마다 commit을 수행해주면 되는데요, commitcount 값을 지정해주면 특정 건수 마다 commit 처리할 수 있습니다.

db2 "import from test.del of del commitcount 100000 insert into tbtest"

위와같이 commitcount로 지정된 rows 마다 commit을 자동으로 수행하면서 insert 해줍니다.



- Peter의 우아한 프로그래밍

여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 남겨주시면 감사하겠습니다.

반응형