DB2 Load数据装入
- 格式:docx
- 大小:176.46 KB
- 文档页数:5
DB2 Load数据装入
1.引言
这段时间一直在忙一个基于DB2的项目,其中一部分工作涉及到DB2数据的导入。
我们知道oracle提供了sqlloader程序完成大数据量的快速导入,DB2是和oracle最相似的数据库,所以DB2也提供了数据导入的实用程序,而且还是两个,分别是import和load,因为import的实质还是要执行sql语句完成数据的导入,所以速度相对较慢。
Load是直接将格式化的页写入数据库,对于大数据量的导入,load程序更快。
但是load实用程序不会触发触发器。
并且load时除了验证索引唯一性约束之外,不执行其他的约束检查,这样会对数据库的数据完整性造成一些影响。
如果能保证数据来源可靠的话,load是个不错的选择。
接下来就简单说一下load实用程序的使用。
2.概述
Load 的过程分为四个阶段:装入,构建,删除,索引复制。
如下图:
Load有四种装入方式,分别是:
REPLACE:这种方式下会删除目标表数据,用并用输入数据填充该表。
INSERT:目标表原有数据不做修改,将输入数据追加到目标表之后。
TERMINATE:装载失败后,可以通过该方式回滚失败的装入操作。
RESTART:已终端的装入操作将继续(我没有试过这种方式)。
Load可以装入的数据格式包括IXF——也就是DB2 export程序推荐的那种数据格式,是二进制的。
这种数据导入也最方便;DEL——就是分界符的ASCILL文件,DB2默认的是用逗号(,)作为字段列的分隔符,用双引号(“)作为记录行的分隔符;ASC——非定界符的ASCII文件,load时需要指定列的起止位置;CURSOR——游标,我没用过。
3.语法及参数介绍
Load程序的语法参数还是相当复杂的,现在虽然在用这个程序了,但是有些参数还是没搞明白。
在这里我拣着主要的&&我明白的参数介绍一下。
基本上能够满足一般的装入操作要求。
因为语法实在是很繁琐,我不得不贴一张官方的大图出来了。
部分参数介绍:
FROM
设定装入数据的来源,如果是数据源来自于多个文件,则文件之间可以用逗号分开。
如:Db2 Load from “E:\tmp\test_file_001.dat”,”E:\tmp\test_file_002.dat”……
OF filetype
指定数据文件的类型,也就是前面提到过的四种类型,IXF,DEL,ASC,CURSOR.
Modify by file-type-mode
指定文件类型修饰符。
支持的文件类型修饰符相当多,这里只列举一部分我测试过的。
METHOD
L 指定要装入文件的列的起止位置,用于非定界的ASC文件。
从1开始计数,起止位置的数字间通过空格分隔,字段间通过逗号分隔。
例如
METHOD L (1 3,4 9,10 15)
N 这个参数好像是只应用于IXF或者CURSOR类型的数据文件,我没有试过。
P 指定装入文件的列的编号,可以通过这个调整转入数据文件的对应关系。
例如METHOD P (1,3,4,2)
ROWCOUNT n
指定要装入的数据文件的物理记录行数。
允许用户只装入前面n行。
WARNINGCOUNT n
指定装入操作过程中允许的警告次数,超过该次数后装入操作失败。
如果不设置或者设置为0那么无论有多少条记录告警,装入操作都将继续。
TEMPFILES PATH temp-filespath
指定装入过程中用到的临时路径,指的是服务器端的路径。
装入方式
INSERT\REPLACE\TERMINATE\RESTART
INTO tabname
指定要装入到的数据库表。
Insert_column
指定数据要插入到的列名,列名之间用逗号分隔。
FOR EXCEPTION table-name
指定要讲加载错误行复制到异常表名,该异常表是指加载目标数据库中的表。
ALLOW NO ACCESS
Load程序在装载过程中锁定目标表,是目标表处于“正在装载”状态,ALLOW NO ACCESS 是默认行为,对于REPLACE加载的load命令,allow no access是唯一有效的选项。
ALLOW READ ACCESS
目标表在装载过程中仍然被置为“正在装载”状态,不过装载之前的数据仍然可以访问,进行read操作。
4.命令举例
接下来就列举几个例子。
4.1加载定界的ascill文件,也就是分隔符的数据文件
db2 LOAD FROM "E:\ data\src_001.dat","E:\data\src_002.dat" OF DEL MODIFIED BY dateformat=\"YYYY-MM-DD\" timestampformat=\"YYYYMMDDHHMMSS\"
CHARDEL0x0D0A coldel# dumpfile="E:\error\data.bad" METHOD P (1, 2, 3,4,5) ROWCOUNT 400 MESSAGES "E:\message\message.log" TEMPFILES PATH "E:\tmp"
REPLACE INTO TEST_TAB (ID, NAME, ADDRESS,BIRTHDAY,createtime) NONRECOVERABLE INDEXING MODE AUTOSELECT SET INTEGRITY PENDING CASCADE IMMEDIATE
涉及到的具体参数可以参考文档中的说明。
4.2加载非定界的ascill文件
db2 LOAD FROM "E:\data\src_001.dat" OF ASC MODIFIED BY dateformat=\"YYYY-MM-DD\" timestampformat=\"YYYYMMDDHHMMSS\" striptblanks dumpfile="E:\data\data.bad" METHOD L (1 5,6 10,11 20,21 35,36 50) ROWCOUNT 400 MESSAGES "E:\message\message.log" TEMPFILES PATH "E:\tmp" REPLACE INTO TEST_TAB (ID, NAME, ADDRESS,BIRTHDAY,createtime) NONRECOVERABLE INDEXING MODE AUTOSELECT
注:定长的文件加载时需要指定每个列的起止位置,之间用空格分隔,列之间用逗号分隔。
因为load程序的参数很多,不能一一描述,不过以上这些对于常用的操作有这些基本也就够用了。