免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7419 | 回复: 5
打印 上一主题 下一主题

求教:关于db2 export,impot导BLOB字段数据问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-04 10:42 |只看该作者 |倒序浏览
问题简述:
将数据库A中一张带有Blob字段的表a的数据用export命令导出,使用export命令将数据导入数据库B中的具有同样结构的表b中。export显示62954行全部成功导入,import显示62954行读入,62954行导入,0行被reject。实际上通过java方法访问,发现除了前5000左右blob字段是正确导入以外,后面其他行的blob数据实际上要么全是填充为十六制的'00',要么就是原来表a的第一行blob的数据重复填充。我尝试了各种方法没有解决,问下大家,谁做过同样的事,看下有什么我做错的地方?
下面给出步骤

论坛徽章:
0
2 [报告]
发表于 2005-01-04 10:53 |只看该作者

求教:关于db2 export,impot导BLOB字段数据问题

1 表定义(使用Blob字段存放人员的照片)
使用db2look -d photo  -e -tn  ykt_cur.t_cif_photo

-- This CLP file was created using DB2LOOK Version 8.1
-- Timestamp: Tue Jan 04 10:27:19 2005
-- Database Name: PHOTO
-- Database Manager Version: 8.1
-- Database Codepage: utf8
-- Database Collating Sequence is: BINARY


CONNECT TO PHOTO;




------------------------------------------------
-- DDL Statements for table "YKT_CUR "."T_CIF_PHOTO"
------------------------------------------------

CREATE TABLE "YKT_CUR "."T_CIF_PHOTO"  (
                  "CUT_TYPE" VARCHAR(50) NOT NULL ,
                  "STUEMP_NO" VARCHAR(20) NOT NULL ,
                  "STUEMP_NAME" VARCHAR(60) ,
                  "DEPT_NAME" VARCHAR(100) ,
                  "S_CODE" VARCHAR(100) ,
                  "HOTO_NO" INTEGER ,
                  "FILENAME" VARCHAR(100) ,
                  "HOTO" BLOB(52428 NOT LOGGED COMPACT ,
                  "IS_CREATECARD" INTEGER ,
                  "HOTO_DATE" VARCHAR(10) ,
                  "HOTO_TIME" VARCHAR( )
                 IN "USERSPACE1" ;
COMMENT ON TABLE "YKT_CUR "."T_CIF_PHOTO" IS '照片表';

COMMENT ON COLUMN "YKT_CUR "."T_CIF_PHOTO"."CUT_TYPE" IS '人员类型';

COMMENT ON COLUMN "YKT_CUR "."T_CIF_PHOTO"."DEPT_NAME" IS '部门名';

COMMENT ON COLUMN "YKT_CUR "."T_CIF_PHOTO"."FILENAME" IS '照片文件名';

COMMENT ON COLUMN "YKT_CUR "."T_CIF_PHOTO"."HOTO_NO" IS '照片编号';

COMMENT ON COLUMN "YKT_CUR "."T_CIF_PHOTO"."STUEMP_NAME" IS '人员名';

COMMENT ON COLUMN "YKT_CUR "."T_CIF_PHOTO"."STUEMP_NO" IS '人员ID';

COMMENT ON COLUMN "YKT_CUR "."T_CIF_PHOTO"."S_CODE" IS '';

-- DDL Statements for primary key on Table "YKT_CUR "."T_CIF_PHOTO"

ALTER TABLE "YKT_CUR "."T_CIF_PHOTO"
        ADD CONSTRAINT "_KEY_1" PRIMARY KEY
                ("CUT_TYPE",
                 "STUEMP_NO";
出现问题的是字段"HOTO" BLOB(52428 NOT LOGGED COMPACT

论坛徽章:
0
3 [报告]
发表于 2005-01-04 10:55 |只看该作者

求教:关于db2 export,impot导BLOB字段数据问题

2 导出数据的export命令
db2 "export to photo050104.del of del lobs to /db2/db2inst3/photo lobfile lob1 MODIFIED BY lobsinfile messages photo.msg select * from ykt_cur.t_cif_photo"

more photo.msg
SQL3104N  The Export utility is beginning to export data to file
"photo050104.del".
SQL3105N  The Export utility has finished exporting "62954" rows.

论坛徽章:
0
4 [报告]
发表于 2005-01-04 11:19 |只看该作者

求教:关于db2 export,impot导BLOB字段数据问题

3 i导入数据的import命令
db2 "import from photo050104.del of del lobs from /db2/db2inst3/photo modified by lobsinfile commitcount 100 messages import.msg insert into ykt_cur.t_cif_photo"

论坛徽章:
0
5 [报告]
发表于 2005-01-04 11:51 |只看该作者

求教:关于db2 export,impot导BLOB字段数据问题

4初步判断是一次移动60000多行数据发生的问题。
1)通过db2 "export to photo050104.del of del lobs to /db2/db2inst3/photo lobfile lob1 MODIFIED BY lobsinfile messages photo.msg select * from ykt_cur.t_cif_photo where stuemp_no like '04%'" 只导出40行数据,然后导入没有问题
2) 将数据全部导出后,清空原来的表a,全部导入,仍然发现同样问题。
可以判断不是数据库或者表的问题
3) 为了判断导出的数据是否存在不可识别的问题,我分析了photo050104.del 中的lob字段photo的定义。
ls -l
-rw-r-----   1 db2inst3 db2iadm3 9497558998 Jan  4 09:57 lob1.001
-rw-r-----   1 db2inst3 db2iadm3     153 Jan  4 09:57 photo.msg
-rw-r-----   1 db2inst3 db2iadm3 5767562 Jan  4 09:57 photo050104.del
tail -10 photo050104.del

"***","04802***","辛","100533","n006",,"***\***\04802***.jpg","lob1.001.9497009982.258332/",,,
         文件名   /小文件开始位置/小文件偏移量(长度)
  先写了文件分割程序,把9G的lob1.001分割后,发现所有的jpg文件都是正确显示的,因此导出的lob1.001内容没有问题,是不是9G大了一点。但是solaris下支持大于2G的文件,而且我如果在win2000下用客户端同样也不行,文件系统是nfs的。所以现在我只能通过java程序往新数据库update图片
4 )我导出的时候使用了 lobfile lob1,lob2,lob3,。。,lob10,发现还是直接生成了一个9G的lob1.001,没有分为10个小文件。看来lobfile参数不能强制将导出文件分为10个
5 ) 试图通过import 参数commitcount 100,同时加大数据库日志文件的大小 ,一次导入100次提交,发现不行,仍然5000行后一样
通过restartcount 50000,直接读50000行开始,发现还是不行。从读文件时间上,发现import还是整个9G文件读了一遍。

论坛徽章:
0
6 [报告]
发表于 2005-01-04 12:11 |只看该作者

求教:关于db2 export,impot导BLOB字段数据问题

6)尝试过load命令,发现5000前正常,5000行后出现2个错误
,英文大概意思是
1试图插入的数据长度大于目标第8列定义长度,不过我就算改大目标表从512k到2m还是没解决这个问题
2del文件lob定义的文件找不到l,估计就是lob1.001.9497009982.258332/,
这个很奇怪,就算数据导出措的,那应该还是找到错误的数据呀,而且已经证明数据是可以通过文件分割工具完整的切割出来的(db2 的lob导出文件看来是直接把所有的data通过2进制流的格式导出来的),也证明del定义的文件开始头,偏移都是正确的


7)各位同行应该有人倒过几万行的lob数据吧。我通过笨方法导了数据。不过db2 export,import应该能够解决blob大量数据的迁移,可能我那儿不对,请大家帮下忙,做成功的给个方法。Re一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP