【问题标题】:Copy Database taking too long to create because of BLOB由于 BLOB,复制数据库的创建时间过长
【发布时间】:2015-11-09 12:49:24
【问题描述】:

我正在尝试创建一个副本数据库。请看下面的查询:

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)。我可以做些什么来压缩数据传输的图像?

【问题讨论】:

  • 如果图像是 jpg 格式,将很难压缩它们。您需要将所有图像导出到外部文件,导出表格,复制图像并单独导入它们
  • @are,谢谢。我没有试过这个。怎么会更快?

标签: sql sql-server oracle tsql ssis


【解决方案1】:

你需要尝试使用 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. 使用批量插入工具将文件导入 MSSQL https://msdn.microsoft.com/en-us/library/ms175937.aspx
  3. BLOB 数据 - 以图像文件的形式导出到驱动器,使用在第一步生成的唯一 ID 作为文件名
  4. 将文件单独导入数据库(或者!取决于项目的逻辑,也许将它们单独保存在图像存储中很容易,但在数据库中只保留文件的链接)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 2021-08-07
    • 2022-06-15
    • 2023-02-21
    • 2020-04-08
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多