DataBase/Oracle

EXTERNAL TABLE(외부테이블) ORA-29913:ODCIEXTTABLEFETCH , ORA-29400: 데이터 카트리지.., ORA-30653: 거부 제한.. 해결.

조심이 2015. 8. 18. 16:16
반응형

EXTERNAL TABLE(외부테이블)을 이용하여 외부파일(cvs ,txt, dat) 읽어오기 및 오류처리..


-일단 읽어올 파일이 DB 의 D:\DATA 폴더에 있다고 가정. 리눅스의 경우 /user/data 라고 가정해도 됨.

-읽어올 파일은 파이프(|)로 구분되어진 txt파일이라고 가정. data.txt

-파일내용이 아래와 같다고 가정하고.

col1|col2|col3|col4

a1|a2|a3|a4

b1|b2|b3|b4


외부파일을 만든다.


 CREATE  TABLE CWICT.EXT_TEST

    (

    COL1 VARCHAR(200),

    COL2 VARCHAR(200),

    COL3 VARCHAR(200),

    COL4 VARCHAR(200)

    )

    ORGANIZATION EXTERNAL(

        TYPE ORACLE_LOADER

        DEFAULT DIRECTORY CW_DATA_FILE_DIR  /**CW_DATA_FILE_DIR 은 디렉토리**/

        ACCESS PARAMETERS(

            RECORDS DELIMITED BY NEWLINE /**줄의 구분자**/

            FIELDS TERMINATED BY '|'      /**데이터의 구분자**/

        )

        LOCATION ('data.txt' )

    )


*디렉토리 및 경로어쩌구 저쩌구 에러 발생시 처리

-DEFAULT DIRECTORY의 경우 일반 USER면 생성할 권한이 없음. 

 1. DBA 권한으로 접속.

 2. 디렉토리 생성 -> CREATE OR REPLACE DIRECTORY CW_DATA_FILE_DIR_1 AS 'D:/DATA'; 

 3. 권한부여 grant read,write on directory CW_DATA_FILE_DIR to 사용자;
 4. 사용자로 다시 접속 후 
   SELECT owner, directory_name, directory_path
   FROM all_directories 
  디렉토리가 보이는지 확인.


*아래같은 오류

ORA-29913: ODCIEXTTABLEFETCH 콜아웃 실행 시 오류

ORA-29400: 데이터 카트리지 오류

KUP-04020: found record longer than buffer size supported, 524288, in D:\DATA\data.txt


ORA-29913: error in executing ODCIEXTTABLEOPEN callout

ORA-29400: data cartridge error


RECORDS DELIMITED BY NEWLINE   -> RECORDS DELIMITED BY '\n' 이렇게 변경.


*아래같은 오류

ORA-29913: ODCIEXTTABLEFETCH 콜아웃 실행 시 오류

ORA-30653: 거부 제한 도달

ORA-30653: reject limit reached


 ORGANIZATION EXTERNAL(

        TYPE ORACLE_LOADER

        DEFAULT DIRECTORY CW_DATA_FILE_DIR  /**CW_DATA_FILE_DIR 은 디렉토리**/

        ACCESS PARAMETERS(

            RECORDS DELIMITED BY NEWLINE /**줄의 구분자**/

            FIELDS TERMINATED BY '|'      /**데이터의 구분자**/

        )

        LOCATION ('data.txt' )

    ) 

    REJECT LIMIT UNLIMITED;     <-이거 붙여줌. 

반응형