SinoDB数据库导入导出工具DBLOAD

  DBLOAD是SinoDB数据库导入一。它拥有容错机制,可以用来重复导入数据,保持已有数据不变,只增加新增记录。DBLOAD 可以指定分批提交计录数,从而能有效处理大量数据的导入。它还会将导入失败的数据记录到指定文件中,帮助用户快速定位到有问题的数据。

1. DBLOAD命令语法

使用DBLOAD导入数据的完整命令语法如下:

dbload [-d db_name] [-c cmd_file] [-l log_file] [-e errors] [-n num_rows]
[-i i_skip] [-s] [-p] [-r | -k] [-X]

参数 说明
-d 指定要加载数据的数据库名称
-c 命令文件名称
-l 指定日志文件,其中记录不能正确加载的数据
-e 导入失败多少记录后退出
-n 指定多少条记录执行一次提交
-i 从文件第几行开始,默认为第一行记录,可用于跳过数据中的标题部分
-s 指定只做语法检查,不进行实际的数据加载
-p 失败情况:提交或放弃
-r 加载数据时,不对表加排他锁
-k 加载数据时,对表加排他锁
-X 识别16进制数据

命令文件的语法为:

file ‘file_name’ delimiter ‘delimiter_string’ nfields
insert into table_name [(col1,col2,…) values (f01,f02,…)]

file_name    指定要导入的文件名称,可以为绝对路径和相对路径。
delimiter_string  数据文件使用的列分隔符。
nfields      数据文件中,每行的列数。
table_name   要导入的表的名称。
col1,col2…   表的列名称,多个列用逗号分隔。
f01,f02…    数据文件中的列数据编号,从01开始编号,多个编号用逗号分隔。

2. DBLOAD使用演示

示例1:使用dbload一次导入多个表数据:

[informix@vm84145 data]$ cat dept_employee.ctl 
file '/home/informix/data/dept.unl' delimiter ',' 2;
insert into t_dept_00;
file '/home/informix/data/unload_03.unl' delimiter '.' 4;
insert into t_employee_00;

[informix@vm84145 data]$ dbload -d testdb -c dept_employee.ctl -l dbload.log
DBLOAD Load Utility           INFORMIX-SQL Version 12.10.FC8
Table t_dept_00 had 3 row(s) loaded into it.
Table t_employee_00 had 5 row(s) loaded into it.

[informix@vm84145 data]$ dbaccess testdb -

Database selected.

> select * from t_dept_00;
   f_deptid f_deptname           
          1 Dev                 
          2 Test                
          3 Market              
3 row(s) retrieved.

> select * from t_employee_00;
f_employeeid    f_deptid f_employeename       f_birthdate 
           1           1 Bill                 01.06.1983
           2           1 John                 25.12.1985
           3           2 Mary                 10.10.1987
           4           3 Kate                 11.11.1989
           5           1 Will Smith           28.02.1981
5 row(s) retrieved.

示例2:使用dbload导入数据文件与表定义格式不一致的数据:

[informix@vm84145 data]$ cat employee.ctl 

file '/home/informix/data/unload_02.unl' delimiter '|' 5;
insert into t_employee_02(f_employeeid, f_employeename, f_deptid, f_birthdate) values(f01, f02, f03, f05);

"employee.ctl" 3L, 166C written
[informix@vm84145 data]$ dbload -d testdb -c employee.ctl -l dbload.log
DBLOAD Load Utility           INFORMIX-SQL Version 12.10.FC8
Table t_employee_02 had 5 row(s) loaded into it.

[informix@vm84145 data]$ echo "select * from t_employee_02;" |dbaccess testdb -
Database selected.

f_employeeid    f_deptid f_employeename       f_birthdate 

           1           1 Bill                 1983-06-01
           2           1 John                 1985-12-25
           3           2 Mary                 1987-10-10
           4           3 Kate                 1989-11-11
           5           1 Will Smith           1981-02-28

5 row(s) retrieved.