2016-06-23 40 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万行 –