
导入和加载都是利用DB2的相关命令把某种格式的文件中的数据保存到数据库中的表中;导出是指把DB2数据库的表中的数据保存到某种格式的文件当中去。
1、DB2 export --导出
export 使用 SQL 从表中读取数据。export将数据所写到的文件可以是几种标准文件格式的一种,它仅支持三种数据文件格式:DEL,WSF,IXF 。一般是IXF 或DEL
1.export 语法
bash
1、导出某张表的数据
export to ***.del of del select * from db.tabname(表名);
eg:export to ./test.del of del select * from test(将某张表的数据导出到当前目录下,具体导出目录在to 后可以指定)
2、导出某个存储过程数据
export to ***.db2 of del select TEXT from syscat.procedures where PROCNAME='需要导出的存储过程名称';
eg:export to ./XXX.db2 of del select TEXT from syscat.procedures where PROCNAME='test';
3、导出某个函数数据
export to ***.db2 of del select BODY from syscat.functions where FUNCNAME='需要导出的函数名称';
eg:export to ./test.db2 of del select BODY from syscat.functions where FUNCNAME='test';
4、大数据量导出
export to /test/***.del of del lobs to /test/ select * from db.tabname(表名);
(注:BLOB类型:其中第三个字段是BLOB类型,在该文件export to后路径只保存了一个标志,相当于一个指针,真正的LOB数据保存在lobs to后的文件目录下的001.lobs、002.lobs、......等一系列文件中。
命令中lobs to 后面指定大对象数据保存在什么路径下(注意,该路径必须事先已经存在,否则会报错)
6、导出类型为ixf文件数据
export to ***.ixf of ixf lobs to select * from db.tabname;
eg:export to /test/test.ixf of ixf lobs to /test/ select * from test;
7、批量导出
eg:导出3张表数据(导出存储过程同理)
步骤1:将N张表数据语句写好,然后保存在一个以***.sql结尾的文件里面
export to ***1.del of del select * from db.tabname1;
export to ***2.del of del select * from db.tabname2;
export to ***3.del of del select * from db.tabname3;
步骤2:将这个文件传到服务器,执行命令:db2 -tvf ***.sql |tee ***.sql.out(注:|tee 是输出日志文件,也可直接db2 -tvf ***.sql)
8、批量执行存储过程
eg:执行3个存储过程
步骤1:将N个存储过程语句写好,然后保存在一个以***.sh结尾的文件里面
db2 -td@ -vf ./procedures1 |tee procedures1.out
db2 -td@ -vf ./procedures2 |tee procedures2.out
db2 -td@ -vf ./procedures3 |tee procedures3.out
步骤2:将这个文件传到服务器,执行命令:.sh结尾文件,可以用./***.sh 或 sh ***.sh 命令执行(注:|tee 是输出日志文件)
9、批量导出表和批量执行存储过程,
eg:直接将***.sql文件和***.sh文件放在一个sh文件里面,传到服务器上,用./***.sh 或 sh ***.sh 命令执行
db2 -tvf ***1.sql |tee ***1.sql.out
db2 -tvf ***2.sql |tee ***2.sql.out
db2 -tvf ***3.sql |tee ***3.sql.out
db2 -td@ -vf ./procedures1 |tee procedures1.out
db2 -td@ -vf ./procedures2 |tee procedures2.out
2、DB2 import --导入
主要的 DB2 导入模式有:
bash
1、INSERT into:将输入数据添加到表中,并且不更改任何现有数据。
import from XXX.del of del insert into tablename
eg:import from ./***.del of del insert into db.tabname
2、INSERT_UPDATE into:将新的输入数据添加到表中,或者用具有匹配主键值的输入数据更新现有的行。
import from ***.del of del INSERT_UPDATE into db.tabname
3、REPLACE into: (通过删除数据对象)删除表中的所有现有数据,然后再插入输入数据
import from ***.del of del REPLACE into db.tabname
4、REPLACE_CREATE into :删除现有表中的所有数据,然后再插入输入数据。如果该表不存在,该模式将优先于插入输入数据而创建表。
该模式只对 PC/IXF 输入文件有效
3、DB2 load --加载
load 工具非常高效地将一个或多个输入文件中的数据写到数据库表中。load 工具也从指定的管道、设备(比如磁带设备)或用户定义游标接受输入。load 工具与 import 工具不一样,不是使用 SQL 将数据写到目标表中;它是直接将格式化的页写到表中,因此比 import 工具要快得多。load 工具从中读取数据的文件可以是几种标准文件格式中的一种,一般是 PC/IXF、DEL 或 ASC。
bash
1、load insert into
load from /home/user/test/data/***.del of del modified by insert into db.tabname nonrecoverable;
该命令将指定路径下的 .del 文件数据导入到 db.tabname 表中,nonrecoverable 是必须添加的参数
2、load replace into
load from /home/user/test/data/***.del of del modified by delprioritychar replace into db.tabname nonrecoverable;
此命令同样是将指定路径的 .del 文件数据导入到db.tabname 表,delprioritychar 可能用于处理优先级字符,replace 表示替换表中原有数据
4、扩展知识:用于DB2数据的文件格式有四种
1、ASC(ASCII):ASC------非定界ASCII文件,是一个ASCII字符流。数据流中的行由行定界符分隔,而行中的每一列则通过起始和结束位置来定义。
2、DEL(Delimited ASCII):DEL------定界ASCII文件,也是一个ASCII字符流。数据流中的行由行定界符分隔,行中的列值由列定界符分隔。文件类型修饰符可用于修改这些定界符的默认值。
3、WSF( Work sheet format):WSF------(work sheet format)为工作表格式,用于与Lotus系列的软件进行数据交换。
4、PC/IXF( Integrated Exchange Format):PC/IXF------是集成交换格式(Integration Exchange Format,IXF)数据交换体系结构的改编版本,由一些列可变长度的记录构成,包括头记录、表记录、表中每列的列描述符记录以及表中每行的一条或多条数据记录。PC/IXF文件记录由包含了字符数据的字段组成。
ASC 和 DEL 格式的文件是文本文件,可以用任何文本编辑器打开。
WSF 格式的文件可以将数据迁移到电子表格软件中,例如 Excel,Lotus® 1-2-3。
IXF 格式文件包括了数据表的数据描述语言(DDL)和里面的数据。使用 IXF 格式是非常方便的,利用它可以重建数据表,而其他格式则没有办法这么做.
当数据导出到文件后,使用 Import 可以将数据由文件导入到数据表中。如果使用 ASC,DEL 和WSF 格式的文件作为中间文件,在它们导入之前数据表必须存在。而使用 IXF 格式的文件在导入前不需要存在相应的数据表。