db2库表导出及表数据导出导入del与ixf格式
db2导出当前库所有表结构
db2look -d <db2schame> -e -o all.sql
db2导出指定表signinfo结构
db2look -d <db2schame> -e -x -t signinfo -o signinfo.sql
导出库所有表数据
db2move <db2schame> export
导入库所有表数据
db2move <db2schame> import -io replace
生产上会由于权限问题,无法使用效率更高度load方式,只能使用import方式
一般导入导出:
db2 "export to /home/xxxx.del of del select * from tablename" db2 "import from /home/xxxx.del of del insert into tablename"
db2 "export to /home/xxxx.IXF of IXF select * from tablename" db2 "import from /home/xxxx.IXF of IXF insert into tablename"
del与ixf区别
del格式是一个文本文件,文件按行来存储,含有回车的文本内容在del文件中会另起一行,del文件可视。
ixf格式保存的是结构和数据,是一个二进制文件,ixf文件不可视。
千万级的数据,import耗时约50分钟,但加上compound=100 ,效率提高约十倍
- 使用 compound 选项,如在 MODIFIED BY 语句后使用 compound=n,以便将插入语句中的 n 行记录作为一组一起导入。
- 对比逐行记录插入的方式,compound方式会在每n条记录而不是每条记录插入后等待返回的SQL执行结果,这种方式减少了网络的通信量。
- compound的范围为 1 - 100。
db2 "import from /home/xxxx.IXF of ixf modified by compound=100 insert into tablename"
commitcount,在导入的过程中你可以100条或1000条左右数据就自动提交一次,看数据量大小。一般控制在3万条以下提交一次适宜
db2 "import from /home/xxxx.IXF of ixf modified by compound=100 commitcount 10000 insert into tablename"
- 实操,86000条数据,不用 compound=100 commitcount 10000,执行完成花费10秒,用了后,为4秒。
import在日志空间不足的情况下一般使用load
db2 "load from User.del of del insert into user"<不推荐写法,推荐写法见下>
但是load在违反唯一性约束大量插入重复数据的情况可能造成Pending整张表无法使用,terminate直接解决问题;写法如下:
db2 "load from USER.del of del terminate into user"<推荐写法>
大表数据清空用delete会产生大量的日志效率很低,考虑用load...replace
db2 "load from USER.del of del replace into user"
我是一个小小的搬运工,让米粒变成仓廪