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.