DMFLDR(DM Fast Loader)是达梦数据库提供的高性能快速数据装载工具,支持将文本数据快速载入数据库,或将数据库中的数据按指定格式载出到文本文件。在日常运维和开发中,数据迁移、批量导入导出、异构系统数据交换等场景频繁需要高效的数据装载能力,DMFLDR 正是满足这类需求的核心工具。
本次学习围绕三个典型场景展开实践:
通过上述实践,系统性地掌握 DMFLDR 的核心功能,为后续实际工作中的数据迁移与批量处理任务提供技术储备。
| 项目 | 配置 |
|---|---|
| 操作系统 | CentOS Linux 7 x86_64 |
| CPU | x86_64 |
| 内存 | 4GB |
| 磁盘 | 40GB |
| 处理器 | 2*2 |
| 数据库版本 | DM8 V8(dm8_20260710_x86_CentOS7_64.zip) |
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;
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 )
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
TRUNCATE TABLE t_normal;
./dmfldr userid=SYSDBA/Dameng_123@localhost:5236 control=\'/home/dmdba/dmfldr_demo/t_normal.ctl\' mode=\'in\'
SELECT * FROM t_normal;
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;
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 )
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\'
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 )
./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\'
SELECT * FROM t_lob_in;
如果 t_normal 已存在且有数据,可直接使用。
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中全局指定分隔符。字段列表顺序需与表定义一致。
./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 内容。
TRUNCATE TABLE t_normal;
./dmfldr userid=SYSDBA/Dameng_123@localhost:5236 control=\'/home/dmdba/dmfldr_demo/t_normal_comma.ctl\' mode=\'in\'
SELECT * FROM t_normal;
通过本次学习,完成了普通表、含大字段表以及自定义分隔符三种场景的导出导入实践。
OPTIONS 块参数以换行分隔、不使用逗号,以及 mode 参数控制导入导出方向。LOB_DIRECTORY 和 LOB_FILE_NAME 参数配合完成完整迁移。OPTIONS 中使用 FIELD_SEPERATOR 和 ROW_SEPERATOR 指定列分隔符与行分隔符,支持十六进制方式指定不可见字符,满足多样化格式对接需求。实践中曾遇参数解析报错,经排查确认在当前环境下 control 参数需使用 \' 转义单引号格式。
文章
阅读量
获赞
