카테고리 없음

[oracle] sqlloader 대량의 데이터 DB에 로드 유틸리티

aonee 2024. 12. 20. 15:01

 

SQLLoader ? 

 

대량의 데이터를 Oracle 데이터베이스 테이블에 효율적으로 로드하는 데 사용되는 유틸리티

주로 외부 데이터 파일 (예: CSV, 텍스트 파일 등)에 저장된 데이터를 Oracle 데이터베이스 테이블에 삽입할 때 사용

 

 

사용법

 

sqlldr username/password@dbname control=control_file.log

 

 

  • username/password@dbname: Oracle 데이터베이스에 접속할 사용자 이름과 비밀번호 및 데이터베이스의 접속 정보.
  • control: 로딩 작업을 정의하는 제어 파일의 경로 (Control file).
  • log: SQL*Loader가 작업 중 생성한 로그 파일.

 

Control File (제어 파일)

SQL*Loader의 핵심 파일로, 외부 파일에서 데이터를 어떻게 로드할지에 대한 규칙을 정의합니다. 제어 파일에는 다음과 같은 정보를 포함합니다:

  • 로드할 데이터 파일의 경로.
  • 데이터 파일의 형식 (구분자, 고정 길이 등).
  • 대상 테이블과 매핑될 컬럼.
  • 로드할 데이터의 조건.
  • 예시
LOAD DATA
INFILE 'data.csv'
INTO TABLE employees
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
    employee_id, 
    first_name, 
    last_name, 
    email,
    hire_date DATE "YYYY-MM-DD"
)

 

 

  • LOAD DATA: SQL*Loader가 데이터를 로드하도록 지시하는 구문.
  • INFILE 'data.csv': 로드할 데이터가 저장된 외부 파일 경로.
  • INTO TABLE employees: 로드할 데이터를 삽입할 대상 테이블.
  • FIELDS TERMINATED BY ',': 각 필드가 쉼표로 구분된다는 것을 나타냅니다 (CSV 형식).
  • OPTIONALLY ENCLOSED BY '"': 필드 값이 따옴표로 둘러싸일 수 있음을 지정합니다.
  • DATE "YYYY-MM-DD": 날짜 형식을 정의하는 예시.

control file 옵션

 

  • INFILE: 로드할 데이터 파일의 경로를 지정합니다.
  • INTO TABLE: 데이터를 삽입할 대상 테이블을 지정합니다.
  • FIELDS TERMINATED BY: 데이터 필드를 구분하는 구분자를 지정합니다. 예를 들어, 쉼표 , 또는 탭 \t.
  • OPTIONALLY ENCLOSED BY: 값이 따옴표나 다른 문자로 둘러싸여 있는 경우 해당 문자를 지정합니다.
  • DATE: 날짜 형식을 지정할 때 사용합니다.
  • TRAILING NULLCOLS: 데이터 파일에 누락된 컬럼에 대해 NULL 값을 삽입하도록 지정합니다.

 

 

SQLLoader 실행 예시

sqlldr username/password@dbname control=control_file.ctl 
log=load_log.log 
bad=bad_file.bad 
discard=discard_file.dsc

 

 

  • bad=bad_file.bad: 잘못된 데이터가 있으면 해당 레코드를 기록할 파일을 지정합니다.
    ex) insert 수행 시, 데이터 타입 안맞아서 error난 경우
  • discard=discard_file.dsc: 조건에 맞지 않는 레코드를 기록할 파일을 지정합니다.
    ex) when id < 100 , 해당 조건에 맞지 않는 레코드 기록
  • direct=true: 데이터를 직접 로드하여 성능을 최적화합니다 (배치 처리 모드).
  • rows=1000: 한 번에 로드할 데이터의 최대 행 수를 지정합니다.

 

반응형