栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

达梦数据库DM8之数据快速加载工具dmfldr使用方法

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

达梦数据库DM8之数据快速加载工具dmfldr使用方法

达梦数据库DM8之数据快速加载工具dmfldr使用方法

1.概述
1.1 功能介绍
    dmfldr(DM Fast Loader)是 DM 提供的快速数据装载命令行工具。用户通过使用 dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。
1.2 系统结构
    dmfldr 的系统结构如图所示。

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

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

2. dmfldr命令详解
2.1 dmfldr命令参数
安装好 DM 数据库管理系统后,在安装目录的“bin/”子目录下可找到 dmfldr 执行文件。
[dmdba@dmdb01 ~]$ /dm8/dmdbms/bin/dmfldr help
格式: ./dmfldr   KEYWORD=value
例程: ./dmfldr   SYSDBA/SYSDBA CONTROL='/opt/data/fldr.ctl'

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

字符串类型参数必须以引号封闭
关键字              说明(默认值)
--------------------------------------------------------------------------------
USERID              用户名/口令, 格式:{[/] | /}[@][

2.2 dmfldr使用样例:
/dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240  control='/dm8/dmdbms/data/dmfldr/fldr.ctl'  log='/dm8/dmdbms/data/dmfldr/fldr.log' badfile='/dm8/dmdbms/data/dmfldr/fldr.bad'  errors=999 load=10000 rows=500 character_code= ’SINGLE_BYTE ’

2.3 dmfldr控制文件样例
例:一个 dmfldr 控制文件的例子
OPTIONS
(
SKIP = 0    --跳过数据文件起始的逻辑行数,整型数值。默认的跳过起始行数为 0 行
ROWS = 50000    --每次提交的行数,整形数值。默认的提交行数为 50000 行
DIRECT = TRUE    --快速的载入模式
INDEX_OPTION = 2    --代表服务器在快速装载过程中不刷新二级索引数据,只在装载完成时重建所有二级索引;
)
LOAD DATA 
INFILE '/opt/data/test1.txt' STR X '0A'
BADFILE '/opt/data/test1.bad'
INTO TABLE test1
FIELDS '|'              ---列分隔符,用户应当指定 FIELDS 或者 coldef_option 中的至少一种
(
F1,
F2 DATE FORMAT 'YYYY-MM-DD',
F3 NULL,
F4 TERMINATED BY WHITESPACE ENCLOSE BY '(',
F5 CONSTANT "test",
F6 "trim()"
)
LOAD DATA 
INFILE '/opt/data/test2.txt' STR X '0A'
BADFILE '/opt/data/test2.bad'
INTO TABLE test2
FIELDS '|'
(
C1 TERMINATED BY ' ',
C2,
C3 "sysdate"
)

3. dmfldr命令实战测试
--测试1:使用 DATA参数指定数据文件
也可以使用 DATA 参数指定 dmfldr 的数据文件,数据文件路径的优先选择顺序为先控制文件,后参数选项。如果控制文件中数据文件路径指定为‘*’,在命令行通过 DATA参数指定数据文件路径,DATA 所指定的文件路径会替换‘*’。
1) 建表 TEST1
SQL> DROp TABLE ww.TEST1;
CREATE TABLE ww.TEST1(C1 INT,C2 INT,C3 DATE);操作已执行
已用时间: 39.348(毫秒). 执行号:1701.
SQL> 
操作已执行
已用时间: 3.974(毫秒). 执行号:1702.
SQL> 
2) 编辑数据文件 test1.txt,存放路径为/dm8/dmdbms/data/dmfldr/test1.txt,文件内容如下
1 1|2022-04-26
2 2|2022-04-25
3 3|2022-04-24
3) 编辑控制文件 test.ctl,存放路径为/dm8/dmdbms/data/dmfldr/test1.ctl,内容如下:
LOAD DATA
INFILE *
INTO TABLE ww.test1
FIELDS '|'
(
C1 TERMINATED BY ' ',
C2,
C3 DATE FORMAT 'yyyy-mm-dd'
)
4) 使用 dmfldr 进行数据载入
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/test1.ctl' data='/dm8/dmdbms/data/dmfldr/test1.txt'
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:Yes
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/test1.txt
错误文件:fldr.bad
目标表:WW.TEST1
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            WHT
C2                                                                                                                               CHARACTER            |
C3                                                                                                                               yyyy-mm-dd           |
行缓冲区数量: 2
任务线程数量: 2
3行记录已提交
目标表:WW.TEST1
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0
用时:6.681(ms)
5) 检查数据是否导入成功
[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 0.715(ms)
disql V8
SQL> select * from ww.test1;
行号     C1          C2          C3        
---------- ----------- ----------- ----------
1          1           1           2022-04-26
2          2           2           2022-04-25
3          3           3           2022-04-24
已用时间: 2.364(毫秒). 执行号:1900.
SQL> 

--测试2:数据转换与错误数据文件
1) 建表 TEST2
SQL> DROp TABLE WW.TEST2;
CREATE TABLE WW.TEST2(C1 INT,C2 INT,C3 DATE);DROP TABLE WW.TEST2;
已用时间: 0.296(毫秒). 执行号:0.
SQL> 
操作已执行
已用时间: 14.244(毫秒). 执行号:1901.
SQL> 
2) 编辑数据文件 test2.txt,存放路径为/dm8/dmdbms/data/dmfldr/test2.txt,文件内容如下
1 1|2022-04-26
2 2|2022-04-25
3 3|2022-04-24
44|aaaa-bbb-ccc
3) 编辑控制文件 test2.ctl,存放路径为/dm8/dmdbms/data/dmfldr/test2.ctl,内容如下:
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/test2.txt'
INTO TABLE WW.test2
FIELDS '|'
(
C1 TERMINATED BY ' ',
C2,
C3 DATE FORMAT 'yyyy-mm-dd'
)
4) 使用 dmfldr 进行数据载入
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/test2.ctl' badfile='/dm8/dmdbms/data/dmfldr/test2.bad'
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:Yes
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/test2.txt
错误文件:/dm8/dmdbms/data/dmfldr/test2.bad
目标表:WW.TEST2
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            WHT
C2                                                                                                                               CHARACTER            |
C3                                                                                                                               yyyy-mm-dd           |
行缓冲区数量: 2
任务线程数量: 2
数据文件少列
3行记录已提交
目标表:WW.TEST2
3 行加载成功。
由于数据格式错误,1行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:4
拒绝的逻辑记录总数:0
用时:2.423(ms)
[dmdba@dmdb01 dmfldr]$ 
5) 查看错误数据文件 test2.bad,其内容如下
[dmdba@dmdb01 dmfldr]$ cat /dm8/dmdbms/data/dmfldr/test2.bad
dmfldr: 2022-04-27 13:04:54 WW->TEST2 44|aaaa-bbb-ccc
SQL> select * from ww.test2;
行号     C1          C2          C3        
---------- ----------- ----------- ----------
1          1           1           2022-04-26
2          2           2           2022-04-25
3          3           3           2022-04-24
已用时间: 2.364(毫秒). 执行号:1900.
SQL> 

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

1) 建表 TEST3
SQL> DROp TABLE WW.TEST3;
CREATE TABLE WW.TEST3(C1 INT,C2 BLOB,C3 CLOB);DROP TABLE WW.TEST3;
已用时间: 0.535(毫秒). 执行号:0.
SQL> 
操作已执行
已用时间: 5.187(毫秒). 执行号:2100.
SQL> 
2) 插入数据
SQL> INSERT INTO WW.TEST3 VALUES(1,0xAB121032DE,'abcdefg');
DMSQL 过程已成功完成
已用时间: 0.801(毫秒). 执行号:2101.
SQL> INSERT INTO WW.TEST3 VALUES(2,0xAB121032DE,'abcdefg');
影响行数 1
已用时间: 0.423(毫秒). 执行号:2102.
SQL> COMMIT;
操作已执行
已用时间: 1.416(毫秒). 执行号:2103.
SQL> 
3) 编辑控制文件 test3.ctl,存放路径为/dm8/dmdbms/data/dmfldr/test3.ctl,内容如下:
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/test3.txt'
INTO TABLE ww.test3
FIELDS '|'
(
C1,
C2,
C3
)
4) 使用 dmfldr 进行导出数据
在这个例子中,指定了 LOB_DIRECTORY,而没有指定 LOB_FILE_NAME,导出的大字段数据文件将存放在 LOB_DIRECTORY 指定的/dm8/dmdbms/data/dmfldr 目录,文件名为dmfldr.lob。
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/test3.ctl' LOB_DIRECTORY='/dm8/dmdbms/data/dmfldr/' mode='out'
dmfldr V8
2 rows is load out
总共导出 2 行数据
用时:819.980(ms)
说明:默认生成dmfldr.lob的文件

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/test3.ctl' LOB_DIRECTORY='/dm8/dmdbms/data/dmfldr/' LOB_FILE_NAME='dmfldr3.lob' mode='out'
dmfldr V8
2 rows is load out
总共导出 2 行数据
用时:60.851(ms)
说明:也可以指定 LOB_FILE_NAME参数设置文件名称dmfldr3.lob
5) 检查 test3.txt 内容
[dmdba@dmdb01 dmfldr]$ cat test3.txt 
1|dmfldr.lob:0:5|dmfldr.lob:5:7
2|dmfldr.lob:12:5|dmfldr.lob:17:7
1|dmfldr3.lob:0:5|dmfldr3.lob:5:7
2|dmfldr3.lob:12:5|dmfldr3.lob:17:7
6) 检查生成的lob文件
[dmdba@dmdb01 dmfldr]$ ls -l dmfldr*
-rw-r--r-- 1 dmdba dinstall   24 Apr 27 13:21 dmfldr3.lob
-rw-r--r-- 1 dmdba dinstall   24 Apr 27 13:18 dmfldr.lob

--测试4:DIRECT 为 为 TRUE  时大字段数据的载入
1) 建表 TEST4
SQL> DROP TABLE WW.TEST4;
已用时间: 0.844(毫秒). 执行号:0.
SQL> CREATE TABLE WW.TEST4(C1 INT,C2 BLOB,C3 CLOB);
操作已执行
已用时间: 4.929(毫秒). 执行号:2500.
SQL> 
2) 编辑数据文件 test4.txt,存放路径为 DM 服务器所在主库的/dm8/dmdbms/data/dmfldr/test4.txt,文件内容如下
1|testblob.txt:0:10|testclob.txt:0:10
2|testblob.txt:10:20|testclob.txt:10:20
3|testblob.txt:20:30|testclob.txt:20:30
其中,testblob.txt、testclob.txt 为文本文件,长度大于 30 字节,存放路径为/dm8/dmdbms/data/dmfldr/。
[dmdba@dmdb01 dmfldr]$ cat testblob.txt 
1|testblobtestblobtestblobtestblob1|testblobtestblobtestblobtestblob1
2|testblobtestblobtestblobtestblob2|testblobtestblobtestblobtestblob2
3|testblobtestblobtestblobtestblob3|testblobtestblobtestblobtestblob3
[dmdba@dmdb01 dmfldr]$ cat testclob.txt 
1|testclobtestclobtestclobtestclob1|testclobtestclobtestclobtestclob1
2|testclobtestclobtestclobtestclob2|testclobtestclobtestclobtestclob2
3|testclobtestclobtestclobtestclob3|testclobtestclobtestclobtestclob3
[dmdba@dmdb01 dmfldr]$ 
3) 编辑控制文件 test4.ctl,存放路径为/dm8/dmdbms/data/dmfldr/test4.ctl,内容如下:
OPTIONS
(
SKIP = 0
DIRECT = TRUE
INDEX_OPTION = 2
)
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/test4.txt'
BADFILE '/dm8/dmdbms/data/dmfldr/test4.bad'
INTO TABLE ww.test4
FIELDS '|'
(
C1,
C2,
C3
)
4) 使用 dmfldr 进行导入数据
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/test4.ctl' LOB_DIRECTORY='/dm8/dmdbms/data/dmfldr/' LOG='/dm8/dmdbms/data/dmfldr/dmfldr_test4.log'
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:Yes
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/test4.txt
错误文件:/dm8/dmdbms/data/dmfldr/test4.bad
目标表:WW.TEST4
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            |
C3                                                                                                                               CHARACTER            |
行缓冲区数量: 2
任务线程数量: 2
3行记录已提交
目标表:WW.TEST4
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0
用时:3.716(ms)
5) 检查表内容
[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 0.773(ms)
disql V8
SQL> select * from ww.test4;
行号     C1          C2                                                             C3                            
---------- ----------- -------------------------------------------------------------- ------------------------------
1          1           0x317C74657374626C6F62                                         1|testclob
2          2           0x74657374626C6F6274657374626C6F6274657374                     testclobtestclobtest
3          3           0x7374626C6F6274657374626C6F62317C74657374626C6F6274657374626C stclobtestclob1|testclobtestcl
已用时间: 1.978(毫秒). 执行号:3600.
SQL> 

--测试5:DIRECT为 FALSE  时大字段数据的载入
当 MODE 为 IN 且 DIRECT 为 FALSE 时,数据文件中大字段列数据即字段内容。
BLOB_TYPE 参数指定 BLOB 列内容为十六进制或者字符串:
  BLOB_TYPE 为 HEX_CHAR 时,数据文件中 BLOB 列当作为十六进制内容;
  BLOB_TYPE 为 HEX 时,数据文件中 BLOB 列为字符串形式内容,导入后会转换为十六进制。
BLOB_TYPE 参数只对 DIRECT 为 FALSE 时有效,默认为 HEX_CHAR。
例 1:
1) 建表 TEST5
SQL> CREATE TABLE WW.TEST5(C1 INT,C2 BLOB,C3 CLOB);
操作已执行
已用时间: 8.982(毫秒). 执行号:3700.
SQL> 
2) 编辑数据文件 test5.txt,存放路径为/dm8/dmdbms/data/dmfldr/test5.txt,文件内容如下
1|0x12d3c8a7|abcdefg
2|0x12a4cbac|hijlkmn
3|0x22d3c8b3|adefhjd
3) 编辑控制文件 test5.ctl,存放路径为/dm8/dmdbms/data/dmfldr/test5.ctl,内容如下:
OPTIONS
(
SKIP = 0
DIRECT = FALSE
INDEX_OPTION = 2
)
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/test5.txt'
BADFILE '/dm8/dmdbms/data/dmfldr/test5.bad'
INTO TABLE ww.test5
FIELDS '|'
(
C1,
C2,
C3
)
4) 使用 dmfldr 进行导入数据,BLOB_TYPE 为 HEX_CHAR
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/test5.ctl' LOG='/dm8/dmdbms/data/dmfldr/dmfldr_test5.log' direct=false blob_type='hex_char'
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:No
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/test5.txt
错误文件:/dm8/dmdbms/data/dmfldr/test5.bad
目标表:WW.TEST5
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            |
C3                                                                                                                               CHARACTER            |
3 rows processed.
目标表:WW.TEST5
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0
用时:2.676(ms)
[dmdba@dmdb01 dmfldr]$ 
5) 查询表数据
[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 0.853(ms)
disql V8
SQL> select * from ww.test5;
行号     C1          C2         C3     
---------- ----------- ---------- -------
1          1           0x12D3C8A7 abcdefg
2          2           0x12A4CBAC hijlkmn
3          3           0x22D3C8B3 adefhjd
已用时间: 2.366(毫秒). 执行号:3900.
SQL> 

例 2:
步骤 1)、2)、3)同例 1
4) 使用 dmfldr 进行导入数据,BLOB_TYPE 为 HEX
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/test5.ctl' LOG='/dm8/dmdbms/data/dmfldr/dmfldr_test5_1.log' direct=false blob_type='HEX'
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:No
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/test5.txt
错误文件:/dm8/dmdbms/data/dmfldr/test5.bad
目标表:WW.TEST5
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            |
C3                                                                                                                               CHARACTER            |
3 rows processed.
目标表:WW.TEST5
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0
用时:2.353(ms)
5) 查询表数据
[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 1.096(ms)
disql V8
SQL> select * from ww.test5;     
行号     C1          C2                     C3     
---------- ----------- ---------------------- -------
1          1           0x30783132643363386137 abcdefg
2          2           0x30783132613463626163 hijlkmn
3          3           0x30783232643363386233 adefhjd
已用时间: 2.225(毫秒). 执行号:4100.
SQL> 

--测试6:自增列装载
​ 自增列是比较特殊的列,为了保证数据库中自增列列值的正确性,用户在进行数据载入时需要特别注意。
​ 当 DIRECT 参数为 FALSE 时, dmfldr 将把从数据文件中读取的自增列值作为目标值插入数据库表中,用户应当保证每一行的自增列的值符合自增列的规则,否则将造成数据混乱。
​ 当 DIRECT 参数为 TRUE 时, dmfldr 提供了 SET_IDENTITY 参数(默认为 FALSE)对数据载入时自增列的处理进行设置:
(1)如果指定 SET_IDENTITY 选项值为 TRUE,则 dmfldr 将把从数据文件中读取的自增列值作为目标值插入数据库表中,用户应当保证每一行的自增列的值符合自增列的规则,否则将造成数据混乱;
(2)如果 SET_IDENTITY 选项值设置为 FALSE,则 dmfldr 将忽略数据文件中对应自增列的值,服务器将根据自增列定义和表中已有数据自动生成自增列的值插入每一行的对应列。

例1:DIRECT=TRUE,SET_IDENTITY=FALSE
1)创建测试表
DROp TABLE ww.TEST6;
CREATE TABLE ww.TEST6(C1 INT IDENTITY(1,1),C2 VARCHAR);
INSERT INTO  ww.TEST6(C2) VALUES('AAA');
INSERT INTO  ww.TEST6(C2) VALUES('BBB');
COMMIT;

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 0.891(ms)
disql V8
SQL> CREATE TABLE ww.TEST6(C1 INT IDENTITY(1,1),C2 VARCHAR);
操作已执行
已用时间: 4.538(毫秒). 执行号:4200.
SQL> INSERT INTO  ww.TEST6(C2) VALUES('AAA');
INSERT INTO  ww.TEST6(C2) VALUES('BBB');
COMMIT;影响行数 1
已用时间: 0.601(毫秒). 执行号:4201.
SQL> 影响行数 1
已用时间: 0.169(毫秒). 执行号:4202.
SQL> 
操作已执行
已用时间: 0.915(毫秒). 执行号:4203.
SQL> 
---查询
SQL> select *from ww.TEST6;
行号     C1          C2 
---------- ----------- ---
1          1           AAA
2          2           BBB
已用时间: 1.071(毫秒). 执行号:4204.
SQL> 
2)编辑数据文件TEST6.txt,存放路径/dm8/dmdbms/data/dmfldr/,内容如下:
2|aaa
3|bbb
4|ccc
3)编辑控制文件TEST6.ctl,存放路径/dm8/dmdbms/data/dmfldr/,内容如下:
OPTIONS
(
SKIP = 0
ROWS = 50000
INDEX_OPTION = 2
DIRECT=TRUE
SET_IDENTITY=FALSE
)
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/TEST6.txt'
BADFILE '/dm8/dmdbms/data/dmfldr/TEST6.bad'
INTO TABLE ww.TEST6
FIELDS '|'
(C1,
C2
)
4)装载数据(DIRECT=TRUE SET_IDENTITY=FALSE)
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/TEST6.ctl' LOG='/dm8/dmdbms/data/dmfldr/dmfldr_TEST6.log' 
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:Yes
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/TEST6.txt
错误文件:/dm8/dmdbms/data/dmfldr/TEST6.bad
目标表:WW.TEST6
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            |
行缓冲区数量: 2
任务线程数量: 2
3行记录已提交
目标表:WW.TEST6
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0
用时:1.435(ms)
5)检查导入后表信息
[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 0.666(ms)
disql V8
SQL> select * from ww.TEST6;
行号     C1          C2 
---------- ----------- ---
1          1           AAA
2          2           BBB
3          3           aaa
4          4           bbb
5          5           ccc
已用时间: 1.263(毫秒). 执行号:4400.
SQL> 

例2:DIRECT=TRUE,SET_IDENTITY=TRUE
重复上面(1)(2)(3)步骤;
4)装载数据 DIRECT=TRUE SET_IDENTITY=TRUE
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/TEST6.ctl' LOG='/dm8/dmdbms/data/dmfldr/dmfldr_TEST6_1.log' DIRECT=TRUE SET_IDENTITY=TRUE
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:Yes
是否插入自增列:Yes
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/TEST6.txt
错误文件:/dm8/dmdbms/data/dmfldr/TEST6.bad
目标表:WW.TEST6
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            |
行缓冲区数量: 2
任务线程数量: 2
3行记录已提交
目标表:WW.TEST6
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0
用时:1.513(ms)
5)查询数据
[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 0.743(ms)
disql V8
SQL> select * from ww.TEST6;
行号     C1          C2 
---------- ----------- ---
1          1           AAA
2          2           BBB
3          2           aaa
4          3           bbb
5          4           ccc
已用时间: 0.857(毫秒). 执行号:4600.
SQL> 
注意:​ 在表中有自增列的情况下装载时,dmfldr参数direct=false效果与direct=true set_identity=true相同,都是将把从dmfldr数据文件中读取的自增列值作为目标值插入数据库表中,这种情况需要保证每一行的自增列的值符合自增列的规则,否则将造成数据混乱。

--测试7:空值处理
dmfldr 通过设置 NULL_MODE 参数来处理空值。
设置为TRUE,载入时NULL字符串处理为NULL,载出时空值处理为NULL字符串;
设置为FALSE,载入时NULL字符串处理为字符串,载出时空值处理为空串。

例1:导入NULL_MODE=TRUE
1)创建测试表TEST7
drop table ww.TEST7;
create table ww.TEST7(c1 int,c2 varchar(20));

SQL> create table ww.TEST7(c1 int,c2 varchar(20));
操作已执行
已用时间: 11.521(毫秒). 执行号:4700.
SQL> 
2)编辑数据文件TEST7.txt,存放路径/dm8/dmdbms/data/dmfldr,内容如下:
1|aaa
2|NULL
3|null
3)编辑控制文件TEST7.ctl,存放路径/dm8/dmdbms/data/dmfldr,内容如下:
OPTIONS
(
SKIP = 0
ROWS = 50000
INDEX_OPTION = 2
)
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/TEST7.txt'
BADFILE '/dm8/dmdbms/data/dmfldr/TEST7.bad'
INTO table ww.TEST7
FIELDS '|'
(C1,
C2
)
4)装载数据 null_mode=true
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/TEST7.ctl' LOG='/dm8/dmdbms/data/dmfldr/dmfldr_TEST7.log' null_mode=true 
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:Yes
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/TEST7.txt
错误文件:/dm8/dmdbms/data/dmfldr/TEST7.bad
目标表:WW.TEST7
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            |
行缓冲区数量: 2
任务线程数量: 2
3行记录已提交
目标表:WW.TEST7
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0
用时:1.608(ms)
5)查看数据
[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 0.738(ms)
disql V8
SQL> select * from ww.TEST7;
行号     C1          C2  
---------- ----------- ----
1          1           aaa
2          2           NULL
3          3           NULL
已用时间: 1.383(毫秒). 执行号:4900.
SQL> 
SQL> select c1 ,ifnull(c2,'null value') from ww.TEST7;
行号     C1          "IFNULL"(C2,'nullvalue')
---------- ----------- ------------------------
1          1           aaa
2          2           null value
3          3           null value
已用时间: 0.884(毫秒). 执行号:4901.
SQL> 

例2:导入NULL_MODE=FALSE
执行上面 1)2)3)步骤;
4)装载数据 null_mode=false
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/TEST7.ctl' LOG='/dm8/dmdbms/data/dmfldr/dmfldr_TEST7_1.log' null_mode=false 
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:Yes
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/TEST7.txt
错误文件:/dm8/dmdbms/data/dmfldr/TEST7.bad
目标表:WW.TEST7
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            |
行缓冲区数量: 2
任务线程数量: 2
3行记录已提交
目标表:WW.TEST7
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0
用时:1.192(ms)
5)检查导入后表信息
[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 0.631(ms)
disql V8
SQL> select * from ww.TEST7;
行号     C1          C2  
---------- ----------- ----
1          1           aaa
2          2           NULL
3          3           null
已用时间: 1.326(毫秒). 执行号:5100.
SQL> select c1 ,ifnull(c2,'null value') from ww.TEST7;
行号     C1          "IFNULL"(C2,'nullvalue')
---------- ----------- ------------------------
1          1           aaa
2          2           NULL
3          3           null
已用时间: 0.607(毫秒). 执行号:5101.
SQL> 
注意:可以看到当设置null_mode=false时,装载数据时"NULL"、“null"会被作为"NULL”、"null"两个字符串插入到表中;

例3:导出NULL_MODE=TRUE
执行"导入NULL_MODE=TRUE"的所有步骤,然后修改控制文件内容如下:
OPTIONS
(
SKIP = 0
ROWS = 50000
INDEX_OPTION = 2
)
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/TEST7_1.txt' 
BADFILE '/dm8/dmdbms/data/dmfldr/TEST7_1.bad'
INTO table ww.TEST7
FIELDS '|'
(C1,
C2
)
4)执行导出 NULL_MODE=TRUE
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/TEST7_1.ctl' LOG='/dm8/dmdbms/data/dmfldr/dmfldr_TEST7_3.log' null_mode=TRUE mode='out'
dmfldr V8
3 rows is load out
总共导出 3 行数据
用时:59.265(ms)
[dmdba@dmdb01 dmfldr]$ 
5)查看导出文件内容
[dmdba@dmdb01 dmfldr]$ cat /dm8/dmdbms/data/dmfldr/TEST7_1.txt 
1|aaa
2|NULL
3|NULL
[dmdba@dmdb01 dmfldr]$ 
注意:可以看到导出值为NULL字符串。

例4:导出NULL_MODE=FALSE
执行"导入NULL_MODE=TRUE"的所有步骤,然后修改控制文件内容如下:
OPTIONS
(
SKIP = 0
ROWS = 50000
INDEX_OPTION = 2
)
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/TEST7_2.txt' 
BADFILE '/dm8/dmdbms/data/dmfldr/test_2.bad'
INTO table ww.TEST7
FIELDS '|'
(C1,
C2
)
4)执行导出 NULL_MODE=FALSE
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/TEST7_2.ctl' LOG='/dm8/dmdbms/data/dmfldr/dmfldr_TEST7_3.log' null_mode=FALSE mode='out'
dmfldr V8
3 rows is load out
总共导出 3 行数据
用时:66.175(ms)
[dmdba@dmdb01 dmfldr]$ 
5)查看导出文件内容
[dmdba@dmdb01 dmfldr]$ cat TEST7_2.txt 
1|aaa
2|
3|
[dmdba@dmdb01 dmfldr]$ 
注意:可以看到,设置null_mode=false,导出文件内容值为空字符串。

dmfldr使用限制
(1)不支持向临时表、外部表装载数据
(2)不支持向系统表装载数据
(3)不支持向带有位图索引的表装载数据
(4)不支持向带有函数索引的表装载数据
(5)不支持向带有全文索引的表装载数据
(6)不支持向 DCP 代理装载数据
(7)dmfldr装载时,对约束进行检查.

--测试8:多表装载
通过在控制文件中指定多个 INTO TABLE 子句,可以将一批数据同时向多个表进行装载。每个 INTO TABLE 子句中都可以指定 WHEN 过滤条件、FIELDS 子句和列定义子句。
对于多表装载的使用需注意以下几点:
  对于第二个及其之后的 INTO TABLE 子句,在其 coldef_option 中,必须为所有列指定 POSITION 选项;
  在 INTO TABLE 子句的目标表中,如果目标表各不相同,则一个批次就可以完成装载完成(不管含有多少表,只需扫描一次数据文件即可);如果含有重复的目标表,则相同的表需要分批次导入(每当遇到相同的表时,就需要再扫描一遍源文件。N 个重复的表,就需要扫描 N 次源文件)。

1) 建表 TEST1、TEST2
DROp TABLE TEST1;
DROP TABLE TEST2;
CREATE TABLE TEST1(C1 INT,C2 INT);
CREATE TABLE TEST2(C1 INT,C2 INT);

SQL> DROP TABLE TEST1;
DROP TABLE TEST2;
CREATE TABLE TEST1(C1 INT,C2 INT);
CREATE TABLE TEST2(C1 INT,C2 INT);DROP TABLE TEST1;
已用时间: 0.414(毫秒). 执行号:0.
SQL> 操作已执行
已用时间: 11.541(毫秒). 执行号:7106.
SQL> 操作已执行
已用时间: 3.193(毫秒). 执行号:7107.
SQL> 
操作已执行
已用时间: 12.095(毫秒). 执行号:7108.
SQL> 
2) 编辑数据文件 TEST8.txt,存放路径为/dm8/dmdbms/data/dmfldr/TEST8.txt,文件内容如下
1,2
2,3
3,2
4,8
9,1
3) 编辑控制文件 TEST8.ctl,存放路径为/dm8/dmdbms/data/dmfldr/TEST8.ctl,内容如下:
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/TEST8.txt'
INTO TABLE test1
WHEN C1 != '1'
FIELDS ','
(
c1 position (1:1),
c2 position (3:3)
)
INTO TABLE test2
WHEN (3:3) = '2' AND c1 != '3'
FIELDS ','
(
c1 position (1:1),
c2 position (3:3)
)
4) 使用 dmfldr 进行数据载入
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/TEST8.ctl'
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:全部
每次提交服务器行数:50000
跳过行数:0
允许错误数:100
是否直接加载:Yes
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/TEST8.txt
错误文件:fldr.bad
目标表:TEST1
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            ,
C2                                                                                                                               CHARACTER            ,
行缓冲区数量: 2
任务线程数量: 2
数据文件共1个:
/dm8/dmdbms/data/dmfldr/TEST8.txt
错误文件:fldr.bad
目标表:TEST2
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            ,
C2                                                                                                                               CHARACTER            ,
行缓冲区数量: 2
任务线程数量: 2
4行记录已提交
1行记录已提交
目标表:TEST1
4 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:5
拒绝的逻辑记录总数:0
用时:2.934(ms)
目标表:TEST2
1 行加载成功。
由于数据格式错误,0行 丢弃数据错误,DM8之数0行 没有加载。
跳过的逻辑记录总数:0
读取的逻辑记录总数:5
拒绝的逻辑记录总数:0
用时:2.934(ms)
[dmdba@dmdb01 dmfldr]$ 
5) 查看表 TEST1 和 TEST2 的数据如下
SQL> SELECT * FROM TEST1;
行号     C1          C2         
---------- ----------- -----------
1          2           3
2          3           2
3          4           8
4          9           1
已用时间: 0.533(毫秒). 执行号:7109.
SQL> 
SQL> SELECt * FROM TEST2;
行号     C1          C2         
---------- ----------- -----------
1          1           2
已用时间: 0.638(毫秒). 执行号:7110.
SQL> 

---- 测试9:个性化设置
用户通过设置 dmfldr 的 SKIP、LOAD、ROWS 参数,可以根据自己的需求调整装载的起始行、装载最大行数以及每次提交的行数。
SKIP 参数用来设置跳过数据文件起始的逻辑行数,整形数值。默认的跳过起始行数为0 行。如果用户指定了多个文件,且起始文件中的行数不足 SKIP 所指定的行数,则dmfldr 工具会扫描下一个文件直至累加的行数等于 SKIP 所设置的行数或者所有文件都已扫描结束。
LOAD 参数用来设置装载的最大行数,整形数值。默认的最大装载行数为数据文件中的所有行数。LOAD 指定的值不包括 SKIP 指定的跳过的行数。
ROWS 参数用来设置每次提交的行数,整形数值。默认的提交行数为 50000 行。提交行数的值表示提交到服务器的行数,并不一定代表按照数据文件中的数据顺序的行数。用户可以根据实际情况调整每次提交的行数,以达到性能的最佳点。ROWS 参数作用于 MODE 为IN 的情况下,当 MODE 为 OUT 时无效。
例如:
1) 建表 TEST9
DROp TABLE ww.TEST9;
CREATE TABLE ww.TEST9(C1 INT,C2 VARCHAR);
SQL> CREATE TABLE ww.TEST9(C1 INT,C2 VARCHAR);
操作已执行
已用时间: 33.578(毫秒). 执行号:500.
SQL> 
2) 编辑数据文件 TEST9.txt,存放路径为/dm8/dmdbms/data/dmfldr/TEST9.txt,文件内容如下
1|aaa
2|bbb
3|ccc
4|ddd
5|eee
6|fff
7|ggg
8|hhh
9|iii
10|jjj
3) 编辑控制文件 test.ctl,存放路径为/dm8/dmdbms/data/dmfldr/TEST9.ctl,内容如下:
LOAD DATA
INFILE '/dm8/dmdbms/data/dmfldr/TEST9.txt'
INTO TABLE ww.TEST9
FIELDS '|'
(
C1,
C2
)
4) 使用 dmfldr 进行数据载入
[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control='/dm8/dmdbms/data/dmfldr/TEST9.ctl' skip=3 load=5
dmfldr V8
dmfldr: 
Copyright (c) 2011, 2015, Dameng.  All rights reserved.
控制文件:
加载行数:5
每次提交服务器行数:50000
跳过行数:3
允许错误数:100
是否直接加载:Yes
是否插入自增列:No
数据是否已按照聚集索引排序:No
字符集:GBK
数据文件共1个:
/dm8/dmdbms/data/dmfldr/TEST9.txt
错误文件:fldr.bad
目标表:WW.TEST9
列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            |
行缓冲区数量: 2
任务线程数量: 2
5行记录已提交
目标表:WW.TEST9
5 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。
跳过的逻辑记录总数:3
读取的逻辑记录总数:5
拒绝的逻辑记录总数:0
用时:4.863(ms)
[dmdba@dmdb01 dmfldr]$ 
5) 查看表 TEST 的数据,载入时跳过了数据文件的前 3 行数据,且只载入了 5 条数据。
[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240
服务器[192.168.186.128:5240]:处于普通打开状态
登录使用时间 : 1.070(ms)
disql V8
SQL> select * from ww.TEST9;
行号     C1          C2 
---------- ----------- ---
1          4           ddd
2          5           eee
3          6           fff
4          7           ggg
5          8           hhh
已用时间: 9.083(毫秒). 执行号:800.
SQL> 

达梦数据库社区地址:https://eco.dameng.com/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/882555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号