我有一个C#控制台应用程序,我正在使用Entity Framework将大约一百万条记录插入到Oracle 11 DB中。第一次运行花了12个多小时,我终于不得不杀了它。我正在记录插入片刻,所以我可以看到发生了什么,我确信这会减慢它的速度。没有错误,只需要插入那么多文件。
有人建议查看SQL Loader for Oracle,但我是Oracle的新手,我不确定我是否可以从控制台应用程序中运行它然后我必须确保它成功完成才能继续下一部分创建和导出文件的应用程序。
对于我可以看到什么来进行插入更快的任何建议?
答案 0 :(得分:4)
你不能将EF用于这种大规模的工作。我的意思是,你可以,但正如你所看到的那样效率不高。
这里最好的方法是使用ODP.NET(http://www.oracle.com/technetwork/topics/dotnet/index-085163.html)并制作一个普通的旧PL-SQL插入。
看一下这个答案:Bulk Insert to Oracle using .NET 有关详细信息,请参阅示例实现http://www.oracle.com/technetwork/issue-archive/2009/09-sep/o59odpnet-085168.html
显然,你仍然可以将EF用于其他一切,你只需要做一些安排就可以用普通的旧pl-sql来实现这一步。这就是我用SQL Server工作的方式。
希望它有所帮助。
答案 1 :(得分:3)
说真的,请查看 SQL * Loader 。阅读turorials。它的速度非常快。其他任何事情都只是浪费时间,包括运行时和你的。您可以学习如何使用和在运行任何替代解决方案所需的时间内插入所有数据。
您可以使用Process类从控制台应用程序启动外部进程。
答案 2 :(得分:0)
使用SQL * Loader或OR .Net的Oracle Bulk Loader机制,它依赖于ODP.Net数据提供程序。 SQL * Loader对Oracle来说更“原生”,但ODP.Net是纯托管代码,无需使用外部进程。
这是一篇很好的帖子,可以帮助您进一步介绍这些主题:Bulk Insert to Oracle using .NET