dmfldr(DM Fast Loader)是 DM 提供的快速数据装载命令行工具。用户通过使用dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。
dmfldr在安装目录的bin下
格式
dmfldr keyword=value [keyword=value…]
例如
dmfldr userid=SYSDBA/SYSDBA CONTROL=’C:\fldr.ctl’
其中USERID和CONTROL是启动dmfldr的必要参数,USERID必须是第一个参数,CONTROL必须是第二个参数。
参看参数
dmfldr.exe help
USERID
用户名/密码[@主库地址[:端口号][#安全证书存放路径@安全证书密码]]
Control
控制文件路径,字符串类型
dmfldr格式
例如
options
(
Skip = 0 初始忽略逻辑行数(0)
Rows = 50000 提交频次(50000)
DIRECT = TRUE 是否使用快速装载(TRUE)
INDEX_OPTION = 2 索引选项(1),2不刷新二级索引,数据装载完成后重建所有二级索引
)
LOAD DATA
INFILE ‘D:\dmdbms\data\test.txt’ 装载的路径
Into table TEST.test 向表TEST增加数据
FIELEDS ‘|’结束符
(
C1 TERMINATED BY ‘ ’,第一列和第二列空格为分隔符
C2 TERMINATED BY ‘ ’,
C3 date format ‘yyyy-mm-dd’日期格式为yyyy-mm-dd
)
在控制文件中指定数据文件
可以在控制文件的LOAD节点中指定数据文件
建表
CREATE TABLE TEST.TEST(C1 INT,C2 INT,C3 DATE);
编辑数据文件test.txt
编辑控制文件test.ctl
使用dmfldr进行数据载入
dmfldr.exe userid=SYSDBA/SYSDBA@192.168.42.96:5236 control=’ D:\dmdbms\data\test.ctl’
使用DATA参数指定数据文件
数据文件路径的优先选择顺序为先控制文件,后参数选项。
建表
CREATE TABLE TEST.TEST(C1 INT,C2 INT,C3 DATE);
编辑数据文件test.txt
编辑控制文件test.ctl
使用dmfldr进行数据载入
dmfldr.exe userid=SYSDBA/SYSDBA control=’ D:\dmdbms\data\test1.ctl’ data=’ D:\dmdbms\data\test.txt’
数据转换与错误数据文件
txt文本里有一行错误数据
dmfldr数据载入
dmfldr.exe userid=SYSDBA/SYSDBA control=’ D:\dmdbms\data\test1.ctl’ data=’ D:\dmdbms\data\test.txt’ badfile=’D:\dmdbms\data\test.bad’
test.bad内容
服务器端错误数据处理
dmfldr 客户端将载入的数据进行数据转换和编码转换后,将转换正确的数据发往 DM服务器的 dmfldr 模块,也就是 dmfldr 的服务器端,由其进行真正的数据载入工作。
dmfldr 客户端每次向服务器端发送一批数据,在服务器端插入数据的过程中,由于目的表上可能存在约束等原因,导致某些数据无法插入成功,此时服务器端会将这一批数据全部回滚,并将这批数据全部记为错误数据,但服务器端插入时的错误数据并不会记录到BADFILE 中。
ERRORS 所统计的错误包含在数据转换和数据插入过程中所产生的数据错误,因此当服务器端插入数据记录的错误数据数加上客户端数据转换时的错误数据数超过 ERRORS 参数的指定值时,dmfldr 服务器会停止插入数据。
大字段数据处理
dmfldr支持对DM数据库的大字段类型数据的载入和导出,大字段类型有TEXT、LONGVARCHAR、IMAGE、LONGVARBINARY、BLOB、以及CLOB
大字段数据的导出
建表
CREATE TABLE TEST.TEST(C1 INT,C2 TEXT,C3 LONGVARCHAR);
插入数据
insert into TEST.TEST values(1,‘dmfldr 使用的数据文件都是文本格式的,其中的列值都是以字符串的方式保存在数据文件中。要想将这些数据载入数据库表中,需要将字符串转换成数据库表各列对应的数据类型。dmfldr 支持所有 DM 数据库支持的列定义类型,包括字符串、数值、时间日期、时间日期间隔、大字段类型等。’,‘abcdefghhhh’);
INSERT INTO TEST.TEST VALUES(2,‘模式对象:表;视图;索引;触发器;序列;同义词;外部链接等对象的基本操作。’,‘abcdefg’);
commit;insert into TEST.TEST values(1,0XAB121032DE,‘abcdefg’);
INSERT INTO TEST.TEST VALUES(2,0XAB121032DE,‘abcdefg’);
commit;
编辑控制文件
使用 dmfldr 进行导出数据
dmfldr.exe userid=SYSDBA/SYSDBA@localhost:5236 control=‘D:\dmdbms\data\test1.ctl’ LOB_DIRECTORY=’ D:\dmdbms\data’ mode=‘out’ character_code=’UTF8’
DIRECT 为 TRUE 时大字段数据的载入
当 MODE 为 IN 且 DIRECT 为 TRUE 时,此时数据载入若涉及到大字段对象,需要用户 指定大字段数据文件。若 CLIENT_LOB 为 TRUE,LOB_DIRECTORY 应指定大字段数据文 件所在的客户端本地目录;若 CLIENT_LOB 为FALSE,用户必须先把相关文件传送到 DM 服务器所在主库,然后使用LOB_DIRECTORY 指明存放目录
大字段数据文件在数据文件中指定,可以是任意格式的文件。在数据文件中,大字段以 “文件名:起始偏移:长度”的形式记录在数据文件中。指定的文件名无效时,dmfldr 会 报错,装载失败。对于 CLOB 类型字段,当指定的偏移、长度范围内带有不完整字符时, dmfldr 将装载失败。
DIRECT 为 FALSE 时大字段数据的载入
当 MODE 为 IN 且 DIRECT 为 FALSE 时,数据文件中大字段列数据即字段内容。 BLOB_TYPE 参数指定 BLOB 列内容为十六进制或者字符串:
BLOB_TYPE 为 HEX_CHAR 时,数据文件中 BLOB 列当作为十六进制内容;
BLOB_TYPE 为 HEX 时,数据文件中 BLOB 列为字符串形式内容,导入后会转换 为十六进制。
BLOB_TYPE 参数只对 DIRECT 为 FALSE 时有效,默认为 HEX_CHAR。
日志文件及日志信息
dmfldr 的日志文件路径由 LOG 参数设置,默认日志文件名为 fldr.log。文件记录了装载过程中的装载信息和错误信息以及统计信息。用户也可以通过设置控制文件中的 OPTIONS 选项来指定日志路径。如果参数及 OPTION 中同时指定了日志路径则其将以 OPTION 中指定的路径为最终路径。
dmfldr.exe userid=SYSDBA/SYSDBA@192.168.42.96:5236 control=’ D:\dmdbms\data\test.ctl’ log=’D:\dmdbms\data\test.log’
自增列装载
当 DIRECT 参数为 FALSE 时,dmfldr 将把从数据文件中读取的自增列值作为目标值 插入数据库表中,用户应当保证每一行的自增列的值符合自增列的规则,否则将造成数据混乱。
当 DIRECT 参数为 TRUE 时,dmfldr 提供了 SET_IDENTITY 参数(默认为 FALSE) 对数据载入时自增列的处理进行设置:
如果指定 SET_IDENTITY 选项值为 TRUE,则 dmfldr 将把从数据文件中读取的 自增列值作为目标值插入数据库表中,用户应当保证每一行的自增列的值符合自增 列的规则,否则将造成数据混乱;
如果 SET_IDENTITY 选项值设置为 FALSE,则 dmfldr 将忽略数据文件中对应 自增列的值,服务器将根据自增列定义和表中已有数据自动生成自增列的值插入每一行的对应列。
–建表TEST,并插入数据
drop table TEST.TEST;
create table TEST.TEST(C1 int identity(1,1),C2 varchar);
insert into TEST.TEST(C2) values(‘AAA’);
insert into TEST.TEST(C2) values(‘BBB’);
commit;
编辑test.txt
编辑test.ctl
dmfldr装载
dmfldr.exe userid=SYSDBA/SYSDBA control=‘D:\dmdbms\data\test.ctrl’ direct=true set_identity=false
表 TEST 中已有两行数据,由于 SET_IDENTITY 置为 FALSE,因此 在数据载入时 dmfldr 根据 C1 列的定义和表中已有数据,为 C1 列重新插入合适的值。
当set_identity=true时
dmfldr.exe userid=SYSDBA/SYSDBA control=‘D:\dmdbms\data\test.ctrl’ direct=true set_identity=true
数据排序
SORTED 参数用来设置数据是否已经按照聚集索引排序,默认为 FALSE。
如果设置为 TRUE,则用户必须保证数据已按照聚集索引排序完成,并且如果表中存在 数据,需要插入的数据索引值要比表中数据的索引值大,服务器在做插入操作时顺序进行插 入。若数据并未按照索引排序,则 dmfldr 会报错,装载失败。
如果设置为 FALSE,则服务器对于每条记录进行定位插入。
建表
DROP TABLE TEST.TEST;
CREATE TABLE TEST.TEST(C1 INT CLUSTER PRIMARY KEY,C2 VARCHAR);
编辑test.txt
编辑test.ctl
dmfldr装载
dmfldr.exe userid=SYSDBA/SYSDBA control=‘D:\dmdbms\data\test.ctrl’ sorted=true
空值处理
dmfldr 通过设置 NULL_MODE 参数来处理空值。
设置为 TRUE,载入时 NULL 字符串处理为 NULL,载出时空值处理为 NULL 字符串
设置为 FALSE,载入时 NULL 字符串处理为字符串,载出时空值处理为空串
Text.txt
编辑test.ctl
Dmfldr装载
dmfldr.exe userid=SYSDBA/SYSDBA control=‘D:\dmdbms\data\test.ctrl’ null_mode=true
dmfldr.exe userid=SYSDBA/SYSDBA control=‘D:\dmdbms\data\test.ctrl’ null_mode=false