본문 바로가기
Database

오라클 SQL Loader의 컨트롤 파일 작성법

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

 

SQLLoader는 대량의 데이터를 Oracle 데이터베이스에 빠르고 효율적으로 로드할 수 있는 강력한 도구입니다. 데이터를 로드하기 위해 가장 먼저 작성해야 하는 것이 바로 **컨트롤 파일(Control File)**입니다. 이 파일은 데이터의 구조와 로드 방식을 정의하는 핵심 역할을 합니다. 이번 포스팅에서는 SQLLoader 컨트롤 파일 작성법을 자세히 설명하고, 작성 예시를 통해 이해를 돕겠습니다.


1. SQL Loader 컨트롤 파일이란?

컨트롤 파일은 SQL*Loader에게 데이터를 어떻게 해석하고 데이터베이스에 어떻게 삽입할지 지시하는 텍스트 파일입니다. 이 파일에는 데이터 파일의 위치, 테이블 이름, 로드할 열의 정의 및 데이터 처리 규칙 등이 포함됩니다.

컨트롤 파일의 기본 구성 요소는 다음과 같습니다:

  1. LOAD DATA: 데이터를 로드한다는 명령어.
  2. INFILE: 로드할 데이터 파일의 위치.
  3. INTO TABLE: 데이터를 삽입할 테이블 명시.
  4. FIELDS: 필드 구분자와 데이터 형식 지정.
  5. (COLUMN1, COLUMN2, …): 데이터베이스의 열 매핑.

2. 컨트롤 파일 작성법

(1) 기본 문법

다음은 간단한 컨트롤 파일의 기본 구조입니다.

LOAD DATA
INFILE 'data.txt'
INTO TABLE my_table
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
  column1,
  column2,
  column3
)
  • LOAD DATA: SQL*Loader가 데이터를 로드하도록 지시합니다.
  • INFILE: 입력 데이터 파일 경로를 지정합니다.
  • INTO TABLE: 데이터를 삽입할 대상 테이블을 지정합니다.
  • FIELDS TERMINATED BY: 필드 간 구분자를 지정합니다(예: 쉼표).
  • OPTIONALLY ENCLOSED BY: 데이터가 따옴표로 둘러싸인 경우 처리 방식 지정.
  • (열 목록): 데이터를 매핑할 데이터베이스 테이블의 열을 나열합니다.

(2) 예시 1: CSV 파일 로드

다음은 쉼표로 구분된 CSV 파일을 EMPLOYEES 테이블에 로드하는 예시입니다.

컨트롤 파일 내용 (employees.ctl):

LOAD DATA
INFILE 'employees.csv'
INTO TABLE employees
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
  employee_id,
  first_name,
  last_name,
  hire_date DATE "YYYY-MM-DD",
  salary
)

데이터 파일 내용 (employees.csv):

101,John,Doe,2023-01-15,50000
102,Jane,Smith,2023-02-20,55000
103,Bob,Johnson,2023-03-10,60000

실행 명령:

sqlldr username/password control=employees.ctl

(3) 예시 2: 고정 길이 데이터 파일 로드

고정 길이 데이터를 로드하려면 FIELDS 대신 각 열의 시작과 길이를 명시합니다.

컨트롤 파일 내용 (fixed_width.ctl):

LOAD DATA
INFILE 'fixed_width.txt'
INTO TABLE products
(
  product_id    POSITION(1:5),
  product_name  POSITION(6:35),
  price         POSITION(36:45) DECIMAL EXTERNAL
)

데이터 파일 내용 (fixed_width.txt):

00001Laptop                  1500.50
00002Smartphone              800.00
00003Tablet                  1200.75

(4) 예시 3: 조건부 데이터 로드

특정 조건에 따라 데이터를 필터링해 로드할 수도 있습니다.

컨트롤 파일 내용 (conditional.ctl):

LOAD DATA
INFILE 'sales.txt'
INTO TABLE sales_data
WHEN transaction_date >= '2023-01-01'
FIELDS TERMINATED BY '|'
(
  sale_id,
  customer_name,
  transaction_date DATE "YYYY-MM-DD",
  amount
)

데이터 파일 내용 (sales.txt):

1001|Alice|2022-12-31|250.00
1002|Bob|2023-01-01|300.00
1003|Charlie|2023-02-15|400.00

위 예시는 2023-01-01 이후의 데이터만 sales_data 테이블에 로드합니다.


3. SQLLoader 컨트롤 파일 작성 시 유의 사항

  1. 데이터 파일 경로: 컨트롤 파일에서 지정한 데이터 파일 경로가 올바른지 확인합니다.
  2. 필드 구분자: 데이터 파일의 형식에 맞는 구분자 설정이 중요합니다.
  3. 데이터 매핑 정확성: 테이블 열과 데이터 파일의 열 순서 및 형식이 일치해야 합니다.
  4. 오류 처리 옵션: 데이터 로드 도중 발생하는 오류를 최소화하려면 BADFILE 및 DISCARDFILE 옵션을 사용해 오류 데이터를 별도로 저장할 수 있습니다.

4. 마치며

SQL*Loader의 컨트롤 파일은 대량 데이터를 효율적으로 처리하는 데 필수적입니다. 다양한 데이터 형식과 조건을 지원하기 때문에 유연하게 활용할 수 있습니다. 위에서 소개한 예시를 바탕으로 여러분의 데이터 처리 환경에 맞게 컨트롤 파일을 작성해 보세요!

반응형