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 和密码登录到远程系统上。