ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [oracle] sqlloader 대량의 데이터 DB에 로드 유틸리티
    카테고리 없음 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: 한 번에 로드할 데이터의 최대 행 수를 지정합니다.

     

    반응형
Designed by Tistory.