暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 用blob迁移巨大的表

askTom 2017-04-04
521

问题描述

你好,汤姆,

我们从informix迁移到oracle,我们有这个问题:
我们必须卸载有几百万条记录的表,每条记录都有blob,
在一些大小接近2 GB的blob文件中卸载了blob。

170,000 blob都在一个blob文件中。

我们发现只有一种将内容加载到oracle数据库的方法,
每个表记录都有一个blob的文件路径。

这意味着文件系统中数百万个文件。

有没有其他方法可以从卸载文件加载记录,但是blob合并到
blob文件很少?

谢谢你的回答。

你写:
With regards to: "有没有其他方法可以从卸载文件加载记录,但是blob合并到 blob文件很少?" "170,000 blob都在一个blob文件中。" I dont know what you mean by - lots of blobs merged into 1 file?

我知道解释它类似于informix。
我们有informix的大表,300 mil. records,每条记录都有blob。
我使卸载,卸载文件具有字段 “ADR,LENGTH,file”,其中ADR是从blob文件开始的字节数,长度是whitch blob具有的字节数,并且
文件是blob文件名。
Blob文件名由不超过2GB字节的blob文件组成。
当blob文件显示2GB时,informix会创建新的blob文件,依此类推。

我的问题是,如何将此卸载加载到oracle数据库。

我们发现只有在oracle中,卸载文件有字段 “blob文件名” 的记录,但这意味着avery blob在单独的文件中。

请给mi一些有关从informix到oracle迁移工具的知识的链接,whitch专注于使用blob迁移大表。

非常感谢。

专家解答

好的,如果您有以下信息:

ADR、长度、文件

然后,您应该能够循环通过并将blob加载到数据库中,而不必太大惊小怪,例如:

这是我的示例合并的blob文件,以及加载它的加载器。我正在对文件名和长度进行硬编码,但这可以在表格或任何方便的源中

C:\temp>dir sang*
 Volume in drive C is OS
 Volume Serial Number is 9CB0-0212

 Directory of C:\temp

27/11/2016  06:18 PM           214,715 sangam1.jpg
27/11/2016  06:18 PM           133,674 sangam2.jpg
27/11/2016  06:19 PM           257,522 sangam3.jpg
15/01/2017  10:24 AM           475,650 sangam4.jpg
               4 File(s)      1,081,561 bytes
               0 Dir(s)  205,366,693,888 bytes free

C:\temp>cat sangam* > blob.file

C:\temp>dir blob.file
 Volume in drive C is OS
 Volume Serial Number is 9CB0-0212

 Directory of C:\temp

18/04/2017  11:02 AM         1,081,561 blob.file
               1 File(s)      1,081,561 bytes
               0 Dir(s)  205,356,343,296 bytes free
               
SQL> create table blobfiles ( name varchar2(20), b blob );

Table created.

SQL>
SQL> set serverout on
SQL> declare
  2    type file_details is record
  3      ( len number,
  4        name varchar2(30)
  5      );
  6    type file_list is table of file_details index by pls_integer;
  7
  8    f file_list;
  9
 10    source_blob bfile := bfilename('TEMP','blob.file');
 11    each_blob blob;
 12
 13    l_offset_Dest int;
 14    l_offset_src int := 1;
 15  begin
 16    f(1).len := 214715;
 17    f(1).name := 'sangam1.jpg';
 18
 19    f(2).len := 133674;
 20    f(2).name := 'sangam1.jpg';
 21
 22    f(3).len := 257522;
 23    f(3).name := 'sangam1.jpg';
 24
 25    f(4).len := 475650;
 26    f(4).name := 'sangam1.jpg';
 27
 28    -- fake entry for starting point
 29    f(0).len := 0;
 30
 31    dbms_lob.fileopen(source_blob);
 32
 33    for i in 1 .. 4 loop
 34      insert into blobfiles
 35      values ( f(i).name, empty_blob())
 36      returning b into each_blob;
 37
 38      
 39      l_offset_Dest := 1;
 40
 41      dbms_output.put_line(i);
 42      dbms_output.put_line(l_offset_src);
 43      dbms_output.put_line(f(i).len);
 44
 45      dbms_lob.loadblobfromfile
 46        (each_blob,
 47         source_blob,
 48         f(i).len,
 49         l_offset_Dest,
 50         l_offset_src);
 51
 52    end loop;
 53  end;
 54  /
1
1
214715
2
214716
133674
3
348390
257522
4
605912
475650

PL/SQL procedure successfully completed.

SQL>
SQL> select * from blobfiles;

NAME
--------------------
B
-------------------------------------------------------------------------------------------
sangam1.jpg
FFD8FFE000104A46494600010101004800480000FFDB00430001010101010101010101010101010101010101010
0102020101020101010202020202020202020102

sangam1.jpg
FFD8FFE000104A46494600010101004800480000FFDB00430001010101010101010101010101010101010101010
0102020101020101010202020202020202020102

sangam1.jpg
FFD8FFE000104A46494600010101004800480000FFDB00430001010101010101010101010101010101010101010
0102020101020101010202020202020202020102

sangam1.jpg
FFD8FFE000104A46494600010101004800480000FFDB00430001010101010101010101010101010101010101010
0102020101020101010202020202020202020102


4 rows selected.

SQL> select name, dbms_lob.getlength(b) from blobfiles;

NAME                 DBMS_LOB.GETLENGTH(B)
-------------------- ---------------------
sangam1.jpg                         214715
sangam1.jpg                         133674
sangam1.jpg                         257522
sangam1.jpg                         475650

4 rows selected.               




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论