注册
DM8 快速装载工具测试
专栏/技术分享/ 文章详情 /

DM8 快速装载工具测试

Ma- 2025/06/27 106 0 0
摘要

一 功能概述

DM提供两种快速装载工具形式,功能完全一致,但应用场景不同:

  • dmfldr​:单一工具,集成客户端与数据库服务器模块,在单机上独立完成装载任务,适用于软硬件资源充裕的场景。
  • ​dmldrc与dmldrp​:分部署工具套装(dmldrc为轻量客户端,dmldrp为轻量服务器),需部署在两台机器上协同工作,通过分担资源压力解决硬件匮乏问题,适用于资源受限的极端场景。

1.1 dmfldr结构

  • ​客户端​:负责初始化环境、读取/打包数据、发送至服务器,并处理日志与错误文件。
  • ​服务器模块​:嵌入数据库服务器,执行实际装载操作,解析并打包数据(载出时),返回处理消息给客户端。
    载入​:客户端分析控制文件与数据→打包发送至服务器模块→模块完成装载→客户端处理反馈。
    载出​:客户端发送载出请求→服务器模块打包数据→返回客户端→客户端写入文件。
    image.png

1.2 dmldrc 和 dmldrp 结构

dmldrc 为轻量级快速装载工具的客户端,负责初始化快速装载环境和数据处理功能;
dmldrp 为轻量级快速装载工具的服务器,负责任务处理和任务发送功能
dmldrp 和 dmldrc 只支持快速载入功能,不支持快速载出功能。
image.png

二 dmfldr测试

2.1 dmfldr 控制文件

控制文件是启动 dmfldr 的必需参数,用于定义数据文件格式(载入时解析、导出时生成),还可指定其他工具参数。以下为核心内容:

[OPTIONS(
<id>=<value>
……
		)]
LOAD [DATA]
INFILE < <file_option>|<directory_option> >
[BADFILE <path_name>]
[APPEND|REPLACE|INSERT]
<into_table_clause>
<id> ::=参数
<value> ::=值
<file_option> ::= [LIST] <path_name> [<row_term_option>] [,<path_name>
[<row_term_option>]]
<directory_option> ::= DIRECTORY <path_name> [<row_term_option>]
<path_name> ::=文件地址
<row_term_option> ::=STR [X] <delimiter>
<into_table_clause> ::= <into_table_single>{<into_table_single>}
<into_table_single> ::=INTO TABLE [<schema>.]<tablename>
						[EP <ep_option>]
						[WHEN <field_conditions>]
						[FIELDS [TERMINATED BY] [X] <delimiter>]
						[<enclosed_option>]
						[TRAILING NULLCOLS]
						[<coldef_option>]
<schema> ::=模式名
<tablename> ::=表名
<ep_option> ::=(<ep_list>)
<ep_list> ::=整型数字列表,以逗号分隔
<field_conditions> ::= <field_condition>{ AND <field_condition>}
<field_condition> ::= [(] <cmp_exp><cmp_ops><cmp_data>[)]
<cmp_exp> ::= <colid> | (p1:p2)
<cmp_ops> ::= = | <> | !=
<cmp_data> ::= [X] '<字符串常量>' | BLANKS | WHITESPACE
<delimiter> ::= '<字符串常量>'
<coldef_option> ::= (<col_def>{ ,<col_def>})
<col_def> ::= <col_id> [FILLER][<property_option>][<dtype_option>][<fmt_option>][<term_option>][<enclosed_option>][<constant_option>][<fun_option>]
<col_id> ::= 列名
<property_option> ::= <position_option> | NULL
<position_option> ::= position(p1:p2) | position(p1) | position(*)
<dtype_option> ::= DATE | CHAR
<fmt_option> ::= FORMAT '<日期格式>'
<term_option> ::= TERMINATED [BY] <wx_option>
<wx_option> ::= WHITESPACE|[X] <delimiter>
<enclosed_option> ::= [OPTIONALLY] ENCLOSE [BY] [X] <delimiter>
<constant_option> ::= CONSTANT "<常量>"
<fun_option> ::= "<函数>"

2.2 指定数据文件

dmfldr 支持以下三种方式指定数据文件,仅需选择其中一种即可:

  • 控制文件中指定​:在控制文件(CONTROL)内直接定义数据文件路径或规则(如通过 LIST 选项批量指定)。
  • 命令行参数 DATA 直接指定​:通过命令行参数 -DATA 直接传入数据文件路径。
  • dmfldr.ini 配置文件指定​:通过外部配置文件(dmfldr.ini)统一管理数据文件路径。

2.1.1 在控制文件中指定数据文件

建表
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行数据载入。
image.png
image.png

2.1.2 使用 DATA 参数指定数据文件

使用 DATA 参数指定 dmfldr 的数据文件,用户可以在命令行中直接指定 DATA 参数。
在 dmfldr.ini 配置文件中指定 DATA 参数,如果控制文件中数据文件路径指定为‘**’,那么会使用命令行或 dmfldr.ini 配置文件中指定的 DATA 参数来替换‘
优先使用命令行中指定的 DATA 参数进行替换。
建表
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行数据载入。
image.png
image.png

2.3 数据转换与错误数据文件

dmfldr 处理的文本数据文件中,列值以字符串形式存储,需转换为数据库表对应列的数据类型。支持转换的数据库列类型包括:

字符串类型
数值类型
时间日期类型
时间日期间隔类型
大字段类型(如 BLOB、CLOB 等)

若数据文件编码与 DM 数据库服务器编码不一致,dmfldr 会自动进行编码转换,支持的编码类型包括:

UTF-8
GBK
GB18030
(支持三者之间的相互转换)

数据类型或编码转换过程中可能出现的错误包括:

​编码转换失败​:数据文件编码与目标编码不兼容。
​字符串类型列错误​:数据长度超过列定义的长度限制。
​数值类型列错误​:数据包含非法字符(如非数字字符)或转换后超出数值范围。
​日期类型列错误​:数据格式不符合默认解析格式(yyyy-mm-dd hh:mi:ss),且未通过 fmt 选项指定正确格式。

错误数据处理​分为
​1. 错误文件路径(BADFILE)​​

​默认路径​:fldr.bad。
​指定方式​(优先级从高到低):
命令行参数;
控制文件的 LOAD 节点选项;
控制文件的 OPTIONS 选项;
dmfldr.ini 配置文件参数。
​作用范围​:仅 IN 模式(数据载入)有效,OUT 模式(数据导出)无效。

​2. 错误文件内容​

执行程序信息;
时间;
目标表;
数据文件中格式错误的行数据;
具体转换错误信息。

​3. 最大容错数(ERRORS 选项)​​

​取值范围​:[0, 4294967295](整数),默认值为 100。
​规则​:
错误数 ≤ ERRORS:错误行记录到 BADFILE,正确数据提交;
错误数 > ERRORS:停止载入,已处理的正确数据提交;
ERRORS=0:不允许任何错误,出现错误立即停止;
ERRORS=极大值(如 4294967295):允许所有错误,仅记录不中断。

2.4 服务器端错误数据处理

数据载入流程​

dmfldr 客户端完成数据转换(数据转换、编码转换)后,将转换正确的数据发送至 DM 服务器端的 dmfldr 模块,由其执行实际的数据载入操作。

服务器端插入错误处理​

服务器端在插入数据过程中,若因表约束(如唯一约束、外键约束等)导致部分或全部数据无法插入成功,服务器端会将当前批次的所有数据整体回滚。
数据全部被记录为错误数据,服务器端插入失败的错误数据不会记录到 BADFILE 文件中。

服务端ERRORS 所统计的错误包含在数据转换和数据插入过程中所产生的数据错误,服务端插入错误记录加上客户端转换错误数据数超过指定值,服务端通知插入数据。

2.5 大字段数据处理

dmfldr 支持对 DM 数据库的大字段类型数据的载入和导出,DM 数据库支持的大字段数据类型有 TEXT、LONGVARCHAR、IMAGE、LONGVARBINARY、BLOB 以及 CLOB。

2.5.1 大字段数据的导出

当 dmfldr 工作在导出模式即 MODE 为 OUT 时,dmfldr 生成大字段对应的数据文件名由 LOB_FILE_NAME 指定,若未指定默认为 dmfldr.lob,文件存放于 LOB_DIRECTORY 指定的目录,如果未指定 LOB_DIRECTORY 则存放于指定的导出数据文件同一目录。
建表
image.png
插入数据
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行导出数据
image.png

2.5.2 DIRECT 为 TRUE 时大字段数据的载入

当 MODE=IN 且 DIRECT=TRUE 时,大字段载入需注意:

​CLIENT_LOB=TRUE​:需通过 LOB_DIRECTORY 指定客户端本地大字段文件目录,且大字段长度≤2G;
​CLIENT_LOB=FALSE​:需先将大字段文件传至DM服务器主库机器,再通过 LOB_DIRECTORY 指明服务器端目录;
数据文件中大字段以 文件名:起始偏移:长度 格式记录,若文件名无效或CLOB类型偏移/长度内含不完整字符,装载失败。

例 1 展示 DIRECT 为 TRUE,CLIENT_LOB 为 TRUE 时大字段数据的载入。
建表 TEST
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
image.png
编辑控制文件 test.ctl,存放路径为 DM 客户端所在机器上的/home/dmdba/test.ctl,文件内容如下:
image.png
使用 dmfldr 进行导入数据
image.png
image.png
例 2 展示 DIRECT 为 TRUE,CLIENT_LOB 为 FALSE 时大字段数据的载入。
建表 TEST
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
image.png
其中,testblob.txt、testclob.txt 为文本文件,长度大于 30 字节,存放路径为 DM 服务器主库所在机器(192.168.123.1)上的D:/DM目录下
编辑控制文件 test.ctl,存放路径为 DM 客户端所在机器上的/home/dmdba/test.ctl,文件内容如下:
image.png
使用 dmfldr 进行导入数据
image.png
image.png

2.5.3 DIRECT 为 FALSE 时大字段数据的载入

当 MODE=IN 且 DIRECT=FALSE 时,大字段处理规则:

大字段数据直接作为字段内容,长度限制≤32KB;
BLOB_TYPE 参数指定BLOB列内容格式(仅 DIRECT=FALSE 有效,默认 HEX_CHAR):
HEX_CHAR:数据文件中BLOB列存储为十六进制内容;
HEX:数据文件中BLOB列存储为字符串,导入后自动转换为十六进制;
注意:若导出数据文件来自包含BLOB列的表,导入时不可指定 BLOB_TYPE=HEX_CHAR。

建表
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行导出数据
image.png
image.png
例 2 展示 BLOB_TYPE 为 HEX 时的数据装载。
使用 dmfldr 进行导入数据,BLOB_TYPE 为 HEX
image.png
image.png

2.6 日志文件及日志信息

dmfldr 日志文件路径由 LOG 参数设置(默认文件名 fldr.log),记录装载过程信息、错误信息及统计信息。用户可通过控制文件的 OPTIONS 选项自定义日志路径,若 LOG 参数与 OPTIONS 同时指定,以 OPTIONS 中设置的路径为准。
建表 TEST
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行数据载入
image.png
查看日志文件/home/dmdba/test.log,其内容如下:

dmfldr: 2025-06-20 21:27:01  控制文件:

加载行数: 全部

每次提交服务器行数: 50000

跳过行数: 0

允许错误数: 100

是否直接加载: Yes

是否插入自增列: No

数据是否已按照聚集索引排序: No

字符集: UTF-8


dmfldr: 2025-06-20 21:27:01 SYSDBA->TEST 
数据文件共1个: 
/home/dmdba/test.txt

错误文件: fldr.bad

目标表: TEST

列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            WHT
C3                                                                                                                               yyyy-mm-dd           |

行缓冲区数量: 2
任务线程数量: 1

dmfldr: 2025-06-20 21:27:01 SYSDBA->TEST 
目标表: TEST
load success.
3 行加载成功。
0 行由于数据错误没有加载。
0 行由于数据格式错误被丢弃。

跳过的逻辑记录总数: 0
读取的逻辑记录总数: 3
拒绝的逻辑记录总数: 0

2.333(ms)已使用

2.7 自增列装载

自增列需严格保证数据库中值的正确性,数据载入时需特别注意处理方式。
​DIRECT=FALSE​:
dmfldr 直接将数据文件中的自增列值作为目标值插入数据库。用户需确保每一行的自增值符合自增规则(如无重复、递增等),否则可能导致数据混乱。
​DIRECT=TRUE​:
通过 SET_IDENTITY 参数控制自增列处理逻辑(默认 FALSE):

SET_IDENTITY=TRUE:dmfldr 将数据文件中的自增值作为目标值插入,用户需确保值符合自增规则;
SET_IDENTITY=FALSE:dmfldr 忽略数据文件中的自增值,服务器根据自增列定义及表中已有数据自动生成新值插入。

DMDPC 环境下暂不支持自增列的数据装载操作
建表 TEST,并插入两行数据
image.png
此时表 TEST 中的数据为:
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行数据载入
image.png
image.png
在这个例子中,表 TEST 中已有两行数据,由于 SET_IDENTITY 置为 FALSE,因此在数据载入时 dmfldr 根据 C1 列的定义和表中已有数据,为 C1 列重新插入合适的值。
例 2 展示 SET_IDENTITY 置为 TRUE 时的装载
使用 dmfldr 进行数据载入
image.png
image.png

2.8 数据排序

SORTED 用于标识数据是否已按表的聚集索引排序,默认值为 FALSE(未排序)。
​SORTED=TRUE​:

用户需确保数据文件中的数据已按聚集索引排序,且新增数据的索引值大于表中现有数据的索引值​(保证顺序插入)。
若数据未排序,dmfldr 直接报错,装载失败。
​分区表特殊处理​:可能全部成功(子表数据排序正确),或部分成功/失败(dmfldr 报错)。

​SORTED=FALSE​(默认):

服务器对每条记录逐条定位插入​(无顺序要求)。

​仅生效场景​:MODE=IN 且 DIRECT=TRUE 时有效。
​性能建议​:数据量大且确认数据已按聚集索引排序时,设置 SORTED=TRUE 可提升装载性能(避免逐条定位)
建表 TEST
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行数据载入
image.png
image.png
文件中的数据并没有按照 C1 列排序,dmfldr 将会报错

2.9 空值处理

dmfldr 通过设置 NULL_MODE 参数来处理空值。
NULL_MODE =TRUE

载入时 NULL 字符串处理为 NULL,载出时空值处理为 NULL 字符串

NULL_MODE=FALSE

载入时 NULL 字符串处理为字符串,载出时空值处理为空串

建表 TEST
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行数据载入。
image.png
image.png
TEST 的数据,数据文件中 C2 列的“NULL”和“null”字符串都被处理为空值
展示 null_mode 为 false 时的空值处理
使用 dmfldr 进行数据载入
image.png
image.png
TEST 的数据,数据文件中 C2 列的“NULL”和“null”字符串直接被作为字符串值插入表中

2.10 类类型装载

需指定 LOB_DIRECTORY(大字段文件所在目录),并设置 ENABLE_CLASS_TYPE=TRUE(启用 CLASS 类型支持)。
导出时

​默认设置​:导出目录与数据文件所在目录一致;导出的 CLASS 类型大字段文件默认命名为 dmfldr.lob。
​自定义设置​:可通过 LOB_DIRECTORY 指定导出目录,通过 LOB_FILE_NAME 指定大字段文件名。

CLASS 类型的大字段数据文件无法手动创建,仅能通过从数据库表中导出生成,且导入时需使用数据文件中 CLASS 字段对应的偏移和字长信息。
举例 建表 TEST

22:20:28 SQL> //类头创建
CREATE CLASS mycls
AS
TYPE rec_type IS RECORD (c1 INT, c2 INT);	//类型声明
id	INT;				//成员变量
r	rec_type;			//成员变量
FUNCTION f1(a INT, b INT) RETURN rec_type;	//成员函数
FUNCTION mycls(id INT , r_c1 INT, r_c2 INT) RETURN mycls;//用户自定义构造函数
END;
/

//类体创建
CREATE OR REPLACE CLASS BODY mycls
AS
FUNCTION f1(a INT, b INT) RETURN rec_type
AS
BEGIN 
	r.c1 = a;
	r.c2 = b;
	RETURN r;
END;
FUNCTION mycls(id INT, r_c1 INT, r_c2 INT) RETURN mycls
AS
BEGIN
	this.id = id;		//可以使用this.来访问自身的成员
	r.c1 = r_c1;		//this也可以省略
	r.c2 = r_c2;
	RETURN this;		//使用return this 返回本对象
END;
END;
/

//建表TEST
DROP TABLE TEST;
CREATE TABLE TEST(C1 INT,C2 mycls);
//插入数据:
INSERT INTO TEST VALUES(1,mycls(1,1,1));
INSERT INTO TEST VALUES(2,mycls(2,2,2));
COMMIT;2   3   4   5   6   7   8   9   10  操作已执行
已用时间: 12.179(毫秒). 执行号:8818.
22:20:29 SQL> 22:20:29 SQL> 2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  操作已执行
已用时间: 5.545(毫秒). 执行号:8819.
22:20:29 SQL> 22:20:29 SQL> 2   操作已执行
已用时间: 12.633(毫秒). 执行号:8820.
22:20:29 SQL> 操作已执行
已用时间: 2.207(毫秒). 执行号:8821.
22:20:29 SQL> 2   影响行数 1

已用时间: 0.834(毫秒). 执行号:8822.
22:20:29 SQL> 影响行数 1

已用时间: 0.390(毫秒). 执行号:8823.
22:20:29 SQL> 
操作已执行
已用时间: 3.106(毫秒). 执行号:8824.
22:20:32 SQL> 

编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行数据导出
image.png
在指定的 LOB_DIRECTORY 目录会生成大字段文件 dmfldr.lob,在指定的数据文件路径生成的数据文件内容如下:
image.png
创建一张新表 TEST2,表的两列都为 mycls 类类型
image.png
编辑数据文件 test2.txt,存放路径为/home/dmdba/test2.txt,文件内容如下:
image.png
使用 dmfldr 进行数据导入
image.png
查看表 TEST2 的数据
image.png

2.11 条件过滤

通过在控制文件中指定 WHEN<field_conditions> 子句,可在数据装载过程中过滤数据,仅符合条件(field_conditions)的数据会被装载。
注意要点:

1.仅支持比较相等(=)、不相等(!=、<>)三种操作符。
2.多个过滤条件仅能用 AND 连接。
3.BLANKS 和 WHITESPACE 均表示若干连续空格。
4.表达式(p1:p2)​​:
与 POSITION 子句中的意义一致,表示从数据文件当前行的 p1 到 p2 字节位置(包含边界)提取数据用于比较。
​5.colid 表达式​:
若 colid 对应列未在 INTO 表的 coldef_option 中说明,会导致错误。
若 colid 仅用于过滤(非表中实际列),需在 col_def 中通过 FILLER 属性标记,装载时跳过该列。
​6.常量​:
字符常量:若长度小于比较表达式长度,末尾补充空格。
二进制串常量:若长度小于比较表达式长度,末尾补充 0。

建表 TEST
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下
image.png
使用 dmfldr 进行数据载入
image.png
image.png
TEST 的数据,可以看到数据文件中的行 2,3 被过滤掉

2.12 多表装载

通过控制文件中指定多个 INTO TABLE 子句,可同时将数据装载至多个目标表,每个子句支持独立设置 WHEN 过滤条件、FIELDS 子句及列定义

1.每个 INTO TABLE 子句的目标表必须是不同的表;
2.多表装载时不支持直接装载分区表子表;
3.对于第二个及其之后的 INTO TABLE 子句,在其 coldef_option 中,必须为第一列指定 POSITION 选项;

建表 TEST1、TEST2
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行数据载入
image.png
image.png

2.13 个性化设置

用户通过设置 dmfldr 的 SKIP、LOAD、ROWS 参数,可以根据自己的需求调整装载的起始行、装载最大行数以及每次提交的行数。
SKIP

设置跳过数据文件起始的逻辑行数(整型)。
​默认值​:0(不跳过任何行)。
若首个文件的行数不足 SKIP 指定值,dmfldr 会自动扫描后续文件,直至累计跳过行数达到 SKIP 或所有文件扫描完毕。

LOAD

设置本次装载的最大行数(整型)。
​默认值​:数据文件的全部行数(即装载所有未被跳过的行)。
LOAD 统计的行数不包含​ SKIP 跳过的行数。

ROWS

设置每次向服务器提交的成功行数(整型)。
​默认值​:50000 行(平衡提交频率与性能)。
提交的行数不严格对应数据文件中的顺序行数(可能因过滤或错误跳过部分行)。
​模式限制​:仅 MODE=IN(数据载入)时有效,MODE=OUT(数据导出)时无效。

建表 TEST
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt,文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/home/dmdba/test.ctl,内容如下:
image.png
使用 dmfldr 进行数据载入
image.png
image.png
image.png
TEST 的数据,载入时跳过了数据文件的前 3 行数据,且只载入了 5 条数据。

2.14 主备切换时的数据继续载入

dmfldr 支持主备切换完成后自动继续装载数据,并且能保持数据正确。

要使用此项功能,USERID 参数需要使用主备服务名方式进行配置,例如:
dmfldr USERID=SYSDBA/Dmsys_123@dw CONTROL='c:\fldr.ctl'
同时在 dm_svc.conf 配置文件中配置主备服务名,例如:
dw=(192.168.0.101:5236, 192.168.0.102:5236)
目前主备切换时的数据继续载入功能还存在以下功能限制:

1.目前仅支持单机的主备,不支持 MPP 主备。但是,若在 MPP 主备环境中使用 MPP_CLIENT=FALSE,等同于单机,也是支持的。
2.目前不支持分区表装载。

2.15 MPP 本地分发

MPP_CLIENT 用于设置 DM MPP 环境下 dmfldr 数据装载时的数据分发方式,仅在 MPP 环境生效(单站点环境无效)。
​MPP_CLIENT=TRUE(客户端分发模式)​​:

数据在 dmfldr 客户端完成分发后,直接发送至指定站点。

​MPP_CLIENT=FALSE(本地分发模式)​​:

​导入场景​:数据仅发送至 dmfldr 连接的站点,最终存储于该站点。
​导出场景​:仅导出 dmfldr 连接站点的数据(不涉及其他站点)。

MPP 环境下要配置 dmmal.ini 文件中的 MAL_INST_HOST 和 MAL_INST_PORT 参数。

2.16 提升 dmfldr 性能

过调整以下参数可优化 dmfldr 装载性能,具体参数作用及调整建议如下:
​BUFFER_NODE_SIZE​(缓冲区页大小):

​功能​:控制读取文件的缓冲区页大小,值越大,单次读取数据量及发送至服务器的数据量越多,效率越高。
​限制​:受限于 dmfldr 客户端内存大小。

​READ_ROWS​(处理行数限制):

功能​:限制单次处理的行数(若 BUFFER_NODE_SIZE 读取的行数过大,可用此参数限制)。
​实际生效值​:取 READ_ROWS 与 BUFFER_NODE_SIZE 中的较小值。

SEND_NODE_NUMBER​(发送节点数):

​功能​:指定数据载入时发送节点的个数(默认由系统计算初始值)。
​优化建议​:系统内存充足时,增大此值可提升载入性能。

​TASK_THREAD_NUMBER​(处理线程数):

​默认值​:通常为系统 CPU 个数(若 CPU>8,默认置为 8)。
​优化建议​:客户端所在机器 CPU>8 时,增大此值可提升处理性能。

​BLDR_NUM​(水平分区 BLDR 最大数):

​默认值​:64(BLDR 用于保存水平分区子表信息)。
​注意​:设置过大可能导致服务器内存不足;实际需要的 BLDR 数超上限时,会淘汰旧子表 BLDR 并替换为新子表 BLDR。

​BDTA_SIZE​(批量数据大小):

​默认值​:5000(DM 批量数据处理机制中的单批数据量)。
​优化建议​:内存/CPU 允许时增大此值可加快装载速度;网络为瓶颈时影响较小。

索引策略参数(INDEX_OPTION)​​
​可选值​:1、2、3(默认 1),根据目标表数据量选择:

​1​:装载时不刷新二级索引,先排序数据,装载完成后插入索引(适用于目标表已有较多数据的场景)。
​2​:装载过程中不刷新二级索引,装载完成后重建所有索引(适用于目标表无数据或数据量小的场景)。
​3​:装载时追加插入二级索引(非 DPC 环境下可同步插入全局索引),适用于原有数据量远大于插入数据量的场景。

2.17 dmfldr 使用限制

不支持向临时表、外部表装载数据
不支持向系统表装载数据
不支持向带有位图索引的表装载数据
不支持向带有全文索引的表装载数据
不支持向 DCP 代理装载数据
不支持在 DPC 环境下,向带有全局索引的表装载数据
仅支持在 index_option=2 的情况下向带有函数索引的表装载数据
对象表暂不支持快速装载
dmfldr 装载时会对约束进行检查,对各种约束的处理机制如下表所示;由于 dmfldr 不处理约束的有效性,都视为有效,故需要用户自行处理约束有效性等相关内容
image.png

三 dmldrp和dmldrc测试

dmldrp 和 dmldrc 只支持快速载入功能,不支持快速载出功能。

3.1 dmldrp

3.1.1 启动 dmldrp

DM 数据库管理系统安装后,dmldrp 执行文件位于安装目录的 bin 子目录下。
dmldrp keyword=value(keyword 为参数名,value 为参数值)
例 启动一个端口号为 9898 的 dmldrp

./dmldrp.exe port=9898

3.1.2 查看 dmldrp 参数

用户可以使用“dmldrp help”查看 dmldrp 版本信息和各参数的简单信息

./dmldrp help
dmldrp V8
格式: ./dmldrp  KEYWORD=value
例程: ./dmldrp  
关键字       说明
---------------------------------------------------------------------
PORT        端口号(可选项, 默认为8336)
HELP        打印帮助信息

dmldrp 的端口号,用于 dmldrp 和 dmldrc 之间的通信连接。取值范围为 1024~65534。可选配置,不配置则使用默认的端口 8336。

3.2 dmldrc

3.2.1 启动 dmldrc

DM 数据库管理系统安装后,dmldrp 执行文件位于安装目录的 bin 子目录下。

dmldrc keyword=value [keyword=value ...]

3.2.2 查看 dmldrc 参数

./dmldrc help
version: 03134284345-20241118-250270-10000
格式: ./dmldrc   KEYWORD=value

例程: ./dmldrc   SYSDBA/Dmsys_123 192.168.0.1:8336 

USERID 必须是命令行中的第一个参数
SERVER 必须是命令行中的第二个参数
字符串类型参数必须以引号封闭

关键字              说明(默认值)
--------------------------------------------------------------------------------
USERID              用户名/口令
                      格式: {<username>[/<password>] | /}[@<connect_identifier>][<option>] [<os_auth>]
                      参数:
                        <connect_identifier> ::= [<svc_name> | host[:port] | <unixsocket_file>]
                        <option> ::= #{<extend_option>=<value>[,<extend_option>=<value>]...}
                        <os_auth> ::= AS { SYSDBA | SYSSSO | SYSAUDITOR | USERS | AUTO }
                      示例: SYSDBA/Dmsys_123@192.168.1.64:5236
                      注意: option参数的{}是为了封装参数之用,书写时需要保留
SERVER              dmldrp的IP地址和端口号。不需要指定参数名,直接指定host[:port]
CONTROL             控制文件,字符串类型
LOG                 日志文件,字符串类型 (fldr.log)
BADFILE             错误数据记录文件,字符串类型 (fldr.bad)
SKIP                初始忽略逻辑行数 (0)
LOAD                需要装载的行数 (ALL)
SET_IDENTITY        是否插入自增列 (FALSE)
SORTED              数据是否已按照聚集索引排序 (FALSE)
INDEX_OPTION        索引选项 (1)
                    1 不刷新二级索引,数据按照索引先排序,装载完后再
                    将排序的数据插入索引
                    2 不刷新二级索引,数据装载完成后重建所有二级索引
                    3 刷新二级索引, 数据装载的同时将数据插入二级索引
ERRORS              允许的最大数据错误数 (100)
CHARACTER_CODE      字符编码,字符串类型 (GBK, UTF-8, SINGLE_BYTE, EUC-KR)
MODE                装载方式,字符串类型 IN表示载入,OUT表示载出,
                    OUTORA表示载出ORACLE (IN)
CLIENT_LOB          大字段目录是否在本地 (FALSE)
LOB_DIRECTORY       大字段数据文件存放目录
LOB_FILE_NAME       大字段数据文件名称,仅导出有效 (dmfldr.lob)
BUFFER_NODE_SIZE    读入文件缓冲区的大小 (10MB),有效值范围1~2048
LOG_SIZE            日志信息缓冲区的大小 (1MB),有效值范围1~100
READ_ROWS           工作线程一次最大处理的行数 (100000),最大支持2^26-10000
NULL_MODE           载入时NULL字符串是否处理为NULL
                    载出时空值是否处理为NULL字符串 (FALSE)
NULL_STR            载入时视为NULL值处理的字符串
SEND_NODE_NUMBER    运行时发送节点的个数 (20),有效值范围16~65535
TASK_THREAD_NUMBER  处理用户数据的线程数目,默认与处理器核数量相同,有效值范围1~128
BLDR_NUM            服务器BLDR数目 (64),有效值范围1~1024
BDTA_SIZE           bdta的大小 (5000),有效值范围100~10000
COMPRESS_FLAG       是否压缩bdta (FALSE)
MPP_CLIENT          MPP环境,是否本地分发 (TRUE)
SINGLE_FILE         MPP/DPC环境,是否只生成单个数据文件(FALSE)
LAN_MODE            MPP/DPC环境,是否以内网模式装载数据(FALSE)
UNREP_CHAR_MODE     非法字符处理选项(0),为0时表示跳过该数据行,为1时表示使用(*)替换错误字节
SILENT              是否静默方式装载数据(FALSE)
OCI_DIRECTORY       OCI动态库所在的目录
DATA                指定数据文件路径
ENABLE_CLASS_TYPE   允许用户导入CLASS类型数据 (FALSE)
FLUSH_FLAG          提交时是否立即刷盘 (FALSE)
SINGLE_HLDR_HP      是否使用单个HLDR装载HUGE水平分区表 (TRUE)
EP                  指定需要发送数据的站点序号列表,仅向MPP/DPC环境导入数据时有效
PARALLEL            是否开启并行装载(FALSE)
SQL                 使用自定义查询语句,仅导出模式有效
TABLE               导入/出表
ROW_SEPERATOR       行分隔符
FIELD_SEPERATOR     列分隔符
COMMIT_OPTION       提交选项(0), 0:每发送一批数据后提交, 1:发送完所有数据后提交
APPEND_OPTION       追加选项(0), 0: 追加方式, 1: 替代方式, 2: 插入方式
COLNAME_HEADING     是否在导出文件头中打印列名(FALSE)
IGNORE_AIMLESS_DATA 是否忽略无目标数据(FALSE)
LOB_AS_VARCHAR      是否将CLOB作为VARCHAR进行导入导出(FALSE)
LOB_AS_VARCHAR_SIZE 将CLOB作为VARCHAR进行导入导出时, lob数据最大大小(10MB)
LOG_LEVEL           记录错误数据信息级别(3), 0: 不记录 1: 只记录到log文件 2: 只记录到bad文件 3: 记录到log和bad文件
FLDR_INI            配置文件路径,字符串类型
RECONN              自动重连次数(0)
RECONN_TIME         自动重连等待时间(5), 单位(s), 有效值范围(1~10000)
PLOG                ldrp日志文件,字符串类型 (ldrp.log)
COMPATIBLE_MODE     兼容模式(0), 0: 不做兼容, 1: 兼容DB2, 2: 兼容MYSQL
PRIORITY_ENCLOSE    DB2模式下, enclose优先级最高
HELP                打印帮助信息

3.3 dmldrp和dmldrc测试使用

使用 dmldrp 和 dmldrc 工具将数据快速装载进 test 表

3.3.1 数据准备

建表 test(Windows 192.168.123.1 服务器操作)
image.png
编辑数据文件 test.txt,存放路径为/home/dmdba/test.txt(Windows 192.168.123.1 服务器操作),文件内容如下:
image.png
编辑控制文件 test.ctl,存放路径为/opt/data/test.ctl,内容如下:
image.png

3.3.2 使用 dmldrp 和 dmldrc 完成快速装载

启动 dmldrp 服务器
image.png
使用 dmldrc 进行数据载入
image.png
image.png
image.png

达梦社区地址 https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服