이 글을 적는 이유
프로젝트에 투입되어 데이터 마이그레이션을 해달라는 업무를 분장받았다.
테이블당 데이터가 몇만 건에서 몇십만 건이나 되어
이런 수만 건 단위씩이나 되는 데이터는 마이그레이션을 해본 적이 없어 당황했다.
처음 시도할 때는 원래 하던 대로 db툴을 사용해 마이그레이션을 진행했지만
하루 종일 속도가 나질 않아 고민하던 차에
주변 선배님들에게 조언을 구하니 기존 테이블의 데이터를 dump파일로 떠서
커맨드창에서 import 시키면 속도가 빠르다는 조언을 받았다.
선배님들의 조언대로 해보니
하.. 도대체 나는 하루 종일 무엇을 한 것인가에 대해 후회가 밀려왔다.
db툴로 데이터를 밀어 넣을 때는 테이블 하나당 기본 몇 분씩 심할 때는 10분을 넘기는 테이블도 있었는데
커맨드에서는 모든 테이블을 밀어 넣었을 때 걸린 시간이 불과 2~3분밖에 걸리지 않았다.
이게 말이 되나 싶을 정도에 압도적인 속도인지라 데이터 확인차 테이블을 조회해보니
정상적으로 데이터가 import 되어 있는 것을 확인했다.
import 속도에 대한 의문이 모든 게 풀린 것은 아니지만
db툴은 기본적으로 gui툴인지라 import 되어가는 과정도 화면에 보여줘야 되며 기타 등등의 이유로 컴퓨터가 바쁘지만
커맨드창에서 실행하면 내부적으로만
데이터를 처리하고 결과만 사용자에게만 보여주니 빠른 게 제일 큰 이유인 것 같다.
아래에는 다음에 데이터 마이그레이션을 진행할때 사용하기 위해 정리 해놓았다.
기본 세팅
- 윈도우 + r
- 실행창에 cmd 입력
- 커맨드창 진입 후
- cd /입력 path 최상위로 이동 후
imp userid= ?/? file=’c:\’ full=y ignore=y commit=y
(?/? = 계정/비밀번호, full 부분부터는 옵션이다.)
IMPORT Option
- userid : IMPORT를 실생시키는 계정의 username/password 명
- buffer : 데이터를 행들을 가져오는데 사용되는 buffer의 bytes 수
- file : IMPORT될 EXPORT 덤프 파일명
- show : 파일 내용이 화면에 표시되어야 할 것인가를 나타냄(Y/N 플래그)
- ignore : IMPORT중 CREATE명령을 실행할 때 만나게 되는 에러들을 무시할 것인지 결정(Y/N 플래그)
- indexes : 테이블 INDEX의 IMPORT여부(Y/N 플래그)
- rows : 테이블 데이터를 IMPORT할 것인가(Y/N 플래그) 만약 "N"로 설정하면 데이터베이스 객체들에 대한 DDL만이 실행된다.
- full : FULL엑스포트 덤프 파일이 IMPORT 할때 사용한다.
- tables : IMPORT될 테이블 리스트
- commit : 배열(배열의 크기는 BUFFER에 의해 설정됩니다) 단위로 COMMIT을 할것인가 결정 기본적으로는
테이블 단위로 COMMIT을 한다.
- fromuser : EXPORT덤프 파일로 부터 읽혀야 하는 객체들을 갖고 있는 테이터베이스 계정
- touser : EXPORT덤프 안에 있는 객체들이 IMPORT될 데이터베이스 계정
'유용' 카테고리의 다른 글
[유용] window 10 업데이트 완전히 끄기 (0) | 2021.08.03 |
---|---|
[유용] 유니코드로 보이는 properties 한글로 변환 적용 (0) | 2021.07.24 |
[유용] spring 다국어 처리 properties 분석하기 (0) | 2021.07.23 |