将大量数据从一个数据库移动到另一个数据库

时间:2010-12-03 18:53:14

标签: .net sql-server oracle data-migration

我有一个表,其中包含至少1,200万行数据,如下所示:

Id (varchar(10) | Image (varbinary(max)
---------------- -------------------------
X123456789      | 0x....
1121132121      | 0x....
JF13232131      | 0x....

将数据从此表移动到块中的另一个表的有效方法是什么。 我正在编写一个简单的.net控制台应用程序来执行此操作,我担心当我尝试一次加载所有1200万行时,我的应用程序将崩溃。

感谢您的帮助

附录#1:源db是oracle,目标db是sql server

附录#2:我也将图像数据从tiff转换为jpeg

5 个答案:

答案 0 :(得分:2)

首先,我不会尝试通过.NET应用移动12M行。我会使用像SSIS(SQL Server集成服务)这样的工具来做到这一点。 SSIS速度非常快,可以支持事务并支持复杂的数据转换。 SSIS旨在做这类事情。

但是,如果必须在.NET应用程序中执行此操作。我可能会一次读取1K到5K行的内容,将它们插入到目标数据库中,并获得下一个1K到5K行等。但这比通过像SSIS这样的工具要慢得多。

答案 1 :(得分:2)

您应该查看SqlBulkCopy class,您可以使用它一次性移动整个表格。

答案 2 :(得分:2)

  

“什么是有效的方式   将数据从此表移动到另一个表   表格块“

您认为需要以块的形式移动数据,因为您手动滚动工具而不是使用SSIS。您认为不能使用SSIS,因为您希望“在初始拉动后对数据进行一些转换/转换”。您认为哪些转换适用于您认为SSIS无法做到的?我的意思是SSIS可以做很多事情。 Find out more

因为使用专用工具比尝试编写自己的工具更有效。另一方面,在避免数据损坏和数据丢失方面,在单个操作中迁移整个表是一个更安全的选择。


  

“我正在转换来自tiffs的图像   到jpegs。 SSIS能为我做这件事吗?“

好的,很明显这是一个相当专业的要求,而不是我们期望SSIS作为内置的东西。但SSIS确实支持custom transformations,因此您可以编写一个转换图像的组件。

答案 3 :(得分:1)

我解决问题的方法是连接到.Net中的Oracle数据库,并使用DataReader逐行读取数据。然后处理每一行进行图像转换,然后只需将新数据插入到Sql Server数据库中。现在,我想这不会是一件很快的事情,但我看不出有什么理由会因为数据从Oracle流式传输然后直接进入Sql Server而崩溃。

如果你想让它运行得更快,那么让多个线程进行转换并插入到Sql Server中就不会太难了。

答案 4 :(得分:0)

你看过BCP了吗?我们遇到了类似的问题,它对我们来说很好。