호기심 많은 개발자 🚀
SQL Loader 본문
🤷♂️ sql loader 사용 이유와 사용 계기 🤷♂️
업무 중 규칙을 가진 text 파일의 데이터를 대량으로 ( 약 600만 건 ) 테이블에 입력시켜야 되는 상황이 발생했다.
때문에 초기 방법으로는 Toad에서 지원하는 import 기능을 사용 하려고 했다.
컬럼이 약 18개 정도이니 데이터 수는 약 1억 개 정도 되었을 것이었고
, 계산 상으로 테이블에 데이터 입력 시간이 18시간 정도 소요되는 상황이 발생했다.
이 상황에서 sqlLoader의 존재를 알게 되었고 , 해당 기능을 사용하여 약 20분 만에 모든 정보를 테이블에 넣을 수 있었다.
👇👇👇 SQL LOADER 에 관한 정보와 사용법은 아래에 작성하겠다. 👇👇👇
SQL LOADER 란 ? "규칙을 가진 외부 파일 데이터를 ORACLE 데이터 베이스에 넣기 위한 유틸리티" 이다.
사용 이유
- 동시에 입력 데이터 파일을 여러개 사용 가능
- 하나의 입력 데이터로 여러 테이블 동시 입력 가능
- 테이블의 기존 데이터 변경이나 , 지우고 다시 입력하거나 추가하는 작업도 가능.
- SQL 함수를 사용해서 입력 가능
- Sequence를 사용해서 데이터를 순차적으로 입력 가능.
사용 및 생성파일
- Control File : 데이터 적재를 위한 제어 파일 ( .ctl )
- Data File : 데이터를 담고 있는 파일
- Log File : 로그 파일
- Bad File : 적재되지 못한 데이터 누적 파일
- Discard File : 적재되지 못한 데이터들에 대한 정보 저장
파일 경로 및 이름을 임의로 지정할 경우
초기sqlldr 실행시 Control파일 경로를 지정한 것과 동일하개 작성하면 됨
EX ] sqlldr userid = 유저ID/유저PW control=컨트롤 파일 경로
error 컨트롤
error의 개수를 지정 할 경우 높게 지정하는것을 추천한다.
이유는 개수를 낮게 지정할 경우 입력도중 중지되는 경우가 허다하게 발생한다.
대량의 데이터를 병렬로 넣을경우
direct옵션을 사용해야 된다. 해당 옵션을 사용할 경우 WHEN등의 조건절을 사용할 수 없다.
데이터 입력 방식
Conventional Data Load <> Direct Path Load
Direct Path Load
해당 기능으로 데이터를 넣을때 외부에서 테이블을 접근 할 수 없다.( 가용성 낮음 ) ( 독점 )
병렬로 입력 시 메모리 사용량이 급증하기 때문에 정말 필요한 경우가 아니면 사용을 지양한다.
PK ,UNIQUE , NOT NULL을 제외한 모든 제약사항을 무시하고 데이터가 입력되게 된다.
Control File 작성 법( 기초 )
- LOAD DATA
- 새로운 데이터 시작을 알림 > 중단 후 다시 시작할 경우 CONTINUE LOAD DATA 사용.
- INFILE
- 입력하고자 하는 데이터의 경로를 작성
- EX ] "div/null" > 입력하고자 하는 데이타가 Control 파일에 있다면 * 를 사용
- 입력하고자 하는 데이터 파일이 여러개인 경우 INFILE을 여러행 인력함.
- 데이터 입력 방식 설정
- REPLACE > 덮어쓰기
- APPEND > 기존 데이터 밑에 신규 데이터 추가
- INSERT > 신규 데이터 입력 ( 내용이 없는 테이블 이여야 됨 )
- TRUNCATE > Table을 Truncate 후 데이터 입력
- INTO TABLE 테이블 명
- 테이블 명을 지정함.
- WHERE
- 입력하고자 하는 저건이 있으면 WHEN을 사용하여 입력 #생략 가능
- FIELDS TERMINATED BY ','
- 데이터 파일의 규칙적으로 사용되어 컬럼을 분리한 문자를 작은 따옴표 내부에 넣는다. #생략 가능
- BEGIN DATA
- 실제 데이터 작성 > 외부 데이터 파일에서 데이터를 불려올 경우 #생략 가능
'DB > SQL' 카테고리의 다른 글
웹 보안 (로그인 , 로그아웃) & SQL injection (2022-01-11) (0) | 2022.01.11 |
---|