我目前有一个日常流程,使用调用 sql_loader 的 shell 脚本将大量数据从 TXT 文件加载到 ORACLE 数据库中。我想将其迁移到 .NET 服务,但不想依赖从我的服务执行 sql_loader。
实现这一目标的最佳(和最快)方法是什么?
我目前有一个日常流程,使用调用 sql_loader 的 shell 脚本将大量数据从 TXT 文件加载到 ORACLE 数据库中。我想将其迁移到 .NET 服务,但不想依赖从我的服务执行 sql_loader。
实现这一目标的最佳(和最快)方法是什么?
将数据加载到 DataTable 中,并使用OracleBulkCopy类(来自Oracle Data Provider for .NET)一次将其全部加载到数据库中。这仅在您仅将数据插入数据库时才有效,您不能使用 OracleBulkCopy 进行更新。
我假设您不喜欢 SQL Loader,因为它的命令行界面和(有点)笨重的控制文件。但这不是使用“SQL Loader”的唯一方法
Oracle 现在有一个叫做外部表的东西。你可以在这里看到一个例子。
简单地说,您将文件放入目录(定义文件系统目录的数据库对象),定义表参数等...只需查看示例。现在突然之间,您的平面文件看起来就像 Oracle 的一个表。
您执行“INSERT INTO perm_Table SELECT * FROM external_table”。
因此,现在您的 .net 应用程序只需将文件重命名为外部表指向的任何内容,然后执行 INSERT,然后重命名文件。
瞧。
您已加载数据。这一切都是用 SQL 完成的,比 ADO 或您可以使用的任何其他库要快得多。不再笨拙的命令行界面。
SQL Server 的 ADO.Net 提供程序支持模拟 SQL Server BCP 的 SqlBulkCopy 函数。
我对 Oracle 提供程序一无所知,但我会开始查看该提供程序是否支持与 sql_loader 类似的功能。
我会看看DevArt (以前的 CoreLab)的第 3 方 dotConnect 库。虽然我没有专门使用他们的OracleLoader组件,但我每天都使用他们的连接、命令、datareader 和 dataadapter 对象,并且发现它们确实非常快。
希望有帮助:o)
如果您有可用的 SSIS,那将是一个很好的工具。在 .NET 方面,我建议使用上面提到的 Oracle 类,但 SSIS 或任何 ETL 工具会是更好的选择。
我实际上使用另一种方法解决了我自己的问题:我编写了一个存储过程来加载数据并使用UTL_FILE包。我不知道这是否是最快的方法,但它非常快速且非常灵活(我可以在加载时随意操作文本数据)。
感谢所有回复,我刚刚发布此内容是为了向遇到同样问题的人展示另一种选择。