데이터베이스 연구실.log

SQL*Loader

SQL*Loader의 파일 적재 목적, 컨트롤 파일과 로그, Bad, Discard의 역할

sqlldr컨트롤 파일BadDiscard

#핵심 요약

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

파일 (/home/oracle/sample_control.txt)객체 또는 설정을 변경함
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)
oracle 계정 셸객체 또는 설정을 변경함
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의 목적을 구분함

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기