본문 바로가기
Oracle/이벤트

SQL*Loader-510: Physical record in data file is longer than the maximum(1048576)

by 취미툰 2023. 2. 1.
반응형

에러

SQL*Loader-510: Physical record in data file (dat파일 경로) is longer than the maximum(1048576)
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.

해당 에러는 SQL*Loader를 사용하여 데이터 삽입 시 read bytes의 크기가 작아서 나는 에러입니다.

에러에 나오는 1048576는 약 1M로 default의 설정값입니다.

제가 테스트로 수행하여 증가시킨 MB는 20MB입니다.

sqlldr 명령어 사용 시 뒤에 readsize=20971520를 추가하여 sql*loader를 수행합니다.

 

설정한 MB는 따로 제한은 없으나, 시스템 자체에서 수용할 수 있는 한계를 넘어서면 안됩니다

 

참고 : https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:2167288643374 

 

Ask The Oracle Mentors

create table ticket1 (ticketid number, tcktname varchar2(10), status varchar2(10) ); INSERT INTO ticket1 VALUES (101,'bug','open'); INSERT INTO ticket1 VALUES (102,'bug','close'); INSERT INTO ticket1 VALUES (103,'bug','open'); INSERT IN

asktom.oracle.com

 

명령어

sqlldr userid=유저명/"패스워드명" control=/home/oracle/dba/ysbae/lsnr_log.ctl  readsize=20971520

 

 

테스트

아래는 테스트를 통해서 실제 명령어가 적용되었는지 확인합니다.

테스트는 이전에 리스너 로그를 sql loader로 테이블에 입력하는 글을 참고하여 진행하였고, 확인은 sql*loader 사용시 생성되는 로그를 통해 확인하였습니다.

참고 : https://bae9086.tistory.com/373

 

SQL*Loader 를 이용해서 리스너 로그 -> DB 테이블로 넣기

로그 분석이 필요하여 테이블로 로그데이터를 이관해달라는 요청을 받고 여러가지 테스트 후에 SQL* Loader를 이용하여 넣기로 하였습니다. 이유는, 1.1회성으로 한번만 넣으면 되는 점. 2.간단하게

bae9086.tistory.com

1.테이블 생성

create table lsnr_log
(day varchar2(20),
 time varchar2(20),
 message varchar2(500)
) 
;

 

2.컨트롤파일 생성

LOAD DATA
infile '/oracle/grid/base/diag/tnslsnr/dbarac1/listener_dbarac/trace/listener_dbarac.log'
APPEND
INTO TABLE lsnr_log
APPEND

(
day position(1:11),
time position(13:20),
message position(24:200)
)

 

3.sql*loader 명령어 수행(read bytes 파라미터 없이 deafult로 수행)

Read   buffer bytes: 1048576 를 확인할 수 있습니다.

$ sqlldr userid=dev/"패스워드명" control=/home/oracle/dba/ysbae/lsnr_log.ctl DIRECT=true


--로그 확인
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Continuation:    none specified
Path used:      Direct

...


Bind array size not used in direct path.
Column array  rows :    5000
Stream buffer bytes:  256000
Read   buffer bytes: 1048576

 

4.sql*loader 명령어 수행(read bytes 파라미터 사용하여 수행)

Read   buffer bytes:20971520 로 20MB가 잘 적용된것을 확인할 수 있습니다.

$ sqlldr userid=dev/"패스워드명" control=/home/oracle/dba/ysbae/lsnr_log.ctl DIRECT=true readsize=20971520

--로그확인
...생략
Bind array size not used in direct path.
Column array  rows :    5000
Stream buffer bytes:  256000
Read   buffer bytes:20971520

 

반응형

댓글