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



使用 IMPORT和LOAD 时代码页注意事项:
缺省情况下,DB2 IMPORT 和DB2 LOAD实用程序认为输入文件中的数据是用当前系统的代码页编码的。IMPORT 实用程序 CODEPAGE 修饰符提供了一种附加功能。CODEPAGE 修饰符会强制 DB2 首先将数据文件从修饰符的值转换成当前系统代码页,然后再从当前系统代码页转换成数据库代码页,例如:
db2 import from data.939 of asc modified by codepage=939 method L (1 6) insert into tableName
请注意:如果数据文件包含当前系统代码页中不存在的字符,则在 导入或装入到数据库时,会丢失该字符。在代码页转换过程中,当数据扩展时可能会发生截断现象。
可以输入以下命令来找到数据库代码页:
db2 get db cfg  for eos | grep -i "Database code set"
使用 EXPORT 时代码页注意事项:
缺省情况下,DB2 EXPORT 实用程序使用当前系统代码页将数据写入到输出文件中。当将数据从数据库导出到文件时,DB2 会自动将数据从数据库代码页转换成当前系统代码页。如果 EXPORT 命令中有 CODEPAGE 修饰符,则 DB2 将数据从数据库代码页转换成当前系统代码页,然后再从当前系统代码页转换成 CODEPAGE 修饰符所指定的代码页,例如:
db2 export to data.943 of del modified by codepage=943 select * from tableName
数据库移动工具db2move:
在调用 db2move 命令之前,并不需要数据库连接;该工具会为您建立数据库连接。
db2move命令的基本语法如下所示:
db2move <database-name> <action> [<option> <value>]
首先指定数据库名和要执行的操作(export、import 或 load),然后指定一个选项来定义操作的范围。例如,可以将一个操作限制在特定的表(-tn)、表空间(-ts)、表创建者(-tc)或模式名(- sn)范围内。指定表、表空间或表的创建者的一个子集只对 export 操作有效。如果指定多个值,就必须使用逗号将其分隔开;在值列表项之间不允许有空格。可以指定的项最多为 10 个。
另外,也可以指定 -tf 选项,此时要使用一个文件名作为参数,其中列出了要导出的表名;在该文件中,每行只能列出一个完整的表名。
还可以指定以下内容:
-io import-option
指定 DB2 的 import 工具可以运行的一种模式。有效的选项有: CREATE、 INSERT、 INSERT_UPDATE、 REPLACE 和 REPLACE_CREATE。缺省值为 REPLACE_CREATE。
-lo load-option
指定 DB2 的 load 工具可以运行的一种模式。有效的选项有:INSERT 和 REPLACE。缺省值为 INSERT。
-l lobpaths
指定要创建或查找的 LOB 文件的位置。必须指定一个或多个绝对路径名。如果指定了多个绝对路径,就必须使用逗号将其分隔开;值之间不允许有空格。缺省值是当前目录。

-u userid
指定一个用户 ID,该工具可以使用这个用户 ID 登录到远程系统上。
-p password
指定对该用户进行认证的密码;该工具需要使用一个有效的用户 ID 和密码登录到远程系统上。
DB2统计信息和DDL提取工具db2look:
db2look工具提取了 DDL 语句,在其他系统上重建数据库对象时需要使用这些 DDL 语句。在调用 db2look 命令之前,不需要提前建立数据库连接;这个工具会为您建立数据库连接。
db2look命令的基本语法如下所示:
db2look -d <database-name> [<option1> <option2> <option n>]
首先需要指定数据库名,然后指定一个或多个选项来定义提取的的范围,包括:
-e
提取数据库对象的 DDL 语句,例如表、视图、自动摘要表、索引、触发器、序列、主键、引用、检查约束、用户定义函数和过程。
-a
提取用户创建的所有对象的 DDL 语句。例如,如果这个选项与 -e 选项一起指定,那么就要对数据库中的所有对象都进行处理。
-z schema-name
将输出限制为具有指定模式名的对象。
-t table-name
将输出限制在一个或多个(最多 30 个)指定的表中。表名必须使用空格字符分隔开。
-m
生成需要的 UPDATE 语句,对表、列和索引的统计信息进行复制。
-l
为用户定义的表空间、数据库分区组和缓冲池生成 DDL 语句。
-x
生成对数据库对象进行授权或回收权限的 DDL 语句。
-td delimiter
指定 db2look工具使用的分隔符;缺省值为分号(;)。
-o file-name
将输出结果写入一个文件。如果没有指定该选项,就将输出结果写入标准输出设备。
-i userid
指定用户 ID,该工具需要使用它登录到远程系统上。
-w password
指定对该用户进行认证的密码;该工具需要使用一个有效的用户 ID 和密码登录到远程系统上。