Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

在db2中传输数据

Posted on 2009-03-25 13:31 Prayer 阅读(567) 评论(0)  编辑 收藏 引用 所属分类: DB2
DB2:数据的传输
Db2提供了如下几个工具用来传输数据:
        Export:Export可以将一个select语句所选择的数据输出到指定格式的文件;
        Import:与Export相反,Import工具从文件读取数据,并利用Insert语句将数据插入到表格之中。值得注意的一点是,执行Import指令的过程中,平常单独支持Insert语句所触发的限制检查和触发器同样也会工作;
        Load:与Import类似,Load工具同样用来加载数据,只是它不使用Insert语句,它直接加载数据页,所以它的数度更快。在Load过程中,表格上定义的各种限制和触发器将暂时实效,Load数据之后,要使用SET INTEGRITY指令检查刚刚加载的数据
        db2move:此工具用来批量移动多个表格;

Export,Import和Load可以使用一下4种格式的数据文件:
        DEL或者ASC:这两种格式均为文本格式,只包含数据,不包含表结构的定义;
        IXF:这种格式的文件同时包含数据和表结构的定义,索引和主键,但是不包含外键,限制和触发器等;
        WSF:这种格式的文件用来与Lotus 1-2-3等电子表格交换数据;

Export:
        执行Export需要SYSADM,SYSCTRL,或者SYSMAINT的权利,或者是对输出的表格或者视图有CONTROL的权限;
        使用Export的例子如下:
        EXPORT TO staff.del OF DEL MESSAGE export.msg
SELECT * FROM Vicky.staff
        EXPORT TO Vicky.ixf OF IXF
METHOD N ( name, dept, salary ) MESSAGE export.msg
SELECT name, dept, salary
FROM Vicky.staff
WHERE salary >= 20000
Import:
        执行Import指令可以使用下列几种模式:
        INSERT:目标表格必须已经存在,现有表格的数据页不会受到影响;
        INSERT_UPDATE目标表格必须存在,而且定义有主键。如果新输入的数据与现有数据的主键相等,则更新,否则插入;
        REPLACE:目标表格必须存在,所有现存的数据将被删除;
        CREATE(仅适于IXF文件):目标表格不存在,Import指令会利用IXF文件种的信息建立表格与索引,并插入数据;
        REPLACE_CREATE(仅适于IXF文件):如果目标表格存在,现存数据被删除,被新数据所取代;如果目标表格不存在,则同CREATE模式;
Import指令根据不同的数据文件格式,需要使用METHOD选项指定数据列字段以及起位置;
        METHOD L:对于ASC格式的文件,必须指定每个字段的起始与结束位置;例如:
IMPORT FROM myfile.asc OF ASC METHOD L ( 1 10, 12 15 )
INSERT INTO vicky.staff
        METHOD N:对于IXF文件,指定字段的名称;例如:
IMPORT FROM myfile.ixf OF IXF METHOD N ( c1, c2, c3 )
INSERT INTO vicky.staff ( c1, c2, c3 )
        METHOD P:对于DEL和IXF文件,指定字段的号码;例如:
IMPORT FROM datafile1.del OF DEL METHOD P ( 1, 3, 4)
REPLACE INTO vicky.staff ( c1, c3, c4)
Import使用INSERT语句插入数据,该操作受事务日志所保护,可以在Import语句中使用commitcount选项指定每个事务的插入记录数,如:
        IMPORT FROM order_item.ixf OF IXF COMMITCOUNT 1000
MESSAGE import.msg INSERT INTO vicky.order_item

还可以使用RESTARTCOUNT指定从第几笔数据开始导入,如从10001笔开始导入:
        IMPORT FROM order_item.ixf of IXF RESTARTCOUNT 10000
MESSAGE import.msg INSERT INTO vicky.order_item

Load:
Load工具不单可以从文件加载数据,还可以从Pipe中或者是磁带机等外设中加载数据;使用Load时要注意如下几点:
        Load数据之前,表格必须存在;
        Load数据前先建立索引;
        Load过程不受事务日志保护,可以指定COPY YES选项使Load结束自动进行备份;
        Load数据后需要用SET INTEGRITY语句将不合乎限制的数据放入例外表格;
        Load过程中触发器不起作用;
        Load只有在REPLACE模式下才可以自动收集统计信息,此时STATISTICS YES为默认选项;
        Load使用sqllib/tmp为默认临时空间,可以使用TEMPFILE PATH指定其他目录;
        在SMP环境中Load可以指定使用多个CPU;
        加载过程中可以使用QUERY指令查看加载进度,如:
LOAD QUERY TABLE vicky.staff
使用Load的例子如下:
        LOAD FROM tools.ixf OF IXF MESSAGE load.msg
INSERT INTO vicky.tools
FOR EXCEPTION vicky.badtools
        LOAD FROM tools.ixf OF IXF MESSAGE load.msg
REPLACE INTO vicky.tools
STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL
COPY YES TO /opt/backup
Load建立索引时可以指定如下几种模式(INDEXING MODE):
        REBUILD:对表格中的所有数据重建索引结构;
        INCREMENTAL:将加载数据的索引列加入原有的索引结构中;
        AUTOSELECT:由Load自动选择采用REBUILD或者INCREMENTAL;
        DEFERRED:延迟建立索引结构(至于什么时候建立索引取决与INDEXREC参数;
SET INTEGRITY的例子:
        SET INTIGRITY FOR vicky.tools, vicky.staff
IMMEDIATE CHECKED
FOR EXCEPTION IN vicky.tools USE vicky.badtools,
IN  vicky.staff USE vicky.badstaff
        SET INTEGRITYCONSTRAINTS FOR vicky.staff ALL IMMEDIATE UNCHECKED

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理