DB2数据库:批量导入(Import)导出(Export)加载(Load)

导入和加载都是利用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 格式的文件在导入前不需要存在相应的数据表。

相关推荐
时间售卖铺6 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw6 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
数智园区合作社7 小时前
问数平台怎么把同一个指标锁成一个数
大数据·数据库·人工智能·ai
lbb 小魔仙7 小时前
Windows搭建PaddleOCR+飞书Webhook自动打卡通知机器人:识别、推送与远程触发完整教程
数据库·人工智能·prometheus·时序数据库
captain3768 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02149 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
龙亘川9 小时前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
数据库小组9 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制
zhangjw349 小时前
1-5 PostgreSQL 数据类型全集:基础类型、字符串、数值、时间类型
数据库·postgresql
王中阳Go10 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型