-
[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: 한 번에 로드할 데이터의 최대 행 수를 지정합니다.
반응형