Sql server 将大量数据从Oracle复制到SQL Server的最快方法
我需要将大量数据从Oracle数据库复制到SQL Server数据库。最快的方法是什么 我看到的数据在Oracle中需要60-70千兆的存储空间。我使用的方法没有特别的限制。我可以使用SQL Server Management Studio,或SQL Serer导入/导出程序,或.NET应用程序,或Oracle中的开发人员界面,或第三方工具,或--。我只需要尽快移动数据 数据是按地理位置组织的。每个状态的数据都会单独更新到Oracle数据库中,并且可以自行移动到SQL Server。因此,整个数据量很少会同时移动 那么人们会有什么建议呢?我曾经为此使用过微软的“微软SQL Server迁移助手(SSMA)”,它确实做到了它承诺要做的事情: (文件) (下载) 然而,在我的例子中,它并没有我预期的80 GB Oracle DB(4小时或更多)的速度快,之后我不得不做一些手动步骤,但应用程序无论如何都是在地狱中开发的(一个表有90+列和100+索引)。我实际上使用了“Microsoft SQL Server迁移助手(SSMA)”微软一次就这样做了,它实际上做到了它承诺要做的事情: (文件) (下载)Sql server 将大量数据从Oracle复制到SQL Server的最快方法,sql-server,oracle,Sql Server,Oracle,我需要将大量数据从Oracle数据库复制到SQL Server数据库。最快的方法是什么 我看到的数据在Oracle中需要60-70千兆的存储空间。我使用的方法没有特别的限制。我可以使用SQL Server Management Studio,或SQL Serer导入/导出程序,或.NET应用程序,或Oracle中的开发人员界面,或第三方工具,或--。我只需要尽快移动数据 数据是按地理位置组织的。每个状态的数据都会单独更新到Oracle数据库中,并且可以自行移动到SQL Server。因此,整个数
然而,在我的例子中,它并没有我预期的80 GB Oracle DB(4小时左右)的速度快,我不得不在之后执行一些手动步骤,但应用程序无论如何都是在地狱中开发的(一个表有90+列和100+索引).将大量数据插入SQL Server的最快方法是使用SQL Server批量插入。常见的批量插入技术有:
- T-SQL批量插入语句
- BCP命令行实用程序
- 具有快速加载选项的SSIS包OLE DB目标
- 来自非托管代码的ODBC bcp API
- 从非托管代码加载OLE DB IRowsetFastLoad
- 来自.NET应用程序的SqlBulkCopy
BULK INSERT
和命令行BCP
实用程序使用平面文件源,这意味着您需要首先将数据导出到文件。其他方法可以直接使用OracleSELECT
查询结果,而不需要中间文件,只要不考虑源/目标网络带宽和延迟,中间文件的总体性能应该会更好
使用SSI,通常会为每个要使用OLE DB源(Oracle)和OLE DB目标(SQL Server)复制的表创建一个数据流任务。根据SSIS版本的不同,可以单独下载Oracle源提供程序。最新的是最新的。SSMS导入向导可用于为任务生成SSIS包,该包可立即运行和/或根据需要保存和自定义。例如,您可以为要复制的状态创建一个包变量,并在刷新数据之前在源SELECT
查询和目标DELETE
查询中使用该变量。这将允许在任何状态下重用相同的包
OLE DB IRowSetFastLoad或ODBC bcp调用的性能应该与SSI类似,但您可以通过大量关注细节来获得一些额外的性能增益。但是,使用这些API并不重要,除非您已经熟悉C++和API。
SqlBulkCopy速度很快(通常每分钟有数百万行),对于大多数应用程序来说,它的性能足够好,而不需要非托管代码的额外复杂性。最好对源选择查询使用,而不是.NET代码中的ODBC或OLE DB提供程序
我的建议是,您不仅要考虑性能,还要考虑现有的技巧。
< P>将大量数据插入SQLServer的最快方法是使用SQLServer批量插入。常见的批量插入技术有:
- T-SQL批量插入语句
- BCP命令行实用程序
- 具有快速加载选项的SSIS包OLE DB目标
- 来自非托管代码的ODBC bcp API
- 从非托管代码加载OLE DB IRowsetFastLoad
- 来自.NET应用程序的SqlBulkCopy
T-SQLBULK INSERT
和命令行BCP
实用程序使用平面文件源,这意味着您需要首先将数据导出到文件。其他方法可以直接使用OracleSELECT
查询结果,而不需要中间文件,只要不考虑源/目标网络带宽和延迟,中间文件的总体性能应该会更好
使用SSI,通常会为每个要使用OLE DB源(Oracle)和OLE DB目标(SQL Server)复制的表创建一个数据流任务。根据SSIS版本的不同,可以单独下载Oracle源提供程序。最新的是最新的。SSMS导入向导可用于为任务生成SSIS包,该包可立即运行和/或根据需要保存和自定义。例如,您可以为要复制的状态创建一个包变量,并在刷新数据之前在源SELECT
查询和目标DELETE
查询中使用该变量。这将允许在任何状态下重用相同的包
OLE DB IRowSetFastLoad或ODBC bcp调用的性能应该与SSI类似,但您可以通过大量关注细节来获得一些额外的性能增益。但是,使用这些API并不重要,除非您已经熟悉C++和API。
SqlBulkCopy速度很快(通常每分钟有数百万行),对于大多数应用程序来说,它的性能足够好,而不需要非托管代码的额外复杂性。最好对源选择查询使用,而不是ODBC或OLE DB