导入导出

  del:
         界定的ascii 格式,行分隔符和列分隔符将数据分开。
     10,"Head Office",160,"Corporate","New York"
    15,"New England",50,"Eastern","Boston"
    20,"Mid Atlantic",10,"Eastern","Washington"
    38,"South Atlantic",30,"Eastern","Atlanta"
    42,"Great Lakes",100,"Midwest","Chicago"
    51,"Plains",140,"Midwest","Dallas"
    66,"Pacific",270,"Western","San Francisco"
    84,"Mountain",290,"Western","Denver"

  asc: 
         定长的ascii 格式,行按照行分割符分开,列定长。
   10   Head Office     160   Corporate   New York
   15   New England  50     Eastern       Boston
   20   Mid Atlantic     10     Eastern       Washington
   38   South Atlantic 30     Eastern       Atlanta
   42   Great Lakes    100   Midwest      Chicago
   51   Plains              140   Midwest      Dallas
   66   Pacific              270   Western     San Francisco
   84   Mountain         290   Western     Denver

  pc/ixf:
           Integration Exchange Format 集成交换格式
         只能用来在db2之间导数据,根据类型数字值被打包成十进制或者二进制,
           字符被保存为ascii,只保存变量已经使用了的长度,文件中包括表的定义
           和表的数据,
         
  wsf: 
          工作表方式导入导出,这种格式的文件类型用的比较少.
          work sheet format  与Lotus这中系列软件进行交换。



 

  export:
           导出数据,支持IXF,DEL,wsf
  import:
           导入数据,可以向表中导入数据,支持上面提到的4中文件类型。
  load  :
             导入数据,功能和import相同,支持以上说的几种文件类型。


 
  export 的注意事项:
      1.关于不同字符集的导出:
         MODIFIED BY CODEPAGE=
        Exprot to filename.del for del MODIFIED BY  CODEPAGE=1386
        select * from ....where  ....

       这里,在数据从数据库倒出来的时候就会做一个数据库代码页的转换。
   import
    1.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后提交一次。
      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是个不错的选择。
      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

    6.有警告数据的条数限制
     warnningcount:导入时若出现警告的条数超过了warnningcount则停止import

    7.对于自增序列(GENERATED ALWAYS
     建议不要对自增序列的表进行impor操作。因为import对于自增序列,
     只有MODIFIED BY  IDENTITYIGNORE和MODIFIED BY IDENTITYMISSING两个
     选项。这两中操作都会改变自增序列的原值,这样如果导出表和表之间有基于
     自增序列的关联关系的话,就失去了数据本身的意义,所以建议尽量少用基于
     import的导入,用load代替import .
      
   

关于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  默认的导入优先级是:record delimiter,character delimiter,
        column delimiter这样column delimiter的优先级最高。所以原始文件
         如果有换行的话load就认为是新的record。如果用户在某些情况下行里面
         包含了换行符(比如论坛里面的一条帖子,不可能把换行符删掉的),就必须用
         delprioritychar改变优先级。确保“”之间的数据不管有没有换行符
         都被认为是同一条记录。
   LOAD CLIENT  FROM 'F:s1.del' OF DEL MODIFIED
   BY DELPRIORITYCHAR  INSERT INTO DB2ADMIN.ZXTABLES。
  3.load后表空间暂挂处理:
    Copy YES/ NONRECOVERABLEITPUB;f f]AA3L
    对应dms表空间,load默认为copy no 模式,此模式下,load完成后,表空间会
     处于暂挂状态,这时候只能查表中的数据,需要对表空间进行一次备份才可以对表进行
     update,insert 等操作,那么我们可以使用如上两个命令,对于copy yes load
    完成后自动进行一次备份,NONRECOVERABLE指定load不可恢复,此命令符不会产生表
    空间暂挂,也不会自动进行表空间备份,但是他有一个缺点就是不能恢复,当数据库进行
    回滚的时候,不能还原,危险等级还是比较高一点,不过个人觉得也norecoverrable
   比较实用一点。
    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 YESITPUB


  4.load ixf类型文件到多分区数据库
     partitioned db configmode load_only_verify_part part_file_location
    当数据在2个不同数量节点的数据库之间移动,如果还想使用load来进行ixf数据的装入
     是比较棘手的。
    首先,把ixf文件复制和分区数量相同的文件,并后缀.000分区号。
    比如,2个分区,那么我需要把原来的a.ixf拷贝两个,并命名为a.ixf.000和
          a.ixf.001 然后load  from staff.ixf of ixf replace into t1   
    partitioned db configmode load_only_verify_part 
    part_file_loaction xxxx(part_file_location为a.ixf.ooo所在目录)
    当然如果在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。

7.ROWCOUNT/WARNINGCOUNT 通import

8.terminate , restart
   如果load出现故障,比如强制force ,这时连接查询表数据会报错SQL0668N原因码3
   用terminate解决
   LOAD CLIENT FROM 'F:s1.del' OF DEL terminate INTO DB2ADMIN.ztables

9.set integrity  命令
   如果表上有约束,那么给表load数据以后,一般连接表的时候都会报错SQL0668N 原因码
   1这说明该表处于“设置完整性暂挂无访问”状态,那么需要如下命令来操作
  set integrity for schema.tablename immediate checked.

10.提高导入导出的速度。
  CONFIGURATION:应用程序堆大小,该参数指示可由backup,resto,reload及装入恢复
  应用程序同事使用的最大内存量,看帖子上有介绍,这个值可以设置为10000*cpu数量
db2_all "DB2 UPDATE DATABASE CONFIGURATION USING UTIL_HEAP_SZ 113486"

你可能感兴趣的:(数据结构,db2,F#,Office,Lotus)