14만건 정도의 데이터를 테이블에 적재할 일이 생겼다.
데이터는 엑셀로 되있었는데 토드에서 엑셀Import를 하니 응답없음이 나왔다.. 컴퓨터가 꼬라서 그런가..
그래서 사용한 SQL Loader~~
내가 작업한 내용을 상세하게 적었으니 추후에 나 또는 여러분에게 도움이 되었으면..
일단 엑셀파일을 csv파일로 새로 저장한다. (이슈: csv파일은 구분자가 ,로 되있는데 컬럼중 내용에 ,가 들어가있으면 오류가 날수있으니 구분자를 다른걸로 바꿔서 저장한다. 바꾸는 방법은 제어판 > 국가 및 언어 > 추가설정 에서 목록 구분 기호를 ,에서 원하는 문자로 적용한뒤 csv파일 저장. )
준비 : 설계된 테이블, control.ctl(컨트롤 파일), 데이터파일(csv나 txt파일 등)
컨트롤 파일 작성법
control.ctl
OPTIONS(LOAD=-1, ERRORS=-1)
LOAD DATA
INFILE 'data.csv'
REPLACE
INTO TABLE TB_EXAMPLE
FIELDS TERMINATED BY "|"
TRAILING NULLCOLS
(
COLUMN1,
COLUMN2,
COLUMN3)
설명
LOAD=-1 //로드하는 레코드 수. -1의 경우 ALL (default)
ERRORS //허용하는 에러의 수. -1의 경우 ALL (default는 50)
LOAD DATA //데이터를 로드
INFILE '파일명.csv' //다수의 파일을 등록할 수 있음. 적재할 데이터가 컨트롤파일 안에 있으면 INFILE * 하고 BEGINDATA 아래에 데이터 명시
REPLACE //테이블의 모든 내용을 삭제하고 새롭게 데이터를 로드한다.
INTO TABLE //데이터를 적재할 테이블
FIELDS TERMINATED BY "|" //데이터를 구분하는 문자 지정. csv파일의 경우 ,로 구분하지만 컬럼내용에 ,가 포함되어 있어서 구분자를 |로 변경함.
TRAILING NULLCOLS //NULL 허용
( ) 적재할 컬럼을 데이터파일의 컬럼 순서대로 지정.
예를들어
(
COL_NAME,
COL_PHONE,
COL_AGE)
이면 데이터(data.csv or data.txt)는
홍길동|0101234****|27
유가나|0104567****|28
이런식으로.. 되있어야함 (데이터순서와 컬럼명순서가 일치)
준비는 끝났다. 이제 토드에서 실행해보자!
** Toad for Oracle 메뉴 Database > Import > SQL*Loader Wizard
Use control file에 체크 후 Next >
Control file 을 선택하면 로그파일이 자동 생성된다. Next >
Execute now에 체크 후 Finish 하면
진행상황이 나타나며 insert가 된다.
14만건의 데이터가 1분도 안걸리고 성공적으로 insert 되었다 ^0^