database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41796 게시물 읽기
No. 41796
oracle sqlldr 관련문의입니다.
작성자
장현옥(jangok)
작성일
2020-05-12 11:20
조회수
2,553

항상 자료를 찾고 도움을 많이 받고 있습니다.

 

문의사항은

 

windows server 에서 sqlldr 로 text file 을 넣으면 잘 들어갑니다.  varchar2(4000) 필드에

 

aix server 에서 sqlldr 로 넣으면 안들어갑니다. 

 

windows server 에는 NLS_LANG 환경변수도 없는데..

 

aix server 에서 다양한 NLS_LANG 변수를 설정해도 그렇습니다. (한글깨지는 문제는 해결했습니다)

 

혹시 경험있으신분 답변부탁드립니다.

 

즐거운 오후 되세요.. 읽어주셔서 감사합니다.

이 글에 대한 댓글이 총 8건 있습니다.

로더 사용시 발생하는 에러메시지는 어떻게 나오나요? 

lucky님이 2020-05-12 11:50에 작성한 댓글입니다. Edit

감사합니다.

 

280자 넘는것이 안들어가는것 같습니다.

로그는..

ROWS 매개변수에 사용된 값이 64에서 24(으)로 변경됨
레코드 1639: 기각됨 - 테이블 NTS_NV_OPINION_INPUT, 열 APPL_CNTN에 오류
데이터 파일의 필드가 최대 길이를 초과했습니다

장현옥(jangok)님이 2020-05-12 13:04에 작성한 댓글입니다.

윈도우, AIX 의 오라클 캐릭터셋이 틀린건 아닐까요? 

MSWIN949, UTF8 의 캐릭터 사이즈 차이가 있습니다. 

한글의 경우 2 bytes:3 bytes (MSWIN949:UTF8) 입니다. 

같은 데이터가 컬럼 사이즈 문제로 안들어가는 경우는

캐릭터셋 확인이 필요해보입니다. 

아니면, 테이블 컬럼 매핑 문제이거나 

오라클 에러 메시지를 그대로 적어주시면 좋겠습니다. 

 

lucky님이 2020-05-12 13:50에 작성한 댓글입니다. Edit

친절한 답변 감사합니다.

저도 여러군데 알아보았는데.. 캐릭터셋 문제인것 같습니다.

자료를 전달해주는 쪽의 상황을 확인중에 있습니다.

해결되면 다시 댓글로 알려드리겠습니다.

오늘도 즐거운 하루 보내세요~~

장현옥(jangok)님이 2020-05-13 09:11에 작성한 댓글입니다.

추가문의드립니다.

select userenv('LANGUAGE') from dual;

보내는쪽 Oracle 의 설정은   KOREAN_KOREA.KO16MSWIN949 로 되어 있다고합니다.

.profile 에는 NLS_LANG 변수는 없고요~

                    LANG=ko_KR 이렇게..

 

저희쪽 오라클에는  KOREAN_KOREA.KO16KSC5601 되어 있습니다.

.profile 에는 LANG=ko_KR.IBM-eucKR

 

그래서 NLS_LANG 변수를 KOREAN_KOREA.KO16MSWIN949  로 설정했는데..

그래도 안되네요..  혹시 보내는쪽은 UTF-8 이고 저희는 EUC-KR 이래서 그럴까요?

 

설정을 어떻게 하면 될까요??

검토바랍니다.

 

 

 

 

장현옥(jangok)님이 2020-05-13 11:38에 작성한 댓글입니다.

윈도우, AIX 서버에서 다음 값이 다른지 확인해보세요. 

(제 생각은 윈도우는 MSWIN949 / AIX 는 KS5601 나올 것 같은데요.) 

select parameter, value from nls_database_parameters where parameter = 'NLS_CHARACTERSET'

오라클의 캐릭터셋 표현범위 

KS5601 < MSWIN949 < UTF8  

입니다. 지금 보니 MSWIN949 에서 받은 파일 데이터를

KS5601 로 sqlldr 하는 것 같습니다. 

이런 경우, sqlldr 에 ignore 옵션이 있었던 것 같긴 한데, 정확하지는 않네요. 

WIN949 의 데이터를 KS5601 에 넣는 경우 데이터가 안들어가거나

깨지는 문제 예를 들어, "SK더샾" 은

MSWIN949 에서는 "SK더샾" 

KS5601 에서는 "SK더?" 이렇게 보일겁니다. 

 

lucky님이 2020-05-13 15:00에 작성한 댓글입니다. Edit

우선 lucky님 많은 관심 감사드립니다.

 

문제를 해결했습니다.

 

정리하자면.

1. 한글깨지는 현상은 NLS_LANG 을 변경해서 해결했습니다.

2. 200 자 이상 오류나는것은

sqlldr control file 정의를 잘못해서 그런것 같습니다.

 windows 에서는

APPL_CNTN   char,

로 하여도 잘되었는데..

  APPL_CNTN          char(4000),

로 하니 됩니다. 

 

ㅠ.ㅠ 1주일을 고생했습니다.  ~~ 감사합니다.

장현옥(jangok)님이 2020-05-18 13:28에 작성한 댓글입니다.

다행히도 오라클 캐릭터셋 문제가 아니네요. 

서버 / 클라이언트의 NLS 환경 세팅 문제였네요. 

이걸 제가 캐치를 못했습니다. 

그리고 char(4000) 은 윈도우에서 사용하는 이유가 있나요? 

4000이 먹는것도 신기하네요. char(2000) 이 최대일텐데

varchar2(4000) 를 고려하시는게 좋을 것 같습니다만. 

char, varchar2 성능차이도 머신 스펙이 좋아져서 거의 차이가 안납니다. 

char 은 마이그레이션, 자리수 변경에 작업에 있어서 지연을 줄 수 있습니다. 

https://m.blog.naver.com/PostView.nhn?blogId=lovemylife15&logNo=70157081314&proxyReferer=https:%2F%2Fwww.google.com%2F

 

lucky님이 2020-05-18 14:44에 작성한 댓글입니다.
이 댓글은 2020-05-18 14:46에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41799aix crontab 에서 sqlldr 실행이 안되는데~~ [3]
장현옥
2020-05-28
2442
41798oracle DB 외부 네트워크 접속 [2]
zerros
2020-05-27
1913
41797오라클 Function 오류 ㅠㅠ 한번만 봐주세요. ㅠㅠ [1]
ORACLE
2020-05-18
1984
41796oracle sqlldr 관련문의입니다. [8]
장현옥
2020-05-12
2553
41795오라클 리스너 문의입니다. [1]
설일야
2020-05-12
2193
41794문자열 자르기 방법 [2]
블루이글
2020-04-29
3711
41793오라클 SE1 라이센스 기간 문의(만료일) [1]
카비
2020-04-20
2122
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.053초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다