注册
达梦数据库 DMFLDR 导出与导入实战:普通表、大字段与自定义分隔符全解析
专栏/技术分享/ 文章详情 /

达梦数据库 DMFLDR 导出与导入实战:普通表、大字段与自定义分隔符全解析

xixi 2026/09/18 256 0 0
摘要

1. 概述

DMFLDR(DM Fast Loader)是达梦数据库提供的高性能快速数据装载工具,支持将文本数据快速载入数据库,或将数据库中的数据按指定格式载出到文本文件。在日常运维和开发中,数据迁移、批量导入导出、异构系统数据交换等场景频繁需要高效的数据装载能力,DMFLDR 正是满足这类需求的核心工具。

本次学习围绕三个典型场景展开实践:

  • 普通表的导出与导入,掌握控制文件编写与基本装载流程;
  • 含大字段(BLOB/CLOB)的导出与导入,熟悉大字段数据的特殊处理方式;
  • 自定义分隔符的导出与导入,学习通过参数定制数据格式以满足不同数据源对接需求。

通过上述实践,系统性地掌握 DMFLDR 的核心功能,为后续实际工作中的数据迁移与批量处理任务提供技术储备。

2. 操作环境

项目 配置
操作系统 CentOS Linux 7 x86_64
CPU x86_64
内存 4GB
磁盘 40GB
处理器 2*2
数据库版本 DM8 V8(dm8_20260710_x86_CentOS7_64.zip)

3. 普通表的导出与导入

3.1 准备工作

1)创建实验目录

# 切换到达梦安装用户 su - dmdba # 创建实验目录 mkdir -p /home/dmdba/dmfldr_demo cd /home/dmdba/dmfldr_demo

2)创建测试表并插入数据

-- 创建普通表 CREATE TABLE t_normal ( id INT, name VARCHAR(50), age INT, hire_date DATE ); -- 插入 5 条测试数据 INSERT INTO t_normal VALUES (1, '张三', 25, '2020-01-01'); INSERT INTO t_normal VALUES (2, '李四', 30, '2019-05-15'); INSERT INTO t_normal VALUES (3, '王五', 28, '2021-07-20'); INSERT INTO t_normal VALUES (4, '赵六', 35, '2018-12-10'); INSERT INTO t_normal VALUES (5, '孙七', 22, '2022-03-08'); COMMIT; -- 确认数据 SELECT * FROM t_normal; EXIT;

image.png

3.2 编写控制文件

cd /home/dmdba/dmfldr_demo vi t_normal.ctl
OPTIONS (
    SKIP = 0
    ROWS = 50000
    DIRECT = TRUE
    INDEX_OPTION = 1
)
LOAD DATA
INFILE '/home/dmdba/dmfldr_demo/t_normal.txt'
INTO TABLE t_normal
FIELDS '|'
( id, name, age, hire_date )

3.3 导出数据

cd /home/dmdba/dmdbms/bin ./dmfldr userid=SYSDBA/Dameng_123@localhost:5236 control=\'/home/dmdba/dmfldr_demo/t_normal.ctl\' mode=\'out\'

导出后查看生成的数据文件:

cat /home/dmdba/dmfldr_demo/t_normal.txt

3.4 清空目标表并导入

TRUNCATE TABLE t_normal;
./dmfldr userid=SYSDBA/Dameng_123@localhost:5236 control=\'/home/dmdba/dmfldr_demo/t_normal.ctl\' mode=\'in\'

3.5 验证导入结果

SELECT * FROM t_normal;

image.png

4. 含大字段(BLOB/CLOB)的导出与导入

4.1 创建大字段表并插入数据

CREATE TABLE t_lob ( id INT, clob_col CLOB, blob_col BLOB ); INSERT INTO t_lob VALUES (1, '这是一段CLOB文本', 0x48656C6C6F); INSERT INTO t_lob VALUES (2, '第二段数据', 0x576F726C64); COMMIT;

image.png

4.2 编写控制文件

vi /home/dmdba/dmfldr_demo/t_lob.ctl
OPTIONS (
    SKIP = 0
    ROWS = 50000
    DIRECT = TRUE
)
LOAD DATA
INFILE '/home/dmdba/dmfldr_demo/t_lob.txt'
INTO TABLE t_lob
FIELDS '|'
( id, clob_col, blob_col )

4.3 导出大字段数据

cd /home/dmdba/dmdbms/bin ./dmfldr userid=SYSDBA/Dameng_123@localhost:5236 control=\'/home/dmdba/dmfldr_demo/t_lob.ctl\' mode=\'out\' lob_directory=\'/home/dmdba/dmfldr_demo\' lob_file_name=\'my_lob.lob\'

4.4 创建新表用于导入

CREATE TABLE t_lob_in ( id INT, clob_col CLOB, blob_col BLOB ); EXIT;
cp /home/dmdba/dmfldr_demo/t_lob.ctl /home/dmdba/dmfldr_demo/t_lob_in.ctl vi /home/dmdba/dmfldr_demo/t_lob_in.ctl

将 INTO TABLE t_lob 改为 INTO TABLE t_lob_in,其他不变。

OPTIONS (
    SKIP = 0
    ROWS = 50000
    DIRECT = TRUE
)
LOAD DATA
INFILE '/home/dmdba/dmfldr_demo/t_lob.txt'
INTO TABLE t_lob_in
FIELDS '|'
( id, clob_col, blob_col )

4.5 导入大字段数据

./dmfldr userid=SYSDBA/Dameng_123@localhost:5236 control=\'/home/dmdba/dmfldr_demo/t_lob_in.ctl\' mode=\'in\' lob_directory=\'/home/dmdba/dmfldr_demo\' lob_file_name=\'my_lob.lob\'

4.6 验证导入结果

SELECT * FROM t_lob_in;

image.png

5. 自定义分隔符的导出与导入

如果 t_normal 已存在且有数据,可直接使用。

5.1 编写控制文件(指定分隔符)

vi /home/dmdba/dmfldr_demo/t_normal_comma.ctl
cat > /home/dmdba/dmfldr_demo/t_normal_comma.ctl <<'EOF' OPTIONS ( SKIP = 0 ROWS = 50000 DIRECT = TRUE FIELD_SEPERATOR = ',' ROW_SEPERATOR = '\n' ) LOAD DATA INFILE '/home/dmdba/dmfldr_demo/t_normal_comma.txt' INTO TABLE t_normal ( id, name, age, hire_date ) EOF

说明:这里省略了 FIELDS 子句,因为已在 OPTIONS 中全局指定分隔符。字段列表顺序需与表定义一致。

5.2 执行导出(使用自定义分隔符)

./dmfldr userid=SYSDBA/Dameng_123@localhost:5236 control=\'/home/dmdba/dmfldr_demo/t_normal_comma.ctl\' mode=\'out\'

导出后,查看 /home/dmdba/dmfldr_demo/t_normal_comma.txt 内容。

5.3 清空原表(模拟导入目标为空)

TRUNCATE TABLE t_normal;

5.4 执行导入(使用相同控制文件)

./dmfldr userid=SYSDBA/Dameng_123@localhost:5236 control=\'/home/dmdba/dmfldr_demo/t_normal_comma.ctl\' mode=\'in\'

5.5 验证导入结果

SELECT * FROM t_normal;

image.png

6. 总结

通过本次学习,完成了普通表、含大字段表以及自定义分隔符三种场景的导出导入实践。

  • 普通表操作中掌握了控制文件编写规范——OPTIONS 块参数以换行分隔、不使用逗号,以及 mode 参数控制导入导出方向。
  • 大字段操作中理解了数据存储机制,导出的 CLOB/BLOB 内容单独存放于 LOB 文件,普通数据文件仅保存引用信息,通过 LOB_DIRECTORY 和 LOB_FILE_NAME 参数配合完成完整迁移。
  • 自定义分隔符操作中学会了在 OPTIONS 中使用 FIELD_SEPERATOR 和 ROW_SEPERATOR 指定列分隔符与行分隔符,支持十六进制方式指定不可见字符,满足多样化格式对接需求。

实践中曾遇参数解析报错,经排查确认在当前环境下 control 参数需使用 \' 转义单引号格式。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服