일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 주식 분석
- 손경제
- 코딩테스트
- 손에 잡히는 경제 요약
- 프로그래머스
- 경제뉴스 요약
- 손경제 요약
- 코테
- Python
- 상한가 이유
- 급등 이유
- 이진우
- 백준
- 급등주 분석
- 경제뉴스
- 자바
- 파이썬
- 알고리즘
- 손에 잡히는 경제
- java
- 주식
- Programmers
- boj
- 상한가
- 주식 상한가
- 이진우의 손에 잡히는 경제
- 테마주
- 경제
- 상한가 분석
- 급등주
- Today
- Total
Completion over Perfection
SQL*Loader (sqlldr) 유틸 사용시 주의점 본문
얼마전에 Tibero에서 Oracle로 DB를 마이그레이션하면서 여러가지 문제에 봉착을 하게 되었는데,
그 중에 하나가 sqlldr 유틸리티였다.
내가 현재 운영하는 서비스는 매일 업데이트되는 csv파일을 AWS S3 버킷으로부터 받아오고,
그 파일로부터 데이터를 추출해서 sqlldr를 통해 Oracle DB에 넣어주는 형태로 되어있다.
문제는 sqlldr를 통해서 DB에 데이터를 밀어넣어줄 때 발생했다.
Tibero DB를 사용할 때는 tbloader라는 sqlldr와 비슷한 유틸리티를 써서 csv 파일로부터 데이터를 받아온다음
DB에 바로 넣어주었었는데, 이 때 만약 에러가 발생하더라도 .bad 파일만 생성해주고 나머지 데이터들은
그대로 다 밀어넣어줘서 별 문제가 없었다.
근데 sqlldr는 errors라는 값이 default로 50으로 설정이 되어있었고,
csv파일에서 컬럼에 맞지 않는 데이터가 들어가 있을 경우에는 에러를 발생시키고
만약 그 에러의 갯수가 50개가 넘어가면 더이상 DB에 데이터를 밀어넣지 않고 멈춰버리는 것이었다.
그래서 아래와 같이 설정해서 에러가 50개 이상 발생하더라도 나머지 데이터는 모두 밀어넣을 수 있도록 설정을 해줬다.
sqlldr userid/password@ipaddress:port/SID control=ctl파일위치 errors=999999
이것때문에 거의 3~4시간을 DB 데이터 전수검사한다고 시간 날렸다. ㅠ.ㅠ
여러분은 저처럼 고생하지 말고 sqlldr 사용시에는 반드시 에러 설정을 맥스치로 설정해두세요.
※ 참고로 errors 값으로 설정할 수 있는 맥스치는 2147483647 이라고 합니다.
-1로 넣으라는 사람들도 있던데, 저는 에러나더라고요.