티스토리 뷰
Oracle/[oracle] Error
[유틸리티 에러]KUP-04020: 지원되는 버퍼 크기 524288보다 긴 레코드가 <filename>에서 발견되었습니다.
kr98gyeongim 2022. 3. 28. 10:42■현상
외부테이블에서 파일이 작은 경우에는 에러가 되지 않지만 큰 파일을 가져오려고 하면 에러가 된다.
KUP-04020: found record longer than buffer size supported, 524288
■원인
EXTERNAL TABLE(외부 테이블)을 이용하여 파일을 읽을 때 읽기 버퍼 오버플로
예를 들어 Windows에서 실행되는 오라클에서
텍스트 파일을 캡처하는 외부 테이블 BIG_TEXT_TABLE에서 오류가 발생할 수 있다.
CREATE TABBLE BIG_TEXT_TABLE(
TEXT VARCHAR2(4000)
)
ORGANIZATION
EXTERNAL(
TYPE
ORACLE_LOADER
DEFAULT DIRECTORY external_data
ACCESS PARAMETERS(
DELIMITED BY KEYLINE /** ← NEWLINE*/
)
LOCATION ('big_raw_file.txt')
)
SELECT * FROM BIG_TEXT_TABLE WHERE ROWNUM <= 10
*
1행에서 에러가 발생했습니다 :
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04020: found record longer than buffer size supported, 524288, in
C:\ext_dir\big_raw_file.txt
*
레코드 구분자가 NEWLINE이라는 지정이지만, Windows에서는 CR+LF이다.
이때 UNIX계의 시스템으로부터 FTP 등으로 '바이너리 모드'로 취득한 텍스트 파일 'big_raw_file.txt'의 개행코드가
LF의 경우에 CR+LF는 파일에서 찾을 수 없다.
따라서 1레코드(1토큰)의 취득에 READSIZE의 버퍼를 초과한다.(디폴트 값 : 512KB)
CR+LF와 LF의 차이는 파일의 바이트 사이즈가 다른 것만으로 보통의 에디터로 열어봐도
차이를 모르기 때문에 눈치채기 어렵다.
■대응
외부테이블을 다음과 같이 LF를 레코드 구분자로 다시 정의하여 검색이 파일의 끝까지 도달하지 않도록 설정한다.
CREATE TABLE BIG_TEXT_TABLE (
TEXT VARCHAR2(4000)
)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY external_data
ACCESS PARAMETERS (
RECOREDS DELIMITED BY X 'OA' /** LF 16진수 표기 */
)
LOCATION('big_raw_file.txt')
)
또는 FTP를 통해 외부에서 얻은 텍스트 파일을 아스키 모드로 다시 가져온다.
'Oracle > [oracle] Error' 카테고리의 다른 글
[개발시 에러] ORA-00001: 유일성(무결성) 제약조건에 위배됩니다. (0) | 2022.03.28 |
---|---|
[플랫폼 종속 문제(데이터 이식, 마이그레이션)] ORA-12899: 열 string의 값이 너무 큽니다(실제:string, 최대:string) (0) | 2022.03.28 |
[유틸리티 에러] EXP-00091: 의심스러운 통계를 내보내는 중입니다. (0) | 2022.03.28 |
[유틸리티 에러] IMP-00032: SQL문이 버퍼 길이를 초과했습니다. (0) | 2022.03.25 |
[개발시 에러] ORA-01481 : 숫자 형식 모델이 잘못되었습니다. (0) | 2021.02.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- vba
- EXCEPTION절
- 유틸리티에러
- 시간차이
- in/out/ref 예제
- NLog
- 초기화파라미터파일
- 후나빙
- C#
- 동기통신
- rollback
- TrimEnd
- REVOKE
- USER_SYS_PRIVS
- BEGIN절
- Oracle
- DBA_SYS_PRIVS
- commit
- in/out/ref 차이점
- 에러
- 유틸리티
- in/out/ref
- grant
- VB.Net
- pl/sql
- 참조전달
- PL/SQL 예외처리문
- in/out/ref 공통점
- PL/SQL 실행문
- DECLARE절
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함