본문 바로가기
TechNical/Oracle

오라클 sqlldr 사용 방법

by 강멍멍이 2007. 11. 30.
반응형

-- 리눅스 시스템, 오라클 10G

-- 데이터 파일 형식, 컬럼값이 NULL이 들어가 있다.

   abc 1232 dd 1111 vv 33.22 dd 12

   abc 1232 dd 1222111 vv 33.22 dd 12

   abc 1232 dd 1111

   abc 1232 dd 1111 vv 33.22 dd 12 gg 3555 ff 333


-- 테이블스페이스 생성

create tablespace kei

datafile '/oracle/oradata/kei/kei_ts.dbf' size 10m

autoextend on next 10m maxsize 100m;


-- 유저 생성

create user kei identified by kei

default tablespace kei_ts;


-- 권한 부여

grant connect,resource to kei;


-- 접속

conn kei/kei


-- 테이블 생성

-- 테이블 생성시 데이터 타입이 맞지 않거나 컬럼 수가 적으면

-- load를 실폐 하므로 넉넉하게 생성

create table kei_tb(

col_a varchar2(20),

col_b varchar2(20),

col_c varchar2(20),

col_d varchar2(20),

col_e varchar2(20),

col_f varchar2(20)

)


-- 모자라면 추가해도 된다.

alter table kei_tb add col_g varchar2(20)


-- load.ctl 파일 생성

-- 컬럼 갯수가 유동적으로 trailing nullcols 옵션을 준다.(데이터가 없으면 NULL로 친다)

-- append 옵션을 줘야 모든 데이터들이 차곡차곡 쌓인다.

-- replace 옵션을 주면 계속 갈아 치우기 때문에 마지막 데이터만 남는다.


load data

infile *

append

into table kei_tb

fileds terminated by ' '

trailing nullcols

(col_a,col_b,col_c,col_d,col_e,col_f,col_g)


-- sql*loader 실행, 단일 데이터 로드

> sqlldr kei/kei control=load.ctl data=123.log


-- 폴더 내의 모든 로그 파일 로드

-- 확장자가 log인 파일은 모두 로드 한다.

-- load.ctl 파일이 동일한 폴더내에 존재해야 한다. 경로를 안 줘서 ㅡㅡ;; 귀차나.

linux#oracle:/home/oracle/loadfile> for i in *.log;do

>sqlldr kei/kei control=load.ctl data=$i

>done


-- 주의 사항

-- 재차 테스트를 하기 위해 데이터를 delete 했다면 commit를 반드시 해 준다.

-- commit이 되지 않으면 sqlloader가 실행되지 않는다. 대기 상태.

-- 테이블에 락을 걸어 두었기 때문에 락이 풀릴때까지 기다리고 있다.

-- *.bad 파일의 주요 원인은 데이터가 잘 못 된 것이 있기 때문이다.

-- 형식을 제대로 주어서 bad파일이 안 생기게 만들자


-- 생각보다 데이터 파일이 크다면 테이블스페이스 사이즈를 늘여 준다.

alter database datafile '/oracle/oradata/kei/kei_ts.dbf'

autoextend on next 10m maxsize 200m;

반응형

댓글