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

导入和加载都是利用DB2的相关命令把某种格式的文件中的数据保存到数据库中的表中;导出是指把DB2数据库的表中的数据保存到某种格式的文件当中去。

1、DB2 export --导出

export 使用 SQL 从表中读取数据。export将数据所写到的文件可以是几种标准文件格式的一种,它仅支持三种数据文件格式:DEL,WSF,IXF 。一般是IXFDEL

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 格式的文件在导入前不需要存在相应的数据表。

相关推荐
小程故事多_803 分钟前
Agent Skills深度解析,让智能体从“会连接”到“会做事”的核心引擎
数据库·人工智能·aigc
TG:@yunlaoda360 云老大20 分钟前
华为云国际站代理商的DDM主要有什么作用呢?
服务器·数据库·华为云
qianshanxue1128 分钟前
0-3论软件设计模式及其应用、2016-已写(观察者通知,命令-控制指令,适配器-兼容,工厂-多种数据库)
数据库·设计模式
小许学java39 分钟前
Spring事务和事务传播机制
java·数据库·spring·事务
小无名呀41 分钟前
视图(View)
数据库·mysql
lkbhua莱克瓦241 小时前
MySQL介绍
java·开发语言·数据库·笔记·mysql
teacher伟大光荣且正确1 小时前
关于Qt QReadWriteLock(读写锁) 以及 QSettings 使用的问题
java·数据库·qt
钱彬 (Qian Bin)1 小时前
项目实践13—全球证件智能识别系统(内网离线部署大模型并调用)
数据库·postgresql·fastapi·ubuntu24.04·离线部署·qwen3大模型
hgz07101 小时前
索引的原理
数据库
尋有緣2 小时前
力扣614-二级关注者
大数据·数据库·sql·oracle