注册
初识达梦(十):快速装载工具
技术分享/ 文章详情 /

初识达梦(十):快速装载工具

刘刘 2025/12/19 147 0 0

每个数据库都有自己的配套工具,可以把自己的数据库里的内容轻松的导出到文本,或者文本内容轻松加载到库中。达梦也有类似的工具。本章及我们主要讲dmfldr。具体的快速装载工具大家可以移步官网快速装载工具介绍

大致的实现流程如下图:
image.png

从上图可以看到,dmfldr对于用户来讲,接触到的最多的就是控制文件、数据文件、日志文件和错误文件四部分。所以当我们使用它时,就需要根据数据文件的构成,配置好控制文件。

eg1:
---创建测试表 SQL> CREATE TABLE TEST1(C1 INT,C2 INT); 操作已执行 已用时间: 10.648(毫秒). 执行号:603. SQL> desc test1; 行号 name type$ nullable ---------- ---- ------- -------- 1 C1 INTEGER Y 2 C2 INTEGER Y 已用时间: 12.178(毫秒). 执行号:604. ---准备测试数据及控制文件 $ cat test.dat 1,2 2,3 3,2 4,8 9,1 $ cat test.ctl LOAD DATA INFILE './test.dat' INTO TABLE test1 when c1 = 3 ---恰恰是我们的where条件,但是我们明明是int,为啥会报错呢? ( c1 position(1:1), c2 position(3:3) ) $ ~/dmdbms/bin/dmfldr SYSDBA/Dameng123 control=\'./test.ctl\' data=\'./test.dat\' dmfldr V8 控制文件语法分析出错,第4行: ---注意报错的行数,就是控制文件的第四行 3 目标表: load failed. 失败原因: 0 行加载成功。 0 行由于数据错误没有加载。 0 行由于数据格式错误被丢弃。 跳过的逻辑记录总数: 0 读取的逻辑记录总数: 0 拒绝的逻辑记录总数: 0 0.000(ms)已使用 $ cat test.ctl LOAD DATA INFILE './test.dat' INTO TABLE test1 when c1 = '3' ----where 条件换成字符验证 ( c1 position(1:1), c2 position(3:3) ) $ ~/dmdbms/bin/dmfldr SYSDBA/Dameng123 control=\'./test.ctl\' data=\'./test.dat\' dmfldr V8 控制文件: 加载行数: 全部 每次提交服务器行数: 50000 跳过行数: 0 允许错误数: 100 是否直接加载: Yes 是否插入自增列: No 数据是否已按照聚集索引排序: No 字符集: UTF-8 数据文件共1个: ./test.dat 错误文件: fldr.bad 目标表: TEST1 列名 包装数据类型 终止 C1 CHARACTER | C2 CHARACTER | 行缓冲区数量: 2 任务线程数量: 1 1 行记录已提交 目标表: TEST1 load success. ---导入成功 1 行加载成功。 0 行由于数据错误没有加载。 0 行由于数据格式错误被丢弃。 跳过的逻辑记录总数: 0 读取的逻辑记录总数: 5 拒绝的逻辑记录总数: 0 5.769(ms)已使用

注意点 条件中,不论是什么数据类型,在控制文件中,一切按照字符对应即可。

eg2:
SQL> CREATE TABLE TEST(C1 INT,C2 INT,C3 DATE); 操作已执行 已用时间: 5.259(毫秒). 执行号:605. SQL> SQL> commit; 操作已执行 已用时间: 0.267(毫秒). 执行号:606. SQL> desc test; 行号 name type$ nullable ---------- ---- ------- -------- 1 C1 INTEGER Y 2 C2 INTEGER Y 3 C3 DATE Y 已用时间: 8.772(毫秒). 执行号:607. $ cat test.dat 1,2|2024-11-06 12:23:45 2,3|2025-12-01 3,2|2023-10-23 4,8|2023-10-23 9,1|2022-10-10 $ cat test.ctl LOAD DATA INFILE './test.dat' INTO TABLE test fields '|' ( c1 TERMINATED BY ',', c2, c3 DATE FORMAT 'yyyy-mm-dd' ) ~/dmdbms/bin/dmfldr SYSDBA/Dameng123 control=\'./test.ctl\' data=\'./test.dat\' dmfldr V8 控制文件: 加载行数: 全部 每次提交服务器行数: 50000 跳过行数: 0 允许错误数: 100 是否直接加载: Yes 是否插入自增列: No 数据是否已按照聚集索引排序: No 字符集: UTF-8 数据文件共1个: ./test.dat 错误文件: fldr.bad 目标表: TEST 列名 包装数据类型 终止 C1 CHARACTER , C2 CHARACTER | C3 yyyy-mm-dd | 行缓冲区数量: 2 任务线程数量: 1 5 行记录已提交 目标表: TEST load success. 5 行加载成功。 0 行由于数据错误没有加载。 0 行由于数据格式错误被丢弃。 跳过的逻辑记录总数: 0 读取的逻辑记录总数: 5 拒绝的逻辑记录总数: 0 2.024(ms)已使用

注意点:可以看到每列的分隔符可以不同,时间格式可以通过指定格式来导入数据

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服