2016-06-23 152 views
-2

我試圖通過sqlldrcsv文件上傳到Oracle服務器,以進行批處理文件自動化。將文件上傳到Oracle服務器需要花費太多時間,其中包括sqlldr。通過批處理,它可以在一分鐘內上傳2100行。當我嘗試從Oracle SQL Developer的csv文件直接導入數據時,它在一分鐘內需要100k行。如何提高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

嘗試對BINDSIZE值進行一些更改,並將速度提高至12倍,現在插入速率爲400行/秒。任何想法增加約1000行/秒。謝謝 –

回答

1

您可以使用alter table語句在加載期間關閉表上的日誌記錄。看到有和沒有日誌記錄的區別會很有趣。表中是否有可能被暫停的觸發器?也許在加載前刪除索引並重新創建,而不是在加載期間更新它們?

只是拋出一些想法,可能會加快一點。請報告什麼,如果有的話,工作。期待看到最有利的東西。

+0

它在服務器上運行良好。首先我從本地運行它需要太多時間。現在它花了3分鐘爲100萬行 –