首先贴一个db2官网的语法图:
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0808khatri/sidefile1.html
.-,--------------.
V |
>>-LOAD--+--------+--FROM----+-filename---+-+--OF--filetype----->
'-CLIENT-' +-pipename---+
+-device-----+
'-cursorname-'
>--+-------------------------+--+------------------------+------>
| .-,--------. | | .-,--------. |
| V | | | V | |
'-LOBS FROM----lob-path-+-' '-XML FROM----xml-path-+-'
>--+--------------------------------+--------------------------->
| .---------------. |
| V | |
'-MODIFIED BY----file-type-mod-+-'
>--+-------------------------------------------------------------------------------+-->
| .-,------------------------. |
| V | |
'-METHOD--+-L--(----column-start--column-end-+--)--+-------------------------------+-+-'
| | .-,-------------------. | |
| | V | | |
| '-NULL INDICATORS--(----null-indicator-list-+--)-'|
| .-,-----------. |
| V | |
+-N--(----column-name-+--)----------------------------------------------------------+
| .-,---------------. |
| V | |
'-P--(----column-position-+--)------------------------------------------------------'
>--+------------------------------------+----------------------->
'-XMLPARSE--+-STRIP----+--WHITESPACE-'
'-PRESERVE-'
>--+--------------------------------------------------------------------------+-->
'-XMLVALIDATE USING--+-XDS--+-----------------------+--| Ignore and Map parameters |-+-'
| '-DEFAULT--schema-sqlid-' |
+-SCHEMA--schema-sqlid------------------------------------------+
'-SCHEMALOCATION HINTS------------------------------------------'
>--+--------------+--+-------------+--+-----------------+------->
'-SAVECOUNT--n-' '-ROWCOUNT--n-' '-WARNINGCOUNT--n-'
>--+------------------------+----------------------------------->
'-MESSAGES--message-file-'
>--+-------------------------------+---------------------------->
'-TEMPFILES PATH--temp-pathname-'
>--+-INSERT-----------------------+----------------------------->
| .-KEEPDICTIONARY--. |
+-REPLACE--+-----------------+-+
| '-RESETDICTIONARY-' |
+-RESTART----------------------+
'-TERMINATE--------------------'
>--INTO--table-name--+-------------------------+---------------->
| .-,-------------. |
| V | |
'-(----insert-column-+--)-'
>--+----------------------------------------------------------+-->
| .-,-------------------------. |
| V (1) (2) | |
'-FOR EXCEPTION--table-name--------------+-------------+-+-'
+-NORANGEEXC--+
'-NOUNIQUEEXC-'
>--+-----------------------------+------------------------------>
'-STATISTICS--+-USE PROFILE-+-'
'-NO----------'
>--+-----------------------------------------------------------------+-->
| .-NO----------------------------------------------------. |
+-COPY--+-YES--+-USE TSM--+--------------------------+--------+-+-+
| | '-OPEN--num-sess--SESSIONS-' | |
| | .-,----------------. | |
| | V | | |
| +-TO----device/directory-+---------------------+ |
| '-LOAD--lib-name--+--------------------------+-' |
| '-OPEN--num-sess--SESSIONS-' |
'-NONRECOVERABLE--------------------------------------------------'
>--+-------------------+--+--------------------------+---------->
'-WITHOUT PROMPTING-' '-DATA BUFFER--buffer-size-'
>--+--------------------------+--+--------------------+--------->
'-SORT BUFFER--buffer-size-' '-CPU_PARALLELISM--n-'
>--+---------------------+--+----------------------------+------>
'-DISK_PARALLELISM--n-' | .-YES-. |
'-FETCH_PARALLELISM--+-NO--+-'
>--+--------------------------------+--------------------------->
'-INDEXING MODE--+-AUTOSELECT--+-'
+-REBUILD-----+
+-INCREMENTAL-+
'-DEFERRED----'
.-ALLOW NO ACCESS-----------------------------.
>--+---------------------------------------------+-------------->
'-ALLOW READ ACCESS--+----------------------+-'
'-USE--tablespace-name-'
>--+----------------------------------------------+------------->
'-SET INTEGRITY PENDING CASCADE--+-IMMEDIATE-+-'
'-DEFERRED--'
>--+-----------------+------------------------------------------>
'-LOCK WITH FORCE-'
>--+----------------------------------------------------------------------------+-->
'-SOURCEUSEREXIT--executable--| Redirect Input/Output parameters |--+-------------+-'
'-PARALLELIZE-'
>--+------------------------------------------------------+----><
| .-----------------------. |
| .-PARTITIONED DB CONFIG-. V | |
'-+-----------------------+----partitioned-db-option-+-'
Ignore and Map parameters
|--+--------------------------------+--------------------------->
| .-,------------. |
| V | |
'-IGNORE--(----schema-sqlid-+--)-'
>--+----------------------------------------------------+-------|
| .-,-----------------------------------. |
| V | |
'-MAP--(----(--schema-sqlid--,--schema-sqlid--)-+--)-'
Redirect Input/Output parameters
|--+---------------------------------------------------------------------------------+--|
'-REDIRECT--+-INPUT FROM--+-BUFFER--input-buffer-+--+-----------------------------+-+-'
| '-FILE--input-file-----' '-OUTPUT TO FILE--output-file-' |
'-OUTPUT TO FILE--output-file-------------------------------------------'
这个语法图先保存起来,有空再慢慢研究,目前暂时把自己能用并且测试过的写出来。
LOAD FROM -----固定关键字
filename -----要装载到数据库的文件名,如果大于1个,可以使用逗号分隔开,如: "/tmp/1.dat", "/tmp/2.dat"
OF -----固定关键字
filetype -----要装载数据文件的类型,大家用到比较多的应该是DEL,一般有4种,IXF,DEL,ASC,CURSOR
ASC 表示不分界的 ASCII 数据,数据的划分由位置决定。DEL 表示分界的 ASCII 数据,每行的数据长度可变。分界的数据可以使用多种修饰符,主要的两种是 COLDEL 和 CHARDEL;COLDEL 决定列和列之间如何分界,CHARDEL 决定字符串数据如何分界
MODIFIED BY -----固定关键字
file-type-mode -----文件类型修饰符,也即为你要加载的数据文件设定格式等等修饰信息。目前用到的有以下几个,
Dateformat="xxxxxxxx" --date型数据的格式,比如dateformat="YYYYMMDD";dateformat="YYYY-MM-DD"等
Timestampformat="xxxxxxxxxxxxxxxx" --时间戳类型的格式,比如:Timestampformat="YYYYMMDDHHMMSS"
Striptblanks/Keepblanks --装载到变长列时的截断标志,默认为不截断,如果指定Striptblanks则截断字符型的尾部空格。这个查了资料号称是可以用的,但是我测试却通不过,报错说“SQL3016N 在文件类型的 filetmod 参数中找到意外的关键字 "Striptblanks"。”不知道是我方法不对还是怎么回事。先放着
CHARDEL --如果是DEL格式,表示字符串数据分界符,默认是双引号。
COLDEL --如果是DEL格式,表示列和列之间的分界符,默认是分号。
DUMPFILE=[dumpfile_name].DB2 把由于各种原因被拒绝的记录放到这个文件中。
METHOD -----固定关键字
P (1,2,3) -----DB2 LOAD 有三个方法来load数据,分别为P、L、N。 METHOD P 用于 DEL、IXF 或游标数据,它要指定源数据中要装载的列的位置号。它的形式是:METHOD P (1, 2, 4…) ,可以通过数字的设置来跳过某些列,调换某些列的位置等等。METHOD L 只用于 ASC 数据,这个方法要指出每列的开头和结尾。它的形式是:METHOD L (start1 end1,start2 end2….)。METHOD N 用于 IXF 或游标数据,它要指定源表中要装载的列。它的形式是:METHOD N (col1, col2, col4…)(这个METHOD N没有使用过,也不太懂,先列在这里)。
ROWCOUNT n -----ROWCOUNT,固定关键字,N 指定要装入的数据文件的物理记录行数。允许用户只装入前面n行.
WARNINGCOUNT n -----装入操作过程中允许的警告次数,超过该次数后装入操作失败。不设置或者设置为0那么无论有多少条记录告警,装入操作都将继续。
TEMPFILES PATH temp-filespath -----指定临时文件的存放位置,没怎么用过,不太懂。
MESSAGES message_path -----指定装载过程的信息文件的存放位置。若不指定,则不存放。此信息文件建议在调试时设定,可以清楚的看到DB2的整体装载信息和警告的具体情况,便于我们调试。当调试完正式使用时再把这个拿掉。
INSERT -----DB2共有4个选项,其中INSERT为插入模式,相当于append(追加模式);而REPLACE 为替换模式,可以理解为clear table then insert;TERMINATE/RESTART,指定当 DB2 LOAD 由于任何原因未完成时,是停掉,还是重新load。
INTO table_name -----装载到目标表的表名称。
(COL1, COL2, COL3) -----Insert Column List,DB2 LOAD 使用这个列表决定要放入数据的列。如果省略这个列列表,那么 DB2 LOAD 会尝试按照读取和解析数据的次序装载数据。
FOR EXCEPTION [table_name] -----DB2 LOAD 把违反约束规则的记录(异常)放到一个你需要指定名称的表中。
ALLOW NO ACCESS / ALLOW READ ACCESS -----加载数据时是否允许访问,这个貌似没有什么必要使用,有的话再研究。
NONRECOVERABLE / COPY YES -----以nonrecoverable模式还是以copy yes模式来load数据,这个没有深入研究,一般来讲用NONRECOVERABLE,貌似用COPY YES的话搞不好还要搞挂表空间,没怎么测试,不太懂。
INDEXING MODE mode -----索引模式,分为4种。(1)REBUILD。将重建所有索引 (2)REBUILD。将重建所有索引 (3) AUTOSELECT。LOAD 实用程序自动决定是-使用 REBUILD 还是 INCREMENTAL 方式。AUTOSELECT 是缺省值。如果正在执行装入替换操作,那么将使用 REBUILD 索引建立方式。否则,根据表中的现有数据量与新近装入的数据量的比率来选择建立索引方式。如果比率非常大,那么选择 INCREMENTAL 建立索引方式。否则,选择 REBUILD 建立索引方式。
SET INTEGRITY PENDING CASCADE IMMEDIATE -----执行装入操作后检查完整性违例模式。如果装入的表带有派生表,那么可以指定 SET INTEGRITY PENDING CASCADE IMMEDIATE 参数以指示是否应该立即将装入的表的设置完整性暂挂状态级联到派生表。没用过,有需要再查。
下边贴3个例子:
LOAD FROM "/tmp/mbr.del" OF DEL REPLACE INTO mbr NONRECOVERABLE;
---这个主要用于清表操作,对于一些大表,删除比较慢,可以自建一个空档案(mbr.del),使用这个语句清掉mbr这个表。
LOAD FROM "D:\t_jgc_cs.txt" OF DEL MODIFIED BY dateformat="YYYY-MM-DD" timestampformat="YYYYMMDDHHMMSS" CHARDEL"" coldel, dumpfile="D:\dump.txt" METHOD P (1,2,3) ROWCOUNT 3000 MESSAGES "D:\message.txt" TEMPFILES PATH "D:\tempfile.txt" REPLACE INTO T_JGC_CS_TEST (CSLX,DXBH,DXMC) NONRECOVERABLE INDEXING MODE AUTOSELECT SET INTEGRITY PENDING CASCADE IMMEDIATE;
----这个主要用于定界文件
LOAD FROM "D:\1.dat" OF ASC MODIFIED BY dateformat="YYYY-MM-DD" timestampformat="YYYYMMDDHHMMSS" dumpfile="D:\dump.txt" METHOD L (1 10,11 20,21 30) ROWCOUNT 3000 MESSAGES "D:\message.txt" TEMPFILES PATH "D:\tempfile.txt" REPLACE INTO T_JGC_CS_TEST (CSLX,DXBH,DXMC) NONRECOVERABLE INDEXING MODE AUTOSELECT SET INTEGRITY PENDING CASCADE IMMEDIATE;
----这个主要用于非定界文件
其他讲述load的相关链接地址:
http://doc.chinaunix.net/db2/200811/207111.shtml ----对于oracle的sqlldr命令和db2的load命令的比较,很详细,很好
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.dm.doc%2Fdoc%2Fc0007939.html ----IBM官方网站的load说明。