【问题标题】:What is an efficent way to insert about a million records into Oracle from C# console app?从 C# 控制台应用程序将大约一百万条记录插入 Oracle 的有效方法是什么?
【发布时间】:2016-07-02 10:37:27
【问题描述】:

我有一个 C# 控制台应用程序,我正在使用实体框架将大约一百万条记录插入到 Oracle 11 数据库中。第一次运行花了 12 多个小时,我终于不得不杀死它。我现在正在记录插入,所以我可以看到发生了什么,我确信这会减慢它的速度。没有错误,插入这么多文件需要很长时间。

有人建议查看 SQL Loader for Oracle,但我是 Oracle 的新手,我不确定我是否可以从控制台应用程序中运行它,然后我必须确保它成功完成,然后再继续下一部分创建和导出文件的应用程序。

有什么建议可以让我更快地插入吗?

【问题讨论】:

    标签: c# oracle oracle11g oracle-sqldeveloper


    【解决方案1】:

    您不能将 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 等工作的方式。

    希望对你有帮助。

    【讨论】:

    • 感谢您的链接。我会调查这些,然后告诉你进展如何。
    【解决方案2】:

    说真的,请查看 SQL*Loader。阅读教程。它快得离谱。其他任何事情都只是浪费时间,无论是运行时还是你的。您可能可以学习如何使用它运行任何替代解决方案所需的时间内插入所有数据。

    您可以使用Process 类从您的控制台应用程序启动外部进程。

    【讨论】:

    • 谢谢,我会看一下 SQL*Loader,看看能否让它从我的控制台应用程序中运行。我会让你知道这是怎么回事,我会发布一个关于任何问题的新问题。
    【解决方案3】:

    使用 SQL*Loader 或 .Net 的 Oracle Bulk Loader 机制,该机制依赖于 ODP.Net 数据提供程序。 SQL*Loader 对 Oracle 来说更“原生”,但 ODP.Net 是纯托管代码,无需使用外部进程。

    这里有一篇很好的帖子可以帮助进一步介绍这些主题:Bulk Insert to Oracle using .NET

    【讨论】:

      猜你喜欢
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 2020-12-31
      • 2020-08-10
      • 2023-01-31
      • 2010-09-13
      • 2018-10-18
      相关资源
      最近更新 更多