每个数据库都有自己的配套工具,可以把自己的数据库里的内容轻松的导出到文本,或者文本内容轻松加载到库中。达梦也有类似的工具。本章及我们主要讲dmfldr。具体的快速装载工具大家可以移步官网快速装载工具介绍。
大致的实现流程如下图:
从上图可以看到,dmfldr对于用户来讲,接触到的最多的就是控制文件、数据文件、日志文件和错误文件四部分。所以当我们使用它时,就需要根据数据文件的构成,配置好控制文件。
---创建测试表
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)已使用
注意点 条件中,不论是什么数据类型,在控制文件中,一切按照字符对应即可。
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)已使用
注意点:可以看到每列的分隔符可以不同,时间格式可以通过指定格式来导入数据
文章
阅读量
获赞
