Skip to content

오라클 대용량 서열 정보 import(SQL LODER) #
Find similar titles

개요 #

Oracle 데이터베이스에 데이터를 import 하려면 insert 쿼리를 이용하여 데이터를 하나씩 추가하거나, SQLDEVELOPER 또는 SQL GATE 같은 GUI 프로그램을 이용하는 방법이 있습니다. 하지만 서열 데이터가 너무 길거나 많을 경우 GUI 프로그램을 이용하면 메모리가 충분하지 않아 import가 완료되지 않고 프로그램이 다운된다. 이럴 경우 Oracle에서 제공하는 SQL LOADER를 이용하면 빠른 속도로 안정적으로 데이터를 업로드 할 수 있다.

준비사항 #

SQL LOADER를 이용하기 위해서는 import 할 데이터를 모아 놓은 텍스트 파일과, import 할 동작을 정의한 control(.ctl) 파일이 필요하다.

데이터 파일 #

일반적으로 콤마로 구분된 csv 파일을 이용하지만 경우에 따라 데이터 필드에 콤마가 포함된 경우도 있기 때문에 탭(\t) 으로 데이터를 구분하는 것을 권장한다.

컨트롤 파일 #

컨트롤 파일은 SQL LOADER에서 수행할 동작, 데이터 파일 위치, 데이터가 들어갈 대상 테이블과 대상 필드, 데이터 파일의 필드 구분자 등을 정의한다

load data
infile `c:\test.csv`
append
into table 대상테이블명
fields terminated by `,`
(ID, LOCUS_ID, SPECIES_NM, TYPE, SEQ.......)

SQL LOADER 실행 #

SQL LOADER 실행은 Oracle 계정과 패스워드 SID와 함께 컨트롤 파일의 위치를 파라미터로 전달하여 실행한다.

sqlldr userid=testid/testpawd@SID control=`c:\test.ctl`

SQL LOADER가 빠르지만 그래도 입력 데이터의 양이 많을 경우 시간이 오래 걸릴 수 있기 때문에 위의 명령어를 nohup 과 같은 명령어와 함께 background에서 실행하거나, screen 과 같은 서브 터미널에서 실행하여 터미널을 종료해도 실행이 지속되도록 한다.

에러 유형 #

서열이 너무 길 경우 #

Record 208737: Rejected - Error on table TableName.SEQ, column SEQ_DESC.
Field in data file exceeds maximum length

이런 유형의 에러는 너무 긴 서열 데이터를 import 할 때 한 번에 읽고 넣을 수 있는 량을 초과 했을 때 발생하는 에러이다. SQL LOADER가 대용량의 데이터를 업로드 하는 도구이기는 하지만, 하나의 필드에 등록 할 수 있는 최대 길이 제한이 있다. 이럴 경우 readsize와 bindsize 옵션을 줘서 최대 길이를 늘릴 수 있지만, 이경우에도 최대 2G bp 까지만 늘릴 수 있다.

sqlldr userid=testid/testpawd@SID control=`c:\test.ctl` readsize=2000000000 bindsize=2000000000

테이블 스페이스가 꽉찬 경우 #

ORA-01691: unable to extend lob segment TableNAME.SYS_LOB0000290971C00005$$ by 8192 in tablespace DBNAME_DATA

서열 데이터의 경우 char와 같이 일반적인 문자열 타입으로 지정하면 길이 제한으로 전체 서열을 입력 할 수 없으므로 LOB 타입으로 정의하는데 이 경우 Oracle에서는 LOB 타입을 위한 영역을 별도로 생성한다. 또한 테이블 스페이스를 자동으로 확장하는 옵션이 설정되어 있더라도 자동 확장이 동작하지 않기도 한다. 이러한 경우 해당 테이블의 테이블 스페이스를 별도로 분리하여 생성하되 전체 데이터 크기와 디스크의 여유 공간을 고려하여 적절한 크기의 테이블 스페이스 파일을 생성해 주는 조치가 필요하다.

0.0.1_20140628_0