千家信息网

DM7数据库数据快速加载(dmfldr) 详解

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,DM7数据库数据快速加载(dmfldr) 详解一 概述1.1 功能dmfldr(DM Fast Loader)是 DM7 提供的快速数据装载命令行工具。用户通过使用 dmfldr 工具能够把按照一定格
千家信息网最后更新 2026年11月01日DM7数据库数据快速加载(dmfldr) 详解

DM7数据库数据快速加载(dmfldr) 详解

一 概述

1.1 功能

dmfldr(DM Fast Loader)是 DM7 提供的快速数据装载命令行工具。用户通过使用 dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。

1.2 架构

如图所示,dmfldr 实际上除了客户端工具,还包含一个在 DM7 数据库服务器中的dmfldr 功能模块,它们共同完成 dmfldr 的各项功能。

1、当进行数据载入时,dmfldr 客户端接收用户提交的命令与参数,分析控制文件与数据文件,将数据打包发送给服务器端的 dmfldr 模块,由服务器完成数据的真正装载工作。并分析服务器返回的消息,必要时根据用户参数指定生成日志文件与错误数据文件。

2、当进行数据导出时,dmfldr 客户端接收用户提交的命令与参数,分析控制文件,将用户要求转换成相应消息发送给服务器端的 dmfldr 模块。服务器解析并打包需要导出的数据,发送给 dmfldr 客户端,客户端将数据写入指定的数据文件,必要时根据用户参数指定生成日志文件。

二 dmfldr入门

2.1 启动

安装好 DM7 数据库管理系统后,在安装目录的"bin"子目录下可找到 dmfldr 执行文件。

启动操作系统的命令行窗口,进入"dmfldr"所在目录,如果配置了环境变量,则可以在任何位置启动,可以准备启动 dmfldr 工具了。

dmfldr 的使用必须指定必要的参数,否则工具会报错"无效的参数个数"并退出。为dmfldr 指定参数的格式为:

dmfldr keyword=value [keyword=value ...]

例如:

dmfldr USERID=SYSDBA/SYSDBA CONTROL='c:\fldr.ctl'

如例子所示,USERID 和 CONTROL 是启动 dmfldr 必须要指定的参数,且 USERID 必须是第一个参数,CONTROL 必须是第二个参数。

2.2 dmfldr语法

dmfldr 使用较为灵活,参数较多,用户可以使用"dmfldr help"查看各参数的简单信息。

dmfldr help

格式: DMFLDR KEYWORD=value

例程: DMFLDR SYSDBA/SYSDBA CONTROL='c:\fldr.ctl'

USERID 必须是命令行中的第一个参数

CONTROL 必须是命令行中的第二个参数

字符串类型参数必须以引号封闭

关键字 说明(默认值)

---------------------------------------------------------------------------

USERID 用户名/口令格式:USER/PWD@SERVER:PORT#SSL_PATH@SSL_PWD

CONTROL 控制文件,字符串类型

LOG 日志文件,字符串类型 (dfldr.log),不指定默认放在文件位置

BADFILE 错误数据记录文件,字符串类型 (dfldr.bad)

SKIP 初始忽略逻辑行数 (0)

LOAD 需要装载的行数 (ALL)

ROWS 提交频次 (50000), DIRECT 为 FALSE 有效

DIRECT 是否使用快速方式装载 (TRUE)

SET_IDENTITY 是否插入自增列 (FALSE)

SORTED 数据是否已按照聚集索引排序 (FALSE)

INDEX_OPTION 索引选项 (1)

1 不刷新二级索引,数据按照索引先排序,装载完后再

将排序的数据插入索引

2 不刷新二级索引,数据装载完成后重建所有二级索引

ERRORS 允许的最大数据错误数 (100)

CHARACTER_CODE 字符编码,字符串类型 (GBK, UTF-8, SINGLE_BYTE, EUC-KR)

MODE 装载方式,字符串类型 IN 表示载入,OUT 表示载出,默认为IN;

OUTORA 表示载出 ORACLE (IN)

CLIENT_LOB 大字段目录是否在本地 (FALSE)

LOB_DIRECTORY 大字段数据文件存放目录

LOB_FILE_NAME 大字段数据文件名称,仅导出有效 (dmfldr.lob)

BUFFER_NODE_SIZE 读入文件缓冲区的大小 (10),有效值范围 1~2048

READ_ROWS 工作线程一次最大处理的行数 (100000),最大支持 2^26-10000

SILENT 是否静默方式装载数据(FALSE)

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)

BLOB_TYPE BLOB 类型字段数据值的实际类型,字符串类型 (HEX_CHAR)

HEX 表示值为十六进制,HEX_CHAR 表示值为十六进制字符类型

仅在 direct=FALSE 有效

OCI_DIRECTORY OCI 动态库所在的目录

DATA 指定数据文件路径

ENABLE_CLASS_TYPE 允许用户导入 CLASS 类型数据 (FALSE)

FLUSH_FLAG 提交时是否立即刷盘 (FALSE)

IGNORE_BATCH_ERRORS 是否忽略错误数据继续导入 (FALSE)

SINGLE_HLDR_HP 是否使用单个 HLDR 装载 HUGE 水平分区表 (FALSE)

HELP 打印帮助信息

2.3 控制文件语法

控制文件 CONTROL 是启动 dmfldr 必须要指定的参数,用于指定数据文件中数据的格式。在数据载入时,dmfldr 根据控制文件指定的格式来解析数据文件;导出数据时,dmfldr 也会根据控制文件指定的列分隔符、行分隔符等生成数据文件。

控制文件中还可以指定其他 dmfldr 参数值。

dmfldr 控制文件的语法如下所示:

[OPTIONS(

=

……

)]

LOAD [DATA]

INFILE [LIST] [] [,

[]]

[BADFILE ]

[APPEND|REPLACE|INSERT]

INTO TABLE [.]

[FIELDS ]

[]

::=参数

::=值

::=文件地址

::=含文件列表文件地址

::=STR [X]

::= {}

::=INTO TABLE [.]

[WHEN ]

[FIELDS [TERMINATED BY] [X] ]

[]

[]

::=模式名

::=表名

::= { AND }

< field_condition> ::= [(] [)]

::= | (p1:p2)

::= = | <> | !=

::= [X]'<字符串常量>' | BLANKS | WHITESPACE

::='<字符串常量>'

::=({ ,})

::= [FILLER][][][]

[][][]

::=列名

::= | NULL

::=position(p1:p2) | position(p1)

::=DATE FORMAT '<时间日期格式串>'

::= TERMINATED [BY]

::= WHITESPACE|[X]

::= [OPTIONALLY] ENCLOSE [BY] [X]

::= CONSTANT "<常量>"

::= "函数名称()"

对于上述控制文件语法,需要说明的是:

 1、dmfldr 在处理数据文件中换行符时 windows 默认为 0x0D0A(\r\n),非windows 默认为 0x0A(\n),用户应该根据现有的数据文件中的换行符做相应的调整。对应选项为,若指定的值为十六进制的字符串值需要指明[X]选项,值不再需要以 0x 开头。若没有指明[X]选项,则值为指定的字符串;

 2、关于列分隔符,用户应当指定 FIELDS 或者 coldef_option 中的至少一种。若两者均存在,则以 coldef_option 中的设置为准,若分隔符指明[X]选项,则表明此分隔符为十六进制格式的字符串;

 3、关于 LIST 选项,INFILE 使用 LIST 选项时,表明实际的数据文件路径存储在INFILE 指定的文件中,该文件可以存储多个实际的数据文件路径,使用逗号或者换行分割;

 4、关于 OPTIONS 选项,该选项支持命令行参数中除 userid,control,help 以外的所有参数的指定,每个参数值对使用空格或者换行分割。对于 option 中出现的参数,在 dmfldr 的指定执行参数中也出现的,dmfldr 会选择 option 中对应参数的值执行;

 5、关于 col_def,FILLER 表示跳过处理数据文件中指定列的值;

 6、关于 property_option 选项

 A、position(p1:p2):从数据文件中每行数据的第 p1 个字节到第 p2 个字节为该列值,包含边界 p1,p2;

 B、 position(p1):从数据文件中每行数据的第 p1 个字节开始,到下一个列分

隔符之间的数据为该列值,包含边界 p1;

 C、position 选项对大字段数据无效,若对大字段类型指定此选项会报错;

 D、NULL:指定的值为 NULL,忽略数据文件中的值;

property_option 参数仅对导入有效;

 7、关于 term_option 选项,该选项用来指定数据文件中指定列的结束标志。列的结束标志可以是 WHITESPACE(空格)或者用户自定义的字符串或十六进制串。指定了 term_option 后,该列不需要用 FIELDS 分隔;

 8、关于 enclosed_option 选项,此参数指定封闭符,为可选参数,默认不存在封闭符。若在 into_table_clause 和 coldef_option 中均设置了封闭符,则以 coldef_option 中的设置为准,若封闭符前指定[X]选项,则表明此封闭符为十六进制格式的字符串;

 9、分隔符或封闭符字符串的长度均不能超过 255 个字节;

 10、关于 constant_option 选项,指定 constant 关键字后,数据文件中不需要为该列准备数据,如果指定了,该列数据将作为下一字段数据装载而导致数据混乱。constant 选项对大字段类型无效;

 11、关于 fun_option 选项,目前只支持 trim()函数。

三 dmfldr实例

3.1 普通文件(文本文件)

3.1.1 创建测试表

SQL> drop table test;

操作已执行

已用时间: 29.165(毫秒). 执行号:1174.

SQL>

SQL> create table test(c1 int,c2 int,c3 date);

操作已执行

已用时间: 21.497(毫秒). 执行号:1175.

SQL>

3.1.2 创建源数据文件test.txt

[dmdba@dm3 ~]$ cat /home/dmdba/test.txt

1|1 2019-09-22

2|2 2019-09-22

3|3 2019-09-22

[dmdba@dm3 ~]$

3.1.3 创建控制文件test.ctl

[dmdba@dm3 ~]$ cat /home/dmdba/test.ctl

LOAD DATA

INFILE '/home/dmdba/test.txt'

INTO TABLE test

FIELDS '|'

(

c1,

c2 TERMINATED BY ' ',

c3 DATE FORMAT 'yyyy-mm-dd'

)

[dmdba@dm3 ~]$

3.1.4 使用 dmfldr 进行数据载入

[dmdba@dm3 ~]$ dmfldr userid=sysdba/SYSDBA control=\'/home/dmdba/test.ctl\' log=\'/home/dmdba/dmfldr_test.log\'

dmfldr V7.6.0.171-Build(2019.07.02-109059)ENT

dmfldr:

Copyright (c) 2011, 2015, Dameng. All rights reserved.

控制文件:

加载行数:全部

每次提交服务器行数:50000

跳过行数:0

允许错误数:100

是否直接加载:Yes

是否插入自增列:No

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

字符集:GBK

数据文件共1个:

/home/dmdba/test.txt

错误文件:fldr.bad

目标表:TEST

列名 包装数据类型 终止

C1 CHARACTER |

C2 CHARACTER WHT

C3 yyyy-mm-dd |

行缓冲区数量: 2

任务线程数量: 1

3行记录已提交

目标表:TEST

3 行加载成功。

由于数据格式错误,0行 丢弃。

由于数据错误,0行 没有加载。

跳过的逻辑记录总数:0

读取的逻辑记录总数:3

拒绝的逻辑记录总数:0

用时:10.231(ms)

从日志输出,告诉我们成功导入3行.

3.1.5 查询验证

SQL> select * from test;

行号 c1 c2 c3

---------- ----------- ----------- ----------

1 1 1 2019-09-22

2 2 2 2019-09-22

3 3 3 2019-09-22

已用时间: 10.354(毫秒). 执行号:1178.

SQL>

3.2 大字段数据处理

3.2.1 大字段数据的导出

当 dmfldr 工作在导出模式即 MODE 为 OUT 时,dmfldr 生成大字段对应的数据文件名由 LOB_FILE_NAME 指定,若未指定默认为 dmfldr.lob,文件存放于LOB_DIRECTORY 指定的目录,如果未指定 LOB_DIRECTORY 则存放于指定的导出数据文件同一目录。

3.2.1.1 创建测试表

SQL> drop table test;

操作已执行

已用时间: 29.165(毫秒). 执行号:1174.

SQL>

SQL> create table test(c1 int,c2 blob,c3 clob);

操作已执行

已用时间: 21.497(毫秒). 执行号:1175.

SQL>

3.2.1.2 插入数据

INSERT INTO TEST VALUES(1,0XAB121032DE,'abcdefg');

INSERT INTO TEST VALUES(2,0XAB121032DE,'abcdefg');

COMMIT;

SQL> select * from test;

行号 c1 c2 c3

---------- ----------- ------------ -------

1 1 0xAB121032DE abcdefg

2 2 0xAB121032DE abcdefg

已用时间: 0.489(毫秒). 执行号:1184.

SQL>

3.2.1.3 创建控制文件test.ctl

[dmdba@dm3 ~]$ cat /home/dmdba/test.ctl

LOAD DATA

INFILE '/home/dmdba/test.txt'

INTO TABLE test

FIELDS '|'

(

c1,

c2,

c3

)

[dmdba@dm3 ~]$

3.2.1.4 使用 dmfldr 进行数据导出

[dmdba@dm3 ~]$ dmfldr userid=sysdba/SYSDBA control=\'/home/dmdba/test.ctl\' lob_directory=\'/home/dmdba\' mode=\'out\' log=\'/home/dmdba/dmfldr_test.log\'

dmfldr V7.6.0.171-Build(2019.07.02-109059)ENT

2 rows is load out

总共导出 2 行数据

用时:199.145(ms)

[dmdba@dm3 ~]$

3.2.1.5 验证

[dmdba@dm3 ~]$ cat test.txt

1|dmfldr.lob:0:5 dmfldr.lob:5:7

2|dmfldr.lob:12:5 dmfldr.lob:17:7

[dmdba@dm3 ~]$

[dmdba@dm3 ~]$ ls

dmfldr_test.log test.ctl 公共的 视频 文档 音乐 dmfldr.lob test.txt 模板 图片 下载 桌面

[dmdba@dm3 ~]$

在这个例子中,指定了 LOB_DIRECTORY,而没有指定 LOB_FILE_NAME,导出的大字段数据文件将存放在 LOB_DIRECTORY 指定的/opt/data 目录,文件名为dmfldr.lob。

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

当 MODE 为 IN 且 DIRECT 为 TRUE 时,此时数据载入若涉及到大字段对象,需要用户指定大字段数据文件。若 CLIENT_LOB 为 TRUE,LOB_DIRECTORY 应指定大字段数据文件所在的客户端本地目录;若 CLIENT_LOB 为 FALSE,用户必须先把相关文件传送到 DM服务器所在主库,然后使用 LOB_DIRECTORY 指明存放目录

大字段数据文件在数据文件中指定,可以是任意格式的文件。在数据文件中,大字段以"文件名:起始偏移:长度"的形式记录在数据文件中。指定的文件名无效时,dmfldr 会报错,装载失败。对于 CLOB 类型字段,当指定的偏移、长度范围内带有不完整字符时,dmfldr 将装载失败。

3.2.2.1 创建测试表

SQL> drop table test;

操作已执行

已用时间: 29.165(毫秒). 执行号:1174.

SQL>

SQL> create table test(c1 int,c2 blob,c3 clob);

操作已执行

已用时间: 21.497(毫秒). 执行号:1175.

SQL>

3.2.2.2 创建源数据文件test.txt

[dmdba@dm3 ~]$ cat /home/dmdba/test.txt

1|testblob.txt:0:1|testclob.txt:0:1

2|testblob.txt:1:2|testclob.txt:1:2

3|testblob.txt:2:3|testclob.txt:2:3

[dmdba@dm3 ~]$

其中testblob.txt、testclob.txt 为文本文件,长度大于 3 字节,存放路径

为/home/dmdba。

3.2.2.3 创建控制文件test.ctl

[dmdba@dm3 ~]$ cat /home/dmdba/test.ctl

LOAD DATA

INFILE '/home/dmdba/test.txt'

INTO TABLE test

FIELDS '|'

(

c1,

c2,

c3

)

[dmdba@dm3 ~]$

3.2.2.4 使用 dmfldr 进行数据载入

[dmdba@dm3 ~]$ dmfldr userid=sysdba/SYSDBA control=\'/home/dmdba/test.ctl\' lob_directory=\'/home/dmdba\' log=\'/home/dmdba/dmfldr_test.log\'

dmfldr V7.6.0.171-Build(2019.07.02-109059)ENT

dmfldr:

Copyright (c) 2011, 2015, Dameng. All rights reserved.

控制文件:

加载行数:全部

每次提交服务器行数:50000

跳过行数:0

允许错误数:100

是否直接加载:Yes

是否插入自增列:No

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

字符集:GBK

数据文件共1个:

/home/dmdba/test.txt

错误文件:fldr.bad

目标表:TEST

列名 包装数据类型 终止

C1 CHARACTER |

C2 CHARACTER |

C3 CHARACTER |

行缓冲区数量: 2

任务线程数量: 1

3行记录已提交

目标表:TEST

3 行加载成功。

由于数据格式错误,0行 丢弃。

由于数据错误,0行 没有加载。

跳过的逻辑记录总数:0

读取的逻辑记录总数:3

拒绝的逻辑记录总数:3

用时:37.195(ms)

[dmdba@dm3 ~]$

从日志输出,告诉我们成功导入3行.

3.2.2.5 查询验证

SQL> select * from test;

行号 c1 c2 c3

---------- ----------- ----------- ----------

1 1 1 2019-09-22

2 2 2 2019-09-22

3 3 3 2019-09-22

已用时间: 10.354(毫秒). 执行号:1178.

SQL>

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

当 MODE 为 IN 且 DIRECT 为 FALSE 时,数据文件中大字段列数据即字段内容。BLOB_TYPE 参数指定 BLOB 列内容为十六进制或者字符串:

l BLOB_TYPE 为 HEX_CHAR 时,数据文件中 BLOB 列当作为十六进制内容;

l BLOB_TYPE 为 HEX 时,数据文件中 BLOB 列为字符串形式内容,导入后会转换为十六进制。

BLOB_TYPE 参数只对 DIRECT 为 FALSE 时有效,默认为 HEX_CHAR。

3.2.3.1 创建测试表

SQL> drop table test;

操作已执行

已用时间: 29.165(毫秒). 执行号:1174.

SQL>

SQL> create table test(c1 int,c2 blob,c3 clob);

操作已执行

已用时间: 21.497(毫秒). 执行号:1175.

SQL>

3.2.3.2 创建源数据文件test.txt

[dmdba@dm3 ~]$ cat /home/dmdba/test.txt

1|0x12d3c8a7|abcdefg

2|0x12a4cbac|hijlkmn

3|0x22d3c8b3|adefhjd

[dmdba@dm3 ~]$

3.2.3.3 创建控制文件test.ctl

[dmdba@dm3 ~]$ cat /home/dmdba/test.ctl

LOAD DATA

INFILE '/home/dmdba/test.txt'

INTO TABLE test

FIELDS '|'

(

c1,

c2,

c3

)

[dmdba@dm3 ~]$

3.2.3.4 使用 dmfldr 进行数据载入

[dmdba@dm3 ~]$ dmfldr userid=sysdba/SYSDBA control=\'/home/dmdba/test.ctl\' direct=false blob_type=\'hex_char\' log=\'/home/dmdba/dmfldr_test.log\'

dmfldr V7.6.0.171-Build(2019.07.02-109059)ENT

dmfldr:

Copyright (c) 2011, 2015, Dameng. All rights reserved.

控制文件:

加载行数:全部

每次提交服务器行数:50000

跳过行数:0

允许错误数:100

是否直接加载:No

是否插入自增列:No

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

字符集:GBK

数据文件共1个:

/home/dmdba/test.txt

错误文件:fldr.bad

目标表:TEST

列名 包装数据类型 终止

C1 CHARACTER |

C2 CHARACTER |

C3 CHARACTER |

3 rows processed.

目标表:TEST

3 行加载成功。

由于数据格式错误,0行 丢弃。

由于数据错误,0行 没有加载。

跳过的逻辑记录总数:0

读取的逻辑记录总数:3

拒绝的逻辑记录总数:0

用时:1364.220(ms)

从日志输出,告诉我们成功导入3行.

3.2.3.5 查询验证

SQL> select * from test;

行号 c1 c2 c3

---------- ----------- ---------- -------

1 1 0x12D3C8A7 abcdefg

2 2 0x12A4CBAC hijlkmn

3 3 0x22D3C8B3 adefhjd

已用时间: 25.011(毫秒). 执行号:1198.

SQL>

对于blog_type为hex的情形,读者可以自行测试,方法与上面相同。

四 特殊应用

4.1 文本文件第一行为列名

SKIP 参数用来设置跳过数据文件起始的逻辑行数,int数值。默认的跳过起始行数为0 行。

继续使用之前的test.txt文件,修改文件如下:

[dmdba@dm3 ~]$ cat /home/dmdba/test.txt

col1 col2 col3

1|1 2019-09-22

2|2 2019-09-22

3|3 2019-09-22

[dmdba@dm3 ~]$

对于此类文件的导入,需要设置跳过文本文件的第一行,设置方法有两种:

1、通过控制文件

创建控制文件test.ctl:

[dmdba@dm3 ~]$ cat /home/dmdba/test.ctl

OPTIONS

(

SKIP = 1

)

LOAD DATA

INFILE '/home/dmdba/test.txt'

INTO TABLE test

FIELDS '|'

(

c1,

c2 TERMINATED BY ' ',

c3 DATE FORMAT 'yyyy-mm-dd'

)

[dmdba@dm3 ~]$

2、在导入时直接指定skip参数

dmfldr userid=sysdba/SYSDBA control=\'/home/dmdba/test.ctl\' log=\'/home/dmdba/dmfldr_test.log\' skip=1

我们这里选择第一种方式:

执行数据导入:

[dmdba@dm3 ~]$ dmfldr userid=sysdba/SYSDBA control=\'/home/dmdba/test.ctl\' log=\'/home/dmdba/dmfldr_test.log\'

dmfldr V7.6.0.171-Build(2019.07.02-109059)ENT

dmfldr:

Copyright (c) 2011, 2015, Dameng. All rights reserved.

控制文件:

加载行数:全部

每次提交服务器行数:50000

跳过行数:0

允许错误数:100

是否直接加载:Yes

是否插入自增列:No

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

字符集:GBK

数据文件共1个:

/home/dmdba/test.txt

错误文件:fldr.bad

目标表:TEST

列名 包装数据类型 终止

C1 CHARACTER |

C2 CHARACTER WHT

C3 yyyy-mm-dd |

行缓冲区数量: 2

任务线程数量: 1

3行记录已提交

目标表:TEST

3 行加载成功。

由于数据格式错误,0行 丢弃。

由于数据错误,0行 没有加载。

跳过的逻辑记录总数:0

读取的逻辑记录总数:3

拒绝的逻辑记录总数:0

用时:10.231(ms)

从日志输出,告诉我们成功导入3行.

验证:

SQL> select * from test;

行号 c1 c2 c3

---------- ----------- ----------- ----------

1 1 1 2019-09-22

2 2 2 2019-09-22

3 3 3 2019-09-22

已用时间: 0.721(毫秒). 执行号:1203.

SQL>

4.2 最后一行格式不正确而无法导入

dmfldr 使用的数据文件都是文本格式的,其中的列值都是以字符串的方式保存在数据文件中。要想将这些数据载入数据库表中,需要将字符串转换成数据库表各列对应的数据类型。dmfldr 支持所有 DM 数据库支持的列定义类型,包括字符串、数值、时间日期、时间

日期间隔、大字段类型等。

若数据文件的编码方式与 DM 数据库服务器的编码方式不一样,dmfldr 还需要进行字符编码的转换。dmfldr 支持 UTF8 和 GBK 编码之间的相互转换。

数据类型和编码转换工作由 dmfldr 客户端进行,在这个过程中如果出现错误,dmfldr 会跳过该行继续后面的工作,并记录错误行到 BADFILE 指定的文件。

4.2.1 创建测试表

SQL> drop table test;

操作已执行

已用时间: 29.165(毫秒). 执行号:1174.

SQL>

SQL> create table test(c1 int,c2 int,c3 date);

操作已执行

已用时间: 21.497(毫秒). 执行号:1175.

SQL>

4.2.2 创建源数据文件test.txt

[dmdba@dm3 ~]$ cat /home/dmdba/test.txt

1|1 2019-09-22

2|2 2019-09-22

3|3 2019-09-22

4|4 yyyy-mm-dd

[dmdba@dm3 ~]$

4.2.3 创建控制文件test.ctl

[dmdba@dm3 ~]$ cat /home/dmdba/test.ctl

LOAD DATA

INFILE '/home/dmdba/test.txt'

INTO TABLE test

FIELDS '|'

(

c1,

c2 TERMINATED BY ' ',

c3 DATE FORMAT 'yyyy-mm-dd'

)

[dmdba@dm3 ~]$

4.2.4 使用 dmfldr 进行数据载入

[dmdba@dm3 ~]$ dmfldr userid=sysdba/SYSDBA control=\'/home/dmdba/test.ctl\' log=\'/home/dmdba/dmfldr_test.log\' badfile=\'/home/dmdba/test.bad\'

dmfldr V7.6.0.171-Build(2019.07.02-109059)ENT

dmfldr:

Copyright (c) 2011, 2015, Dameng. All rights reserved.

控制文件:

加载行数:全部

每次提交服务器行数:50000

跳过行数:1

允许错误数:100

是否直接加载:Yes

是否插入自增列:No

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

字符集:GBK

数据文件共1个:

/home/dmdba/test.txt

错误文件:/home/dmdba/test.bad

目标表:TEST

列名 包装数据类型 终止

C1 CHARACTER |

C2 CHARACTER WHT

C3 yyyy-mm-dd |

行缓冲区数量: 2

任务线程数量: 1

2行记录已提交

目标表:TEST

2 行加载成功。

由于数据格式错误,0行 丢弃。

由于数据错误,1行 没有加载。

跳过的逻辑记录总数:1

读取的逻辑记录总数:3

拒绝的逻辑记录总数:1

用时:18.103(ms)

[dmdba@dm3 ~]$

从日志输出,告诉我们成功导入3行,跳过1行.

4.2.5 查询验证

SQL> select * from test;

行号 c1 c2 c3

---------- ----------- ---------

数据 文件 字符 参数 错误 字段 字符串 类型 控制 格式 逻辑 总数 用户 服务器 服务 索引 装载 成功 目录 目标 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技金融数据 互联网科技公司怎么样 齐家互联网科技 碳银互联网科技 凡科互联网科技 无线互联网科技 火传媒上海互联网科技 多迪互联网科技有限公司 受益于互联网科技的高速发展 青岛科技大学互联网大赛研究生 深圳育鹏互联网科技有限公司招聘 南通创西澳互联网科技有限公司 梅州GM互联网络科技有限公司 皮皮虾互联网科技有限公司 上海乐五互联网科技有限公司 长沙渺峰互联网科技有限公司 美国五大互联网科技公司市值多少 科技互联网公司两年变化 互联网科技品牌 重庆科技产业互联网有哪些 科技创新与互联网经济 互联网金融与金融科技 紫鲸互联网科技 滨湖区互联网智能科技产品供应 互联网科技公司招聘 字节跳动和互联网科技 河南猎农互联网科技有限公司 坤平互联网科技 浙南科技城互联网大厦招聘 互联网科技对化妆品行业
0