본문 바로가기
Database

오라클 SQL*Loader로 데이터 대량 삽입하기

by 굿센스굿 2024. 12. 4.
반응형


SQL*Loader
는 오라클 데이터베이스에서 대량 데이터를 효율적으로 로드하기 위한 도구입니다. 외부 파일(CSV, 텍스트 파일 등)에 저장된 데이터를 데이터베이스로 삽입하거나 갱신하는 데 사용됩니다. 이 글에서는 SQL*Loader의 기본 개념, 설정 방법, 사용 예제, 그리고 성능 최적화 팁까지 상세히 설명합니다.


1. SQL*Loader란?

SQL*Loader는 외부 데이터 파일을 오라클 데이터베이스 테이블에 빠르게 로드할 수 있는 유틸리티입니다. 다음과 같은 특징을 갖습니다:

  • 대량 데이터 처리 가능: 테라바이트 단위의 데이터도 효율적으로 처리.
  • 다양한 데이터 형식 지원: CSV, 텍스트 파일, 고정 길이 파일 등 다양한 데이터 형식을 로드 가능.
  • 유연한 제어: 데이터 변환, 조건부 삽입, 다중 테이블 로드 지원.
  • 배치 처리: 자동화와 대량 데이터 삽입 작업에 적합.

2. SQL*Loader 사용 구성 요소

2.1 데이터 파일 (Input File)

  • 로드할 데이터가 저장된 파일입니다.
  • 일반적으로 CSV(쉼표로 구분된 값)나 고정 길이 텍스트 파일 형식으로 제공됩니다.

예시: data.csv

1001,John Doe,Developer,50000
1002,Jane Smith,Manager,75000
1003,Emily Davis,Analyst,60000

2.2 제어 파일 (Control File)

  • 데이터 로드 과정을 정의하는 파일입니다.
  • 데이터 파일 경로, 대상 테이블, 데이터 매핑 규칙 등을 설정합니다.

예시: control.ctl

LOAD DATA
INFILE 'data.csv'               -- 데이터 파일 경로
INTO TABLE employees            -- 대상 테이블
FIELDS TERMINATED BY ','        -- 필드 구분자
(
    employee_id    INTEGER EXTERNAL, -- 매핑 필드
    name           CHAR,
    job_title      CHAR,
    salary         INTEGER EXTERNAL
)

2.3 로그 파일 (Log File)

  • SQL*Loader 실행 결과를 기록하는 파일입니다. 성공적으로 삽입된 데이터, 오류, 성능 통계 등을 확인할 수 있습니다.

2.4 배드 파일 (Bad File)

  • 데이터 로드 중 오류가 발생한 레코드를 저장합니다. 데이터 포맷 오류나 제약 조건 위반 등이 포함됩니다.

3. SQL*Loader 실행 방법

SQL*Loader는 명령줄 인터페이스를 통해 실행됩니다. 기본 명령어는 다음과 같습니다:

sqlldr username/password@db control=control.ctl log=load.log

매개변수 설명

  • username/password@db: 오라클 데이터베이스의 사용자 계정 정보.
  • control=control.ctl: 제어 파일 경로.
  • log=load.log: 로그 파일 이름.

4. SQL*Loader 모드

SQL*Loader는 데이터 삽입에 대해 다양한 모드를 제공합니다.

4.1 INSERT

  • 테이블이 비어 있을 때만 데이터를 삽입합니다.
LOAD DATA
INFILE 'data.csv'
INTO TABLE employees
INSERT
FIELDS TERMINATED BY ','
...

4.2 APPEND

  • 기존 데이터가 있어도 데이터를 추가로 삽입합니다.
LOAD DATA
INFILE 'data.csv'
INTO TABLE employees
APPEND
FIELDS TERMINATED BY ','
...

4.3 REPLACE

  • 기존 데이터를 모두 삭제하고 새 데이터를 삽입합니다.
LOAD DATA
INFILE 'data.csv'
INTO TABLE employees
REPLACE
FIELDS TERMINATED BY ','
...

4.4 TRUNCATE

  • 테이블을 비운 뒤 데이터를 삽입합니다. (더 빠르게 동작)
LOAD DATA
INFILE 'data.csv'
INTO TABLE employees
TRUNCATE
FIELDS TERMINATED BY ','
...

5. SQL*Loader 실무 예제

5.1 기본 사용 예제

데이터 파일

employees.csv

1,John,5000
2,Jane,7000
3,Mike,6000

제어 파일

control.ctl

LOAD DATA
INFILE 'employees.csv'
INTO TABLE employees
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
    id     INTEGER EXTERNAL,
    name   CHAR,
    salary INTEGER EXTERNAL
)

실행

sqlldr username/password@orcl control=control.ctl log=load.log

5.2 다중 테이블 삽입 예제

데이터 파일

multi_table.csv

1001,John,DeptA
1002,Jane,DeptB
1003,Mike,DeptA

제어 파일

LOAD DATA
INFILE 'multi_table.csv'
INSERT INTO TABLE employees
FIELDS TERMINATED BY ','
(
    employee_id INTEGER EXTERNAL,
    name CHAR,
    department CHAR
)
INTO TABLE departments
FIELDS TERMINATED BY ','
(
    department_name CHAR
)

5.3 조건부 삽입

제어 파일

LOAD DATA
INFILE 'data.csv'
INTO TABLE employees
WHEN job_title = 'Manager'    -- 조건부 삽입
FIELDS TERMINATED BY ','
(
    employee_id INTEGER EXTERNAL,
    name CHAR,
    job_title CHAR,
    salary INTEGER EXTERNAL
)

6. SQL*Loader 성능 최적화

  1. DIRECT PATH 사용
    • 데이터를 직접 테이블 세그먼트에 기록하여 성능을 향상시킵니다.
    sqlldr username/password@db control=control.ctl log=load.log direct=true
    
  2. 배치 크기 조정
    • ROWS 옵션을 사용하여 한 번에 처리할 행 수를 설정합니다.
    sqlldr username/password@db control=control.ctl log=load.log rows=1000
    
  3. 병렬 처리
    • SQL*Loader의 병렬 모드를 활성화하여 성능을 높입니다.
    sqlldr username/password@db control=control.ctl parallel=true
    
  4. 인덱스 관리
    • 데이터 삽입 전 인덱스를 비활성화하거나 삭제하여 삽입 속도를 높이고, 이후 다시 생성합니다.

7. 로그 파일 확인 및 오류 처리

로그 파일 확인

load.log

Table EMPLOYEES:
  3 Rows successfully loaded.
  0 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.

오류 데이터 확인

배드 파일(.bad)을 열어 실패한 데이터를 분석하고 수정합니다.


8. 마무리

SQL*Loader는 오라클 데이터베이스에서 대량 데이터를 삽입하거나 처리할 때 가장 효과적인 도구 중 하나입니다. 올바른 설정과 옵션 활용으로 데이터 처리 시간을 단축하고 성능을 최적화할 수 있습니다. 다양한 파일 형식과 조건부 로드 기능을 통해 유연하게 데이터 로드 작업을 수행하세요!

반응형