将大量数据从Oracle复制到SQL Server的最快方法

时间:2017-05-27 12:00:03

标签: sql-server oracle

我需要将大量数据从Oracle数据库复制到SQL Server数据库。最快的方法是什么?

我正在研究在Oracle中需要60到70 GB存储空间的数据。对我使用的方法没有特别限制。我可以使用SQL Server Management Studio,或SQL Serer导入/导出程序,或.NET应用程序,或Oracle中的开发人员界面,或第三方工具,或----。我只需要尽快移动数据。

数据按地理位置组织。每个状态的数据都会单独更新到Oracle数据库中,并可以单独移动到SQL Server。因此,整个数据量很少会立即全部移动。

那么人们会有什么建议?

2 个答案:

答案 0 :(得分:1)

将大量数据插入SQL Server的最快方法是使用SQL Server批量插入。常见的批量插入技术是:

  • T-SQL BULK INSERT语句
  • BCP命令行实用程序
  • 带有快速加载选项的SSIS包OLE DB目标
  • 来自非托管代码的ODBC bcp API
  • 来自非托管代码的OLE DB IRowsetFastLoad
  • .NET应用程序中的SqlBulkCopy

T-SQL BULK INSERT和命令行BCP实用程序使用平面文件源,因此暗示您需要先将数据导出到文件。其他方法可以直接使用Oracle SELECT查询结果,而无需中间文件,只要源/目标网络带宽和延迟不是问题,就应该在整体上表现更好。

使用SSIS,通常会为要使用OLE DB源(Oracle)和OLE DB目标(SQL Server)复制的每个表创建数据流任务。可以根据SSIS版本单独下载Oracle源提供程序。最新的是Microsoft Connector v4.0 for Oracle。 SSMS导入向导可用于为任务生成SSIS包,可以根据需要立即运行和/或保存和自定义。例如,您可以为要复制的状态创建一个包变量,并在刷新数据之前在源SELECT查询和目标DELETE查询中使用该变量。这将允许相同的包重用于任何州。

OLE DB IRowSetFastLoad或ODBC bcp调用应该与SSIS类似地执行,但是您可以通过对细节的大量关注来获得一些额外的性能提升。但是,除非您已熟悉C ++和API,否则使用这些API并非易事。

SqlBulkCopy很快(通常每分钟数百万行),这对于大多数应用程序来说都是足够好的性能,而不会增加非托管代码的复杂性。最好使用Oracle managed provider作为源SELECT查询,而不是.NET代码中的ODBC或OLE DB提供程序。

我的建议是,您不仅要考虑表现,还要考虑现有技能。

答案 1 :(得分:0)

我实际上使用了MS的“Microsoft SQL Server迁移助手(SSMA)”,它实际上做了它承诺要做的事情:

  

SQL Server Migration Assistant for Oracle   (文档)

     

Microsoft SQL Server Migration Assistant v6.0 for Oracle   (下载)

     

SQL Server Migration Assistant (SSMA) Team's Blog

然而在我的情况下,它没有我预期的80 GB Oracle-DB(4小时或者其他)那么快,之后我不得不做一些手动步骤,但是应用程序仍然在地狱中开发(一个表有90多列和100多个索引。)