设为首页 收藏本站
查看: 826|回复: 0

[经验分享] DB2文件导入导出常见命令总结

[复制链接]

尚未签到

发表于 2016-11-16 01:59:13 | 显示全部楼层 |阅读模式
2011-4-25        来源:华军资讯整理                          
  Db2 的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!J
    当然在这以前,我觉得有必要提及一点关于导入导出基础的知识!
    DEL:界定的ASCII文件,行分隔符和列分隔符将数据分开。
    ASC:定长的ASCII文件,行按照行分割符分开,列定长。
    PC/IXF:只能用来在db2之间导数据,根据类型数字值被打包成十进制或者二进制,字符被保存为ASCII,只保存变量已经使用了的长度,文件中包括表的定义和表的数据。
    WSF:工作表方式导入导出,这种格式的文件类型用的比较少。
    Db2中对不同的数据导入导出方式,支持不同的文件类型,这里个人觉得很有必要注意的。
    文件类型 Import export load
    -------------------------------------------------------
    定界 支持 支持 支持
    非定界 支持 不支持 支持
    Ixf 支持 支持 支持
    Wsf工作表 支持 支持 不支持
    关于3种导入导出操作进行简单的介绍:
    export:导出数据,支持IXF,DEL或WSF
    import:导入数据,可以向表中导入数据,支持上面提到的4种文件类型。
    load:导入数据,功能和import基本相同。支持以上说的几种文件类型。
    关于Export
    这个其实比较简单,没啥好说的,一般命令:export to filename of filetype select x from xx where ;就ok了,这里需要注意的是:
    1. 关于不同字符集的导出
    MODIFIED BY CODEPAGE=
    Exprot to filename.del for del MODIFIED BY CODEPAGE=1386 select … from …where …;
    这里,在数据从数据库倒出来的时候就会做一个数据库代码页的转换
    2.时间字段格式化的
    MODIFIED BY TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt"
    例:Exprot to filename.del for del MODIFIED BY TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt" select … from …where …;
    关于Import
    1.Import模式的介绍
    CREATE/INSERT/INSERT_UPDATE/REPLACE/REPLACE_CREATE
    CREATE :首先创建目标表和它的索引,然后将数据导入到新表中。该选项惟一支持的文件格式是 PC/IXF。还可以指定新表所在表空间的名称
    INSERT :将导入的数据插入表中。目标表必须已经存在。
    INSERT_UPDATE :将数据插入表中,或者更新表中具有匹配主键的行。目标表必须已经存在,并且定义了一个主键。
    REPLACE :删除所有已有的数据,并将导入的数据插入到一个已有的目标表中。
    REPLACE_CREATE :如果目标表已经存在,则导入实用程序删除已有的数据,并插入新的数据,就像 REPLACE 选项那样。如果目标表还没有定义,那么首先创建这个表以及它的相关索引,然后再导入数据。正如您可能想像的那样,输入文件必须是 PC/IXF 格式的文件,因为那种格式包含对导出表的结构化描述。如果目标表是被一个外键引用的一个父表,那么就不能使用 REPLACE_CREATE。
    2. 批量提交
    COMMITCOUNT,保证insert的数据在COMMITCOUNT以后进行一次commit,这对于大数据量的导入文件来说是一个不错的方法,
    例:Import from filename of del COMMITCOUNT 50000 insert into tabname;
  3. 批量插入
    MODIFIED BY COMPOUND把文件中的 COMPOUND 行记录作为一组一起导入,这个操作可以和上边的批量提交一起使用,比较理想。
    例:Import from filename of del MODIFIED BY COMPOUND =50 insert into tabname;
    4. 导入记录限制
    ROWCOUNT:只导入rowcount 条数据,有时候,业务逻辑需要只导入部分数据,那么ROWCOUNT是一个不错的选择,只是在我的测试中ROWCOUNT一直没有起过作用,呵呵,谁熟悉这里,帮我完善下。
    例:Import from filename of del ROWCOUNT 10000 insert into tabname;
    5. 导入起点
    RESTARTCOUNT:从导入文件的第RESTARTCOUNT条记录开始导入
    例:Import from filename of del RESTARTCOUNT 55 ROWCOUNT 10000 insert into tabname;--从55条开始,导入10000条数据
    6. 有警告数据的条数限制
    WARNINGCOUNT:当导入的数据中,有警告或错误(例如类型不匹配,列不对应等造成的)并且条数超过WARNINGCOUNT是就会停止import。
    例: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
    当数据在2个不同数量节点的数据库之间移动,如果还想使用load来进行IXF的数据装载就比较棘手了,当时查遍IBM的官方文档均无所获,正郁郁不安时,狼出现了,给支了一招,现分享给大家。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-300748-1-1.html 上篇帖子: db2查找执行次数最多的sql 下篇帖子: db2删除数据库SQL1035N 数据库当前正在使用。 SQLSTATE=57019
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表