如何在加载大量数据行时避免长事务
我们要往一个数据表customer里加载30万个数据行,如何在加载数据行时避免长事务?
我们可以采取以下两种方式之一:
(1)使用 raw table
例如:
alter table customer type (raw);
load from '/opt/IDS115New/bank/customer.unl' delimiter '|' insert into customer;
alter table customer type (standard); //执行完这条SQL语句后最好进行一次备份
(2)使用 dbload 命令 (dbload是一个Utility,不是SQL语句)
dbload命令的语法如下:
dbload -d -c -l -n
-e
其中:
是数据库的名字
是命令文件的名字
是用于记录“发生错误的数据行”的文件
用于定义多少个数据行commit一次,这样可以避免长事务
用于定义dbload遇到多少个错误的数据行后不再继续运行
dbload示例:
dbload -d db1 -c customer.cmd -l customer.log -n 100 -e 10
customer.cmd是一个命令文件,该文件的内容是:
FILE customer.unl DELIMITER '|' 3;
insert into customer;
customer.cmd文件第一行里的customer.unl是一个文件。customer.unl文件里存着要加载的数据。
customer.cmd文件第一行末尾的3表示一个数据行(row)有3个域(field),我们可以根据具体情况修改这个数字。
dbload的具体细节请参看《IBM Informix Migration Guide》的第九章“The dbload Utility”。