호기심 많은 개발자 🚀

SQL Loader 본문

DB/SQL

SQL Loader

🤗 현우 🤗 2022. 4. 21. 22:11

🤷‍♂️ 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 작성 법( 기초 )

  1. LOAD DATA
  2. 새로운 데이터 시작을 알림 > 중단 후 다시 시작할 경우 CONTINUE LOAD DATA 사용.
  3. INFILE
  4. 입력하고자 하는 데이터의 경로를 작성
  5. EX ] "div/null" > 입력하고자 하는 데이타가 Control 파일에 있다면 * 를 사용
  6. 입력하고자 하는 데이터 파일이 여러개인 경우 INFILE을 여러행 인력함.
  7. 데이터 입력 방식 설정
  8. REPLACE > 덮어쓰기
  9. APPEND > 기존 데이터 밑에 신규 데이터 추가
  10. INSERT > 신규 데이터 입력 ( 내용이 없는 테이블 이여야 됨 )
  11. TRUNCATE > Table을 Truncate 후 데이터 입력
  12. INTO TABLE 테이블 명
  13. 테이블 명을 지정함.
  14. WHERE
  15. 입력하고자 하는 저건이 있으면 WHEN을 사용하여 입력 #생략 가능
  16. FIELDS TERMINATED BY ','
  17. 데이터 파일의 규칙적으로 사용되어 컬럼을 분리한 문자를 작은 따옴표 내부에 넣는다. #생략 가능
  18. BEGIN DATA
  19. 실제 데이터 작성 > 외부 데이터 파일에서 데이터를 불려올 경우 #생략 가능

'DB > SQL' 카테고리의 다른 글

웹 보안 (로그인 , 로그아웃) & SQL injection (2022-01-11)  (0) 2022.01.11
Comments