2016-06-23 3 views
-2

배치 파일 자동화를 위해 sqlldr을 통해 csv 파일을 Oracle 서버에 업로드하려고합니다. sqlldr으로 오라클 서버에 파일을 업로드하는 데 너무 많은 시간이 걸립니다. 배치를 통해 분당 2100 개의 행을 업로드합니다. Oracle SQL Developer에서 csv 파일의 데이터를 직접 가져 오려고하면 1 분에 100,000 개의 행이 필요합니다.SQLLDR 성능을 향상시키는 방법?

이 내 .ctl 파일입니다

OPTIONS(SKIP=1)                
LOAD DATA                    
INFILE "D:\\TestBackup\Event.csv"         
INSERT into table EVENT               
APPEND                    
fields terminated by ',' OPTIONALLY ENCLOSED BY '"'        
TRAILING NULLCOLS   
(BRANCH_ID,TOTAL_SALES,TOTAL_LOST_SALES,TOTAL_INVENTORY,INSERTDATE sysdate 
) 

이 내 .bat 파일입니다

sqlldr [email protected]/demo1 DATA='D:\Event.csv"  
CONTROL=D:\Insert.ctl LOG=Insert.log BAD=Insert.bad          

어떻게 성능을 향상시키기 위해?

+0

인용문이'sqlldr' 명령에 맞습니까? 아니면 올바르게 붙여 넣기되지 않았습니까? – Glenn

+0

설명서를 보셨습니까? BINDSIZE 및/또는 READSIZE를 변경하는 것이 좋습니다. [그리고 이것을보십시오] (https://docs.oracle.com/cd/E11882_01/server.112/e22490/ldr_control_file.htm#SUTIL1135). –

+0

삽입 속도가 400 행/초인 BINDSIZE 값과 속도를 최대 12 배까지 변경해보십시오. 약 1000 개의 행/초를 증가시키는 아이디어. 감사합니다 –

답변

1

로드하는 동안 테이블에서 로깅을 끄려면 alter table 문을 사용할 수 있습니다. 로깅의 유무와 차이점을 확인하는 것은 흥미로울 것입니다. 테이블에 일시 중지 될 수있는 트리거가 있습니까? 로드 전 인덱스를 삭제하고로드 중에 업데이트하는 대신에 후에 인덱스를 다시 작성 하시겠습니까?

조금 더 빠르게 할 수있는 아이디어를 던지십시오. 있다면, 어떤 것이 작동하는지 다시보고하십시오. 무엇이 가장 이익이되는지보기를 기대합니다.

+0

그것은 서버에서 잘 실행됩니다. 첫째로 나는 이것을 지역에서 달리다. 너무 오래 걸린다. 이제 백만 줄에 3 분이 걸렸습니다. –

관련 문제