SQL*Loader
SQL*Loader의 파일 적재 목적, 컨트롤 파일과 로그, Bad, Discard의 역할
#핵심 요약
SQL*Loader는 외부 CSV, 텍스트 파일을 Oracle 내부 테이블에 적재하는 유틸리티임
sqlldr는 SQL 문장이 아닌 OS 셸 명령으로 실행하며 컨트롤 파일에 적재 규칙을 적음
실패 시 로그부터 확인하고 거부 행과 조건 제외 행을 구분함
#개념과 동작 원리
| 구성 | 역할 |
|---|---|
| 데이터 파일 | 외부에서 받은 적재 실습 |
| 컨트롤 파일 | 입력 파일, 대상 테이블, 구분자, 날짜 형식 등 적재 규칙 |
| 로그 파일 | 수행 이력, 성공 및 실패 건수, Path used의 Conventional/Direct 구분 |
| Bad 파일 | 형식 등에 맞지 않아 거부된 행 |
| Discard 파일 | WHEN 조건에 맞지 않아 제외된 행 |
실습 컨트롤 예제는 OPTIONS의 SKIP=1로 첫 행을 건너뛰고 LOAD DATA, INFILE, INTO TABLE로 파일과 대상을 정함
FIELDS TERMINATED BY로 쉼표 구분을, OPTIONALLY ENCLOSED BY로 인용 문자 처리를 지정하고 뒤에 컬럼 목록을 둠
실습 sqlldr 호출에는 CONTROL과 DATA 옵션이 있으며 접속 계정, 비밀번호도 포함되어 있음
파일을 적재하기 전에 외부 테이블로 조회하는 방식은 External Table에서 다룸
#필수 명령어 또는 SQL
OPTIONS (SKIP=1)
LOAD DATA
INFILE '/home/oracle/sample.csv'
INTO TABLE sample_tb
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
(line_no, time_inout, in_cnt, out_cnt)sqlldr <USERNAME>/<PASSWORD> control=sample_control.txt data=sample.csv| 줄 | 뜻 |
|---|---|
OPTIONS (SKIP=1) |
첫 행(머리글) 건너뜀 |
INFILE |
적재할 데이터 파일 |
INTO TABLE |
적재할 테이블 |
FIELDS TERMINATED BY ',' |
필드 구분자 |
OPTIONALLY ENCLOSED BY '"' |
큰따옴표로 감싼 값 처리 |
(컬럼 목록) |
파일 필드를 넣을 컬럼 순서 |
결과 해석: 실행 뒤 같은 이름의 .log에서 성공, 실패 건수와 Path used를 보고, 거부된 행은 .bad, WHEN 조건으로 걸러진 행은 .dsc에서 봄
SQL*Loader 컨트롤 파일 주석은 --임
#사용 조건과 주의사항
실습의 전송 파일명과 컨트롤 파일, DATA의 파일명이 서로 다르며 대상 테이블 준비와 최종 적재 로그는 기재 없음
실제 적재 권한 목록과 실패 후 재수행 조건은 기재 없음
서버 파일을 SQL로 조회하는 외부 테이블과 내부 테이블로 적재하는 sqlldr의 목적을 구분함