프로젝트에서 DBA 와 데이터 이관을 맡아 진행 중이다.
아래와 같은 메시지를 만났다.
지정한 Year, Month 및 Day 매개 변수가 DateTime을 표현할 수 있는 범위를 벗어났습니다. |
디버깅 방법이 딱히 떠오르지 않았다.
소스서버인 Oracle 서버에서 데이터를 읽다가 나는 에러인데, 이번에 읽어 들인 데이터는 11만 건이 넘었다.
구글링 해봐도 딱히 내게 맞는 답이 없다.
11만건을 CSV 로 내려 조사했다.
날짜 타입을 엑셀에서 필터링 해서 봐도 딱히 문제 없어 보였다.
이들 데이터를 다시 Notepad++ 로 옮겨 붙이고 년,월,일,시,분을 모두 탭으로 나누고,
다시 엑셀에 갖다 붙였다.
(이때 빈줄은 모두 없애야 함. (필터링을 위해) Nodepad++ 너무 편하다~)
엑셀에 붙여보니, 아래와 같다.
이제 앞서 보다 훨씬 정확하게 데이터 품질을 검증 할 수 있게 됐다.
그리고 드디어 문제를 발견했다.
Oracle 에서는 DateTIme2 를 지원해서 날짜의 범위가 광범위하다. 0001년도부터 지원~
그런데, MSSQL 에서 내가 지정한 데이터 타입은 Datetime 이고 이것은 1900-01-01부터 지원한다. 그래서 타입 에러가 발생한 것.
위의 날짜는 0002-01-01 00:00:00 로 등록된 것을 확인했다.
select * from $$_rslt where $$ < '1900-01-01'; select * from ##_rslt where ## < '1900-01-01'; -- 18 개 발견 select * from &&_rslt where && < '1900-01-01'; select * from $$_rslt where $$_DT < '1900-01-01'; |
이렇게 확인된 데이터를 제외하고 다시 이관을 실시했고,
제외된 데이터는 다시 고객과 협의 하여, 처리할 예정이다.
'PROGRAMMING > Database' 카테고리의 다른 글
MSSQL 동적쿼리 내 한글깨짐 (0) | 2018.03.15 |
---|---|
MSSQL DB 파일 옮기기 (0) | 2018.02.22 |
MSSQL 쿼리 히스토리 알아내기 (0) | 2017.10.03 |
MSSQL 프로시저의 리턴값을 받는 SQL 활용 (0) | 2017.10.03 |
MSSQL 로그사이즈 줄이기 (0) | 2017.10.03 |
댓글