天地不仁,以万物为刍狗!

[原创]Db2 文件导入导出常见命令总结

上一篇 / 下一篇  2008-08-11 18:31:17 / 个人分类:db2

Db2 文件导入导出常见命令总结
x+a'Gw5s$a6X;S8c0
f0P%M@2T0Db2 的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!ITPUB个人空间By6g&V4R5g

E.tHC3dsLO1D0当然在这以前,我觉得有必要提及一点关于导入导出基础的知识!ITPUB个人空间*v}q1];Z
DEL:界定的ASCII文件,行分隔符和列分隔符将数据分开。
f7|-xe4y+K!F0ASC:定长的ASCII文件,行按照行分割符分开,列定长。ITPUB个人空间jH*y;BT
PC/IXF:只能用来在db2之间导数据,根据类型数字值被打包成十进制或者二进制,字符被保存为ASCII,只保存变量已经使用了的长度,文件中包括表的定义和表的数据。
XA$w#V`FY)o8O0WSF:工作表方式导入导出,这种格式的文件类型用的比较少。
hb8J:IZ:T0Db2中对不同的数据导入导出方式,支持不同的文件类型,这里个人觉得很有必要注意下的。ITPUB个人空间 Y&C7HSy
文件类型                        Import                        export                        loadITPUB个人空间*u|e4ATI Y A
-------------------------------------------------------
VZVkG U0定界                                支持                                支持                                支持ITPUB个人空间Z2f`)|2qY mt
非定界                        支持                                不支持                        支持ITPUB个人空间mc_@so\`
Ixf                                支持                                支持                                支持ITPUB个人空间,@&`)d b%P{ F
Wsf工作表                支持                                支持                                不支持
O)jf3p"O&c,jz(f0ITPUB个人空间0c&~EE2M?S|$E
关于3种导入导出操作进行简单的介绍:ITPUB个人空间(F9YX^Cv
export:导出数据,支持IXF,DEL或WSFITPUB个人空间6F:S`6i}
import:导入数据,可以向表中导入数据,支持上面提到的4种文件类型。   
@MC:Uc$N^0load:导入数据,功能和import基本相同。支持以上说的几种文件类型。ITPUB个人空间9@J@s#`JQ
ITPUB个人空间 @uCB&x o
关于ExportITPUB个人空间O'`k;F@3OqQ y!{s
ITPUB个人空间)rQ"h0j Y1A_
这个其实比较简单,没啥好说的,一般命令:export to filename of filetype select x from xx where ;就ok了,这里需要注意的是:ITPUB个人空间h!xgan%f ~
1.        关于不同字符集的导出
`&\t n:dsQ0MODIFIED BY CODEPAGE=
b C4S!S w0Exprot to filename.del for del MODIFIED BY   CODEPAGE=1386 select … from …where …;
#p6E6__7CP5^0这里,在数据从数据库倒出来的时候就会做一个数据库代码页的转换
u ZZ2m-DM02.时间字段格式化的
6T;}2ym$b.^ z%]8j0MODIFIED BY  TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt"ITPUB个人空间\?O1g!Bf+o?1Z
例:Exprot to filename.del for del MODIFIED BY  TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt" select … from …where …;
3N S+_YlD-?5_0
,u.K-h2\%bE%O |0关于Import
c)^dVm8Bh0ITPUB个人空间,f{@eK5|
1.Import模式的介绍ITPUB个人空间v(DVy(qx

)~*V(Sd9]0CREATE/INSERT/INSERT_UPDATE/REPLACE/REPLACE_CREATEITPUB个人空间U5o-C q E.?*kn V2~
CREATE :首先创建目标表和它的索引,然后将数据导入到新表中。该选项惟一支持的文件格式是 PC/IXF。还可以指定新表所在表空间的名称ITPUB个人空间,z vE2@i:A
INSERT :将导入的数据插入表中。目标表必须已经存在。ITPUB个人空间y2`d%X4d?^ U v!X
INSERT_UPDATE :将数据插入表中,或者更新表中具有匹配主键的行。目标表必须已经存在,并且定义了一个主键。ITPUB个人空间4^Nm] m$z2enn
REPLACE :删除所有已有的数据,并将导入的数据插入到一个已有的目标表中。ITPUB个人空间MS*HB8qS
REPLACE_CREATE :如果目标表已经存在,则导入实用程序删除已有的数据,并插入新的数据,就像 REPLACE 选项那样。如果目标表还没有定义,那么首先创建这个表以及它的相关索引,然后再导入数据。正如您可能想像的那样,输入文件必须是 PC/IXF 格式的文件,因为那种格式包含对导出表的结构化描述。如果目标表是被一个外键引用的一个父表,那么就不能使用 REPLACE_CREATE。ITPUB个人空间 fKX:kP6s:x$H8c_

`)W(^f?02.        批量提交
%sgq:Wi0ITPUB个人空间y&UYm4k
COMMITCOUNT,保证insert的数据在COMMITCOUNT以后进行一次commit,这对于大数据量的导入文件来说是一个不错的方法,
#ko([Q/_5MWS~3o0例:Import from filename of del COMMITCOUNT 50000 insert into tabname;ITPUB个人空间!Q.Lr#aa%Tod2@YO
ITPUB个人空间pL6IR/c:w~;u
3.        批量插入
#[0X#{gNqC0ITPUB个人空间:{2lA PAP
MODIFIED BY COMPOUND把文件中的 COMPOUND 行记录作为一组一起导入,这个操作可以和上边的批量提交一起使用,比较理想。ITPUB个人空间#pR,QW|"em,CJ@E
例:Import from filename of del MODIFIED BY COMPOUND =50 insert into tabname;ITPUB个人空间i1P8FS,[Z3`

8g6fH/_(w:}&t04.        导入记录限制ITPUB个人空间(J*ZU[9o#p
ITPUB个人空间o+WVPy D
ROWCOUNT:只导入rowcount 条数据,有时候,业务逻辑需要只导入部分数据,那么ROWCOUNT是一个不错的选择,只是在我的测试中ROWCOUNT一直没有起过作用,呵呵,谁熟悉这里,帮我完善下。
&Nub gH@+O0例:Import from filename of del ROWCOUNT 10000 insert into tabname;
g#y"t%`X fFc}0
[X`;|%V(v05.        导入起点ITPUB个人空间+}&b+k^f%f
ITPUB个人空间;X]4V~Pp2m0mr
RESTARTCOUNT:从导入文件的第RESTARTCOUNT条记录开始导入ITPUB个人空间 SU/in*I,o.Y$X
例:Import from filename of del RESTARTCOUNT 55 ROWCOUNT 10000 insert into tabname;--从55条开始,导入10000条数据ITPUB个人空间(Wi)Yd!N c@'HZ
ITPUB个人空间2i5I9R.D7m0f5sV.o8e
6.        有警告数据的条数限制ITPUB个人空间`|rAeb){vE
ITPUB个人空间w+O/I#W7O9?b7k |5S
WARNINGCOUNT:当导入的数据中,有警告或错误(例如类型不匹配,列不对应等造成的)并且条数超过WARNINGCOUNT是就会停止import。ITPUB个人空间7]\*t&Nv'h6ed:v
例:Import from filename of del WARNINGCOUNT 10 insert into tabname;ITPUB个人空间!p WF L_
ITPUB个人空间+dm7v|v"Mt f
7.        禁止发出行警告ITPUB个人空间/C1HyX1JWAre
ITPUB个人空间-qL.w6n:d:{2z9w;Gvx
MODIFIED BY NOROWWARNINGS
6Q~bev0例:Import from filename of del MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;ITPUB个人空间{%aI!n6?
ITPUB个人空间8N)w~2{ dQ5d
8.        LOB 文件ITPUB个人空间a/b2x:f q@6S4H

K }#UG"c8w0LOBS FROM :指出LOB的路径
.W@P'OeL#{*f m'tO0例:Import from filename of del LOBS FROM ‘/home’ MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;ITPUB个人空间 eFf7Z y*g$w6t

@O-i~^3HH-Y6?09.        对于自增序列(GENERATED ALWAYS)ITPUB个人空间.p,Bl6zbr
ITPUB个人空间0mC#c H8w8tT](K
建议不要对自增序列的表进行import操作,因为import对于自增序列,只有MODIFIED BY  IDENTITYIGNORE和MODIFIED BY IDENTITYMISSING的2中操作,这2中操作都会改变自增序列的原值,这样如果导出表和表之间有基于自增序列的关联关系的话,就失去了数据本身的意义,所以建议尽量少用基于import的自增表的操作,那该怎么做?可以用load老代替import,我们下来在load的操作中会讲到!ITPUB个人空间/r8]kL0F}!_0{
ITPUB个人空间5Pv&`)Cj`S
关于Load
N8gs,i `9_OX-p}0ITPUB个人空间%p'S;i.~,JPm1?
1. 字符串间隔,列间隔,小数点表示
F9lZ-RuT;K {n0ITPUB个人空间6L(H0R(Na9z5fS V
CHARDEL/COLDEL/DECPTITPUB个人空间)y:T[$`gW%a8R o
例:LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY CHARDEL(COLDEL=   DECPT?  INSERT INTO "DB2ADMIN"."ZXTABLES"ITPUB个人空间?DNN i gs

XA&~5t,DYK0X3i02.数据库记录中存在换行符,导致数据无法装入的情况ITPUB个人空间c6A'm t;ki:ytSz
ITPUB个人空间-@*S C J O `.xaOH
MODIFIED BY DELPRIORITYCHARITPUB个人空间.W6uU1J7})t8l
Db2默认load优先级策略为,record delimiter, character delimiter, column delimiter,这样record delimiter得优先级最高,所以原始文件如果有换行的话load就认为是新的record,如果用户在某些情况下行里面包含了换行符(比如论坛里面的一条帖子,不可能把换行符删掉的),就必须用delprioritychar改变默认的优先级别,确保""之间的数据不管有没有换行符都被认为是同一条记录
M_*\ ^/rO)QQ0例:LOAD CLIENT  FROM 'F:s1.del' OF DEL MODIFIED BY DELPRIORITYCHAR  INSERT INTO DB2ADMIN.ZXTABLESITPUB个人空间2WG_ ] yi s0a a
ITPUB个人空间h+u;`.lWEY
3.load后表空间暂挂的处理
ZR NfO8CP5d0
%kX B#\^0Copy YES/ NONRECOVERABLEITPUB个人空间n0cz0u3FGyF
对于DMS表空间,load默认为copy NO 模式,此模式下,load完成后,表空间会处于暂挂状态,这时候只能查表中的数据,需要对表空间进行一次备份,才可以对表进行update、insert等操作,那么我们可以使用如上2个命令,对于Copy YES,load完成以后会自动进行一次备份操作;NONRECOVERABLE 指出load不可恢复,此命令符不会产生表空间暂挂,也不会自动进行表空间备份,但是他有一个缺点就是,不能恢复,当数据库进行回滚的时候,不能还原,危险等级还是比较高一点,不过个人觉得也NONRECOVERABLE比较实用。ITPUB个人空间 LP ? c/@1? p'L Ax
ITPUB个人空间 qP\9r&G5]
例:LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES NONRECOVERABLEITPUB个人空间7@zo(qa,}Q!s
LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES COPY YES
}3N QP-P&?T0
:ipF.Sj(Iag04. load IXF类型文件到多分区数据库ITPUB个人空间 c4xm#hX2h
ITPUB个人空间kC:g6A\/|
partitioned db configmode load_only_verify_part part_file_locationITPUB个人空间wD%Zzq4x*T
ITPUB个人空间,[9[9@]2z'Q
当数据在2个不同数量节点的数据库之间移动,如果还想使用load来进行IXF的数据装载就比较棘手了,当时查遍IBM的官方文档均无所获,正郁郁不安时,狼出现了,给支了一招,现分享给大家。ITPUB个人空间Zt*C8jv
首先,把ixf文件复制和分区数量相同的文件,并后缀.000(分区号),
I\+NU:Q0i O0比如,2个分区,那么我需要把原来的a.ixf,拷贝2个,并命名为a.ixf.000以及a.ixf.001ITPUB个人空间 tPAb+[-Fm
然后,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 来做一个连接也行。ITPUB个人空间gI7Rm;obH

;SWT#L#R*O!W05. 对于自增序列(GENERATED ALWAYS)ITPUB个人空间3G^Z6Wy9Hy j5w9b/}@3\
ITPUB个人空间,^m4K(UUr c[7l9R
MODIFIED BY IDENTITYOVERRIDE:此参数可以理解为,采用文件load文件中的自增值做为表自增序列的值,这样就能保证对于自增序列有业务意义,或者关联逻辑(主外键关联)的情况下保证数据的一致,个人对此命令屡试不爽
#^5?2Ii}(\%XM0
H'qrNj-k:o0例:  LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY IDENTITYOVERRIDE INSERT INTO DB2ADMIN.ztables;
I~iKW'xW`0ITPUB个人空间-w;L3nj1a ?`n
6. 对于自增序列(GENERATED by default)ITPUB个人空间'Nx H;@u)a3x!q&M%z6n

)o"i;~`b QrX0GENERATED by default可以直接通过一般的导入方式加载数据,不过有时候会有一点点小问题,自增序列没有进行分配,也就是说,原来表有50条记录,自增序列的下一次分配值为50,当你已经导入了1000条记录进去了,然后发现自增序列的下一次分配值还是为50,这种事不经常发生,但是偶尔会发生一次,比较郁闷的是,当表继续插入数据的时候,下一次分配就会发生冲突,尤其是如果自增建为主键的时候,会违反唯一约束。ITPUB个人空间-dk(SZ)L`/i#`q
解决办法:首先找到这个序列分配的最大值,select max(id) from tablea;ITPUB个人空间2i1S4Ov!FH"U
然后用下边这个命令,alter table tablea alter column restart  with max(id)+1ITPUB个人空间T'y ^Z7o"b
ITPUB个人空间D5s\4|'oS
7.
+dp(f!N8tI'g)Cs5E0ROWCOUNT/WARNINGCOUNTITPUB个人空间1_({+gw6`
  这个同IMPORTITPUB个人空间 aa4]VG |

8f+Z7pPp08.terminate,restartITPUB个人空间l*ob/cF6\ _e
ITPUB个人空间+A-nLNKh!{D M
如果load的过程中出了点故障,比如连接被force掉了等,这时连接查询表数据会报错SQL0668N,原因码3,这时可以通过带有terminate的load命令来进行处理!ITPUB个人空间*?0s4{/yF,GWQr1Y:P#L.~
LOAD CLIENT FROM 'F:s1.del' OF DEL terminate INTO DB2ADMIN.ztables;ITPUB个人空间)Y:@g1s6h:Yte

Fb(s{"b/[09. set integrity 命令ITPUB个人空间XG U t,i O7BG Xe

arC+V(?3l%Dz T_Zg w0如果表上有约束,那么给表load数据以后,一般连接表的时候都会报错,SQL0668N,原因码1,这说明该表处于“设置完整性暂挂无访问”状态,那么需要如下命令来操作。ITPUB个人空间0[7]H};o'q*G

!O*}z7ECV O0Set integrity for schema.tablename immediate checked;
nw$I#Py C*Mb#}0
$j1N(q}![ s#zo010.提高导入导出速度的数据库参数
O!@z:{!n@4k~0
h9?\#G0Q#wk0CONFIGURATION:应用程序堆大小,该参数指示可由Backup,restore,load及装入恢复应用程序同事使用的最大内存量,看帖子上有介绍,这个值可以设置为10000*cpu数量。
0i Y}&KV2U$T1K0db2_all "DB2 UPDATE DATABASE CONFIGURATION USING UTIL_HEAP_SZ 113486"ITPUB个人空间2k Eb,k+i;y @(Y

L!XMV,v?{0
P0n `&A&_3tn\0呵呵,暂时就写这么多了,欢迎大家继续补充。ITPUB个人空间'F/KX;kl*lb_$k

Tc%jFet)[ yo/A0K3O0由于时间比较紧张,在语言组织上有点凌乱,请大家见谅!

TAG:

引用 删除 大力   /   2008-11-19 16:57:41
敬仰之情,如滔滔江水,。。。。
如黄河泛滥。。。
引用 删除 右边的伙计   /   2008-09-24 11:29:26
恩,写的不错,用到了
SAP HOME 引用 删除 lovelyman_gold   /   2008-08-13 16:37:12
不错的 云
oracle_8i 引用 删除 oracle_8i   /   2008-08-12 10:21:10
支持原创!
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-24  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 12228
  • 日志数: 273
  • 图片数: 1
  • 文件数: 2
  • 建立时间: 2007-12-01
  • 更新时间: 2008-11-19

RSS订阅

Open Toolbar