从一个数据表(A)中导出数据"export to 1.txt of del select * from a",大概有20万条数据
然后再导进入B数据表中,B表与A表结构一样,索引一样.
"import from 1.txt of del insert into B"
报错大致是有部分数据非法导入不成功.有几万条数据导不进数据表.
这个问题如何解决呀?
del格式能转换成ixf格式的文件吗
...全文
8999打赏收藏
db2从表中export出的数据无法import
从一个数据表(A)中导出数据"export to 1.txt of del select * from a",大概有20万条数据 然后再导进入B数据表中,B表与A表结构一样,索引一样. "import from 1.txt of del insert into B" 报错大致是有部分数据非法导入不成功.有几万条数据导不进数据表. 这个问题如何解决呀? del格式能转换成ixf格式的文件吗
WSF:工作表方式导入导出,这种格式的文件类型用的比较少。DB2中对不同的数据导入导出方式,支持不同的文件类型,这里个人觉得很有必要注意下的。COMMITCOUNT,保证insert的数据在COMMITCOUNT以后进行一次commit,这对于大数据量的导入文件来说是一个不错的方法, 例:Import from filename of del COMMITCOUNT 50000 insert into tabname;
DB2的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!?
例:Import from filename of del WARNINGCOUNT 10 insert into tabname;
7.禁止发出行警告
MODIFIED BY NOROWWARNINGS
例:Import from filename of del MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;
8.LOB 文件
LOBS FROM :指出LOB的路径
例:Import from filename of del LOBS FROM ‘/home’ MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;
9.对于自增序列(GENERATED ALWAYS)
建议不要对自增序列的表进行import操作,因为import对于自增序列,只有MODIFIED BY IDENTITYIGNORE和MODIFIED BY IDENTITYMISSING的2中操作,这2中操作都会改变自增序列的原值,这样如果导出表和表之间有基于自增序列的关联关系的话,就失去了数据本身的意义,所以建议尽量少用基于import的自增表的操作,那该怎么做?可以用load老代替import,我们下来在load的操作中会讲到!
关于Load
1. 字符串间隔,列间隔,小数点表示
CHARDEL/COLDEL/DECPT
例:LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY CHARDEL(COLDEL= DECPT? INSERT INTO "DB2ADMIN"."ZXTABLES"
2.数据库记录中存在换行符,导致数据无法装入的情况
MODIFIED BY DELPRIORITYCHAR
DB2默认load优先级策略为,record delimiter, character delimiter, column delimiter,这样record delimiter得优先级最高,所以原始文件如果有换行的话load就认为是新的record,如果用户在某些情况下行里面包含了换行符(比如论坛里面的一条帖子,不可能把换行符删掉的),就必须用delprioritychar改变默认的优先级别,确保""之间的数据不管有没有换行符都被认为是同一条记录
例:LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY DELPRIORITYCHAR INSERT INTO DB2ADMIN.ZXTABLES
3.load后表空间暂挂的处理
Copy YES/ NONRECOVERABLE
对于DMS表空间,load默认为copy NO 模式,此模式下,load完成后,表空间会处于暂挂状态,这时候只能查表中的数据,需要对表空间进行一次备份,才可以对表进行update、insert等操作,那么我们可以使用如上2个命令,对于Copy YES,load完成以后会自动进行一次备份操作;NONRECOVERABLE 指出load不可恢复,此命令符不会产生表空间暂挂,也不会自动进行表空间备份,但是他有一个缺点就是,不能恢复,当数据库进行回滚的时候,不能还原,危险等级还是比较高一点,不过个人觉得也NONRECOVERABLE比较实用。
例:LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES NONRECOVERABLE
LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES COPY YES
4. load IXF类型文件到多分区数据库
partitioned db configmode load_only_verify_part part_file_location
然后,load from staff.ixf of ixf replace into t1 partitioned db configmode load_only_verify_part part_file_location xxxx(part_file_location为a.ixf.000所在的目录),当然如果在unix下的话,可以通过ln –s 来做一个连接也行。
5. 对于自增序列(GENERATED ALWAYS)
MODIFIED BY IDENTITYOVERRIDE:此参数可以理解为,采用文件load文件中的自增值做为表自增序列的值,这样就能保证对于自增序列有业务意义,或者关联逻辑(主外键关联)的情况下保证数据的一致,个人对此命令屡试不爽
例: LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY IDENTITYOVERRIDE INSERT INTO DB2ADMIN.ztables;
6. 对于自增序列(GENERATED by default)
GENERATED by default可以直接通过一般的导入方式加载数据,不过有时候会有一点点小问题,自增序列没有进行分配,也就是说,原来表有50条记录,自增序列的下一次分配值为50,当你已经导入了1000条记录进去了,然后发现自增序列的下一次分配值还是为50,这种事不经常发生,但是偶尔会发生一次,比较郁闷的是,当表继续插入数据的时候,下一次分配就会发生冲突,尤其是如果自增建为主键的时候,会违反唯一约束。
解决办法:首先找到这个序列分配的最大值,select max(id) from tablea;
然后用下边这个命令,alter table tablea alter column restart with max(id)+1
SQL3114W Some data following "","" in row "6" and column "1" was not loaded.
SQL3125W The character data in row "6" and column "3" was truncated because
the data is longer than the target database column.
SQL3129W The date, time, or timestamp field containing "" "" in row "6"
and column "8" was padded with blanks.
SQL3119W The field value in row "6" and column "24" cannot be converted to an
INTEGER value. A null was loaded.
SQL3128W The field containing "+0000000000106.77" in row "6" and column "27"
was truncated into a DATE field because the data is longer than the database
column.
这是import时报的错误,有高人指点一下吗,把已经导出的del文件转换成ixf格式?