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"
db2 "import from /dev/null of del replace into user"
db2 "TRUNCATE TABLE user IMMEDIATE"
操作 | 作用 | 速度 | 事务日志 | 可回滚 | 释放存储空间 | 适用场景 |
---|
DELETE FROM AA |
按行删除所有数据 | 慢 | 多 | ✅ 可回滚 | ❌ 不释放 | 需要触发 DELETE 触发器 |
TRUNCATE TABLE AA IMMEDIATE |
清空整个表 | 快 | 无 | ❌ 不可回滚 | ✅ 释放 | 只要清空数据,不触发触发器 |
IMPORT FROM /dev/null OF DEL REPLACE INTO AA |
用空数据覆盖 | 快 | 无 | ❌ 不可回滚 | ❌ 不释放 | 适用于 TRUNCATE 不支持的情况 |
我是一个小小的搬运工,让米粒变成仓廪