由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 问一个SQL LOADER BLOB的问题
相关主题
Help need on writing data to Oracle CLOB!How to send BLOB images to remote database?
long and CLOB.. any differences?SQL*Loader的一个问题
Oracle / DB2 问题How to use Sql*loader in Oracle?
Oracle long数据类型 行转列的问题question about SQL*LOADER
Re: How to change Default SQL String Buffer Size(1K) for ODBC DriverLooking help on ORACLE SQL Loader
what is the size limitation of Oracle JDBC Statement?TXT 转 Oracle DBA
[转载] what's wrong with this PL/SQL请问怎么用sql实现hash
MySQL怎么远程地set Text或Blob column?请教2个sql query 问题
相关话题的讨论汇总
话题: blob话题: bigblob话题: loader话题: sql话题: ascii
进入Database版参与讨论
1 (共1页)
o**y
发帖数: 1466
1
我在做一个项目,要求在1个小时的窗口内,把整个数据库全部更新一次(头的要求很奇怪
,要full,不能incremental).现在的瓶颈在一个BLOB的字段上,这个字段存放一个Object
Type,object不大,BLOB的长度在100-10000之间,但有2 million rows.整个BLOB全部加
起来也不大,只有200MB左右.
我在网上找的例子用SQL LOADER 做LOB,全部是文本CLOB的例子,看不到BLOB的例子,
BLOB的例子也有,但是都是从不同的文件载入的,比如说一条记录对应一个外部文件. 这
对我来说不现实,在本地盘上装2M个文件会慢得要死.我现在的办法是把BLOB变成BASE64
,到了ORACLE里面再把BASE64 decode成BLOB,这样可以把数据搞上去,但是这个数据内解
码耽误时间,速度达不到要求,很慢.
我希望的方法是把所有记录的BLOB内容放在一个文件里,然后用LOBFILE constant指定
一个文件名,所有的记录都在这个文件里找内容,现在的问题是我不知道怎么样把各条记
录的BLOB在一个文件里分割.ORACLE DOC上说可以用fixed length,不够长的前面补空添
齐,这样速度比较快,这个办法我没有试,因为每条记录的BLOB长度变化很大,95%都在
1000以内,只有少数在1000以上.
所以现在我有两个问题:
1. 怎么样在文件里分割记录.如果用特殊字符分割,不知道是不是可以象CLOB那样用一
个特殊的HEX STRING分割.
2.即使分割好了,怎么样把ASCII与BINARY放在同一个文件里? ASCII是ID.
我看到CLOB的例子里可以给每条记录一个长度,比如这样的:
1,100CLOBTEXT......
2,205CLOTTEXT...........
这个1,2是ID, 100, 205是表示长度,SQL LOADER看到100就读100的长度,看到205就读
205长度.这个办法好象可行,但是我还是不知道怎么样把ASCII与BLOB BINARY放到同一
个文件里.
如果SQL LOADER这个办法不行的话,我想用其他程序直接操作数据库载入这些BLOB数据
,但这样的办法速度可能会比较慢.
这个表里另外还有一个OBJECT TYPE字段,但这个字段比较好处理,我是这样做的:
CTRL FILE: fieldname object (attribut1, attribute2.....),各个ATTRIBUTE都可
以用ASCII码,然后对应的把各条记录的各个attribut的值一一分割排好,只需要3分钟
就可以全部搞上去.现在碰到问题的这个OBJECT TYPE字段,其中一个ATTRIBUTE是BLOB
,没有办法写成ASCII,而且这个BLOB我不知道是怎么产生的(用的是第三方的程序,没
有源码),所以只能一股脑全搬上去没法象前面那个一样把各个ATTRIBUTE一一分割.
求各位大牛出手!谢谢了.
o**y
发帖数: 1466
2
Today I had a little progress in this problem. Here is my temporary solution:
1. In the client side, save all of the objects' BLOB bytes to one BIGBLOB
file, and have records like that in another separate file:
obj1, length 20, offset 1
obj2, length 500, offset 21
.....
then sql*loader 1) the records; 2) the BIGBLOB file to the server. The
content of BIGBLOB file is saved into another table (single row, BLOB field)
2. In the server side, then split the BIGBLOB into small chunks based on the
offset and the length value.
The upload speed is very fast (takes less than 1 minute, two file together
120 MB), but now a new problem is come out, how can I save the small chunk
into database in a fast way?
Here are a pseudo code:
declare
cursor c is select sth, id, offset, length from stb;
bigBlob, chunk blob;
begin
select Blob into bigBlob from tbl_bigBlob where sth = sth;
for r in c loop
dbms_lob.createtemporary(chunk, true);
dbms_lob.copy(chunk, bigBlob, r.Len, 0+1, r.offset+1);
--so far so good

update mybiztable set OBJ = chunk where current of c;
--but if the above line is added, the whole processing takes very long
time
end loop;
end;
Any good idea to speed up to update the BLOB value to the business table?
Thanks.
1 (共1页)
进入Database版参与讨论
相关主题
请教2个sql query 问题Re: How to change Default SQL String Buffer Size(1K) for ODBC Driver
有没有TSQL和 PL/SQl 或者Teradata sql都熟悉的高手, 麻烦看一下what is the size limitation of Oracle JDBC Statement?
parameterized queries with no inputs[转载] what's wrong with this PL/SQL
怎样从WEB上执行调用DTS TASK?MySQL怎么远程地set Text或Blob column?
Help need on writing data to Oracle CLOB!How to send BLOB images to remote database?
long and CLOB.. any differences?SQL*Loader的一个问题
Oracle / DB2 问题How to use Sql*loader in Oracle?
Oracle long数据类型 行转列的问题question about SQL*LOADER
相关话题的讨论汇总
话题: blob话题: bigblob话题: loader话题: sql话题: ascii