由于BLOB

时间:2015-11-09 12:49:24

标签: sql sql-server oracle tsql ssis

我正在尝试创建一个副本数据库。请参阅以下查询:

SELECT CaptureDate, GenieVRMs.VRM, Camera, ShortName, Latitude, Longitude, ImageBlob, WeedDate, OverviewWeedDate, LastUpdated 
FROM (select * from openquery (bof2, 'SELECT CaptureDate, Bof2PlateImage.VRM, Camera, ShortName, Latitude, Longitude, Bof2PlateImage.WeedDate, ''1900-01-01'' AS OverviewWeedDate, 
''1900-01-01'' LastUpdated FROM bof2.Bof2PlateImage  inner join BOF2.CAMERA on BOF2.Bof2PlateImage.CAMERA = BOF2.CAMERA.URN where rownum<1000000')) As BOF INNER JOIN GenieVRMs 
ON BOF.VRM=GenieVRMs.VRM 

有70451258行。我使用SSIS传输了1,000,000条记录,即上面是OLEDB源命令(Oracle数据库),目标是SQL数据库。我已经知道转移60,000,000行需要大约两个月的时间。我尝试了以下TSQL查询:

select * into CopyDatabase(
SELECT CaptureDate, GenieVRMs.VRM, Camera, ShortName, Latitude, Longitude, ImageBlob, WeedDate, OverviewWeedDate, LastUpdated 
FROM (select * from openquery (bof2, 'SELECT CaptureDate, Bof2PlateImage.VRM, Camera, ShortName, Latitude, Longitude, ImageBlob, Bof2PlateImage.WeedDate, ''1900-01-01'' AS OverviewWeedDate, 
''1900-01-01'' LastUpdated FROM bof2.Bof2PlateImage  inner join BOF2.CAMERA on BOF2.Bof2PlateImage.CAMERA = BOF2.CAMERA.URN where rownum<1000000')) As BOF INNER JOIN GenieVRMs 
ON BOF.VRM=GenieVRMs.VRM 
) as CopyDatabase

结果再次表明创建复制数据库需要两个月的时间。

我相信这是由于图像(ImageBlob)。有什么办法可以在数据传输时压缩图像吗?

1 个答案:

答案 0 :(得分:0)

您需要尝试使用BULK操作

INSERT ... SELECT * FROM OPENROWSET(BULK...)

请参阅https://msdn.microsoft.com/en-us/library/ms175915.aspx

使用OPENROWSET批量行集提供程序(SQL Server)批量导入大对象数据: https://msdn.microsoft.com/en-us/library/ms176001.aspx

但我会按照步骤

  1. 将除了BLOBS之外的所有数据从oracle导出到CSV文件
    另外为每个图像生成唯一ID
  2. 使用BULK插入工具将文件导入MSSQL https://msdn.microsoft.com/en-us/library/ms175937.aspx
  3. BLOB数据 - 使用第一步生成的唯一ID作为文件名导出为驱动器作为图像文件
  4. 单独将文件导入数据库(或者!取决于项目的逻辑,可能很容易将它们分别保存在图像存储中,但在数据库中只保留文件链接)