签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦 数据库 数据快速加载(dmfldr) 使用说明

2019-09-18 01:03 7000 0 原创 DM 达梦
作者: dave

1 DM Fast Loader 概述

1.1 DMFLDR 架构

dmfldr(DM Fast Loader)是 DM7 提供的快速数据装载命令行工具。用户通过使用 dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。

Dmfldr的架构图如下:

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

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

1.2 提升 dmfldr 性能的方法

用户在使用 dmfldr 时根据系统和数据的具体情况对一些参数进行调整,可以获得更好的性能,这些参数包括:

BUFFER_NODE_SIZE

BUFFER_NODE_SIZE 设置读取文件缓冲区页大小,值越大,缓冲区的页越大,每次读取的数据就越多,每次发送到服务器的数据也就越多,效率越高。但其大小受 dmfldr 客户端内存大小限制。 

READ_ROWS

在某些情况下,BUFFER_NODE_SIZE 读入的数据行数很大,而后续操作处理不了这么大的行数,此时可以用 READ_ROWS 来限制处理的行数。dmfldr 取 READ_ROWS 和BUFFER_NODE_SIZE 中较小的值作为一次处理的行数。

http://www.cndba.cn/cndba/dave/article/3705

SEND_NODE_NUMBERhttp://www.cndba.cn/cndba/dave/article/3705

指定 dmfldr 在数据载入时发送节点的个数,默认由系统计算一个初始值。若在数据载入时发现发送节点不够用,系统会动态增加分配。在系统内存足够的情况下,可以适当设大 SEND_NODE_NUMBER 值,提升 dmfldr 载入性能。

TASK_THREAD_NUMBER

指定 dmfldr 在数据载入时处理用户数据的线程数目。默认情况下,dmfldr 将该参数值设为系统 CPU 的个数,但当 CPU 个数大于 8 时,默认值都被置为 8。在 dmfldr 客户端所在机器 CPU 大于 8 环境中,提高 TASK_THREAD_NUMBER 值可以提升 dmfldr 装载性能。

BLDR_NUMhttp://www.cndba.cn/cndba/dave/article/3705http://www.cndba.cn/cndba/dave/article/3705http://www.cndba.cn/cndba/dave/article/3705

水平分区表装载时,指定服务器 BLDR 的最大个数,默认为 64。服务器的 BLDR 保存水平分区子表相关信息,BLDR_NUM 的设置也就指定了服务器能同时载入的水平分区子表的个数。若 BLDR_NUM 设置太大,当水平分区子表数过多时,可能会导致服务器内存不足。当载入时实际需要的 BLDR 个数超出 BLDR_NUM 设置时,会淘汰指定子表的 BLDR,并替换为新的子表 BLDR。 

BDTA_SIZEhttp://www.cndba.cn/cndba/dave/article/3705

BDTA(Batch DaTA)的大小,默认为 5000。BDTA 代表 DM7 数据库批量数据处理机制中一个批量,在内存、CPU 允许的条件下,增大 BDTA_SIZE 能加快装载速度;在网络是装载性能瓶颈时,增大 BADT_SIZE 影响不大。

INDEX_OPTION

索引的设置选项,默认为 1。INDEX_OPTION 的可选项有 1 和 2。
1 代表服务器装载数据时先不刷新二级索引,而是将新数据按照索引预先排序,在装载完成后,再将排好序的数据插入索引。如果在数据载入前,目标表中已有较多数据,建议INDEX_OPTION 置为 1。
2 代表服务器在快速装载过程中不刷新二级索引数据,只在装载完成时重建所有二级索引。如果在数据载入前,目标表中没有数据或数据量较小,建议 INDEX_OPTION 置为 2。

1.3 dmfldr 的使用限制

dmfldr 的使用存在以下一些限制:

1. 不支持向临时表、外部表装载数据
2. 不支持向系统表装载数据
3. 不支持向带有位图索引的表装载数据
4. 不支持向带有函数索引的表装载数据
5. 不支持向带有全文索引的表装载数据
6. 不支持单独对表垂直分区子表装载数据
7. 不支持向 DCP 代理装载数据

dmfldr 装载时,对约束进行检查,对各种约束的处理机制如下表所示

2 DMFLDR 语法说明

2.1 Dmfldr语法格式

dmfldr 的使用必须指定必要的参数,并且USERID必须是第一个参数,CONTROL必须是第二个参数,这两个参数都不能省略;其余参数均为可选参数,可以不指定,指定时也无顺序要求。

http://www.cndba.cn/cndba/dave/article/3705

dmfldr 使用较为灵活,参数较多,用户可以使用“dmfldr help”查看各参数的简单信息。

[dmdba@dmdsc1 log]$ dmfldr help
格式: ./dmfldr   KEYWORD=value

例程: ./dmfldr   SYSDBA/SYSDBA CONTROL='/opt/data/fldr.ctl'

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

字符串类型参数必须以引号封闭

关键字              说明(默认值)
--------------------------------------------------------------------------------
USERID              用户名/口令 格式:USER/PWD@SERVER:PORT#SSL_PATH@SSL_PWD
CONTROL             控制文件,字符串类型
LOG                 日志文件,字符串类型 (fldr.log)
BADFILE             错误数据记录文件,字符串类型 (fldr.bad)
SKIP                初始忽略逻辑行数 (0)
LOAD                需要装载的行数 (ALL)
ROWS                提交频次 (50000), DIRECT为FALSE有效
DIRECT              是否使用快速方式装载 (TRUE)
SET_IDENTITY        是否插入自增列 (FALSE)
SORTED              数据是否已按照聚集索引排序 (FALSE)
INDEX_OPTION        索引选项 (1)
                    1 不刷新二级索引,数据按照索引先排序,装载完后再
                    将排序的数据插入索引
                    2 不刷新二级索引,数据装载完成后重建所有二级索引
ERRORS              允许的最大数据错误数 (100)
CHARACTER_CODE      字符编码,字符串类型 (GBK, UTF-8, SINGLE_BYTE, EUC-KR)
MODE                装载方式,字符串类型 IN表示载入,OUT表示载出,
                    OUTORA表示载出ORACLE (IN)
CLIENT_LOB          大字段目录是否在本地 (FALSE)
LOB_DIRECTORY       大字段数据文件存放目录
LOB_FILE_NAME       大字段数据文件名称,仅导出有效 (dmfldr.lob)
BUFFER_NODE_SIZE    读入文件缓冲区的大小 (10),有效值范围1~2048
READ_ROWS           工作线程一次最大处理的行数 (100000),最大支持2^26-10000
NULL_MODE           载入时NULL字符串是否处理为NULL
                    载出时空值是否处理为NULL字符串 (FALSE)
NULL_STR            载入时视为NULL值处理的字符串
SEND_NODE_NUMBER    运行时发送节点的个数 (20),有效值范围16~65535
TASK_THREAD_NUMBER  处理用户数据的线程数目,默认与处理器核数量相同,有效值范围1~128
BLDR_NUM            服务器BLDR数目 (64),有效值范围1~1024
BDTA_SIZE           bdta的大小 (5000),有效值范围100~10000
COMPRESS_FLAG       是否压缩bdta (FALSE)
MPP_CLIENT          MPP环境,是否本地分发 (TRUE)
SINGLE_FILE         MPP环境,是否只生成单个数据文件(FALSE)
SILENT              是否静默方式装载数据(FALSE)
BLOB_TYPE           BLOB类型字段数据值的实际类型,字符串类型 (HEX_CHAR)
                    HEX表示值为十六进制,HEX_CHAR表示值为十六进制字符类型
                    仅在direct=FALSE有效
OCI_DIRECTORY       OCI动态库所在的目录
DATA                指定数据文件路径
ENABLE_CLASS_TYPE   允许用户导入CLASS类型数据 (FALSE)
FLUSH_FLAG          提交时是否立即刷盘 (FALSE)
IGNORE_BATCH_ERRORS 是否忽略错误数据继续导入 (FALSE)
SINGLE_HLDR_HP      是否使用单个HLDR装载HUGE水平分区表 (TRUE)
EP                  指定需要发送数据的站点序号列表,仅向MPP环境导入数据时有效
HELP                打印帮助信息
[dmdba@dmdsc1 log]$

2.2 控制文件格式

控制文件 CONTROL 是启动 dmfldr 必须要指定的参数,用于指定数据文件中数据的格式。

在数据载入时,dmfldr 根据控制文件指定的格式来解析数据文件;
导出数据时,dmfldr 也会根据控制文件指定的列分隔符、行分隔符等生成数据文件。

控制文件中还可以指定其他 dmfldr 参数值。

http://www.cndba.cn/cndba/dave/article/3705

dmfldr 控制文件的语法如下所示:

[OPTIONS(
<id>=<value>
……
)]
LOAD [DATA]
INFILE [LIST] <path_name> [<row_term_option>] [,<path_name> 
[<row_term_option>]]
[BADFILE <path_name>]
[APPEND|REPLACE|INSERT]
<into_table_clause>
INTO TABLE [<schema>.]<tablename>
[FIELDS <delimiter>]
[<coldef_option>]
<id> ::=参数
<value> ::=值
<path_name> ::=文件地址
<path_name_list> ::=含文件列表文件地址
<row_term_option> ::=STR [X] <delimiter>
<into_table_clause> ::= <into_table_single>{<into_table_single>}
<into_table_single> ::=INTO TABLE [<schema>.]<tablename>
[WHEN <field_conditions>]
[FIELDS [TERMINATED BY] [X] <delimiter>]
[<enclosed_option>]
[<coldef_option>]
<schema> ::=模式名
<tablename> ::=表名
<field_conditions> ::= <field_condition>{ AND <field_condition>}
< field_condition> ::= [(] <cmp_exp><cmp_ops><cmp_data>[)]
<cmp_exp> ::= <colid> | (p1:p2)
<cmp_ops> ::= = | <> | !=
<cmd_data> ::= [X]'<字符串常量>' | BLANKS | WHITESPACE
<delimiter> ::='<字符串常量>'
<coldef_option> ::=(<col_def>{ ,<col_def>})
<col_def>::=<col_id> [FILLER][<property_option>][<fmt_option>][<term_option>] 
[<enclosed_option>][<constant_option>][<fun_option>]
<col_id> ::=列名
<property_option> ::=<position_option> | NULL
<position_option> ::=position(p1:p2) | position(p1)
<fmt_option> ::=DATE FORMAT '<时间日期格式串>'
<term_option> ::= TERMINATED [BY] <wx_option>
<wx_option> ::= WHITESPACE|[X] <delimiter>
<enclosed_option> ::= [OPTIONALLY] ENCLOSE [BY] [X] <delimiter>
<constant_option> ::= CONSTANT "<常量>"
<fun_option> ::= "函数名称()"

3 DMFLDR 使用示例

3.1 普通文本处理

3.1.1创建测试表CNDBA

SQL> drop table cndba;
操作已执行
已用时间: 135.697(毫秒). 执行号:3.
SQL> create table cndba(c1 int,c2 int,c3 date);
操作已执行
已用时间: 20.909(毫秒). 执行号:4.
SQL>

3.1.2创建源数据文件:/dm/dave/cndba.txt, 添加如下内容:

[dmdba@dmdsc1 ~]$ cat /dm/dave/cndba.txt
1 1|2019-09-16
2 2|2019-09-17
3 3|2019-09_18
[dmdba@dmdsc1 ~]$

3.1.3创建控制文件:/dm/dave/cndba.ctl,添加如下内容:

[dmdba@dmdsc1 ~]$ cat /dm/dave/cndba.ctl
LOAD DATA
INFILE '/dm/dave/cndba.txt'
BADFILE  '/dm/dave/cndba.bad'
INTO TABLE cndba
FIELDS '|'
(
C1 TERMINATED BY ' ',
C2,
C3 DATE FORMAT 'yyyy-mm-dd'
)
[dmdba@dmdsc1 ~]$

3.1.4使用 dmfldr 进行数据载入

#在linux 系统中路劲这里必须转移一下,Win平台不需要转义:
[dmdba@dmdsc1 ~]$ dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=/'/dm/dave/cndba.ctl/' log=/'/dm/dave/cndba.log/' 
dmfldr V7.6.0.95-Build(2018.09.13-97108)ENT 
dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制文件:

加载行数:全部

每次提交服务器行数:50000

跳过行数:0

允许错误数:100

是否直接加载:Yes

是否插入自增列:No

数据是否已按照聚集索引排序:No

字符集:GBK



数据文件共1个:
/dm/dave/cndba.txt

错误文件:fldr.bad

目标表:CNDBA

列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            WHT
C2                                                                                                                               CHARACTER            |
C3                                                                                                                               yyyy-mm-dd           |

行缓冲区数量: 4
任务线程数量: 4

3行记录已提交

目标表:CNDBA
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。

跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0

用时:8.590(ms)

[dmdba@dmdsc1 ~]$

从日志输出,告诉我们成功导入3行,注意源文件中最后一行的日期格式。

http://www.cndba.cn/cndba/dave/article/3705

3.1.5查询验证:

[dmdba@dmdsc1 ~]$ disql 
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
用户名:
密码:

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 15.571(毫秒)
Connected to: DM 7.1.6.95
SQL> select * from cndba;

行号     C1          C2          C3        
---------- ----------- ----------- ----------
1          1           1           2019-09-16
2          2           2           2019-09-17
3          3           3           2019-09-18

已用时间: 5.029(毫秒). 执行号:7.
SQL>

3.2 处理失败和跳行处理

3.2.1修改源文件

继续使用之前的环境,修改源文件如下:

[dmdba@dmdsc1 dave]$ cat cndba.txt 
col1 col2 col3
1 1|2019-09-16
2 2|2019-09-17
3 3|2019-09_18
4 4|yyyy-mm-dd
[dmdba@dmdsc1 dave]$

这里有3点要求:

1.我们加了数据的列头,这个不需要导入,需要跳过。
2.最后一行,格式不对,无法导入。
3.我们希望导入的时候是追加的模式,控制文件模式有三种模式:replace,insert,append。我们这里使用append。

3.2.2修改控制文件

根据要求修改之后的控制文件如下:

[dmdba@dmdsc1 ~]$ cat /dm/dave/cndba.ctl
OPTIONS
(
SKIP = 1
)
LOAD DATA
INFILE '/dm/dave/cndba.txt'
BADFILE  '/dm/dave/cndba.bad'
APPEND INTO TABLE cndba
FIELDS '|'
(
C1 TERMINATED BY ' ',
C2,
C3 DATE FORMAT 'yyyy-mm-dd'
)
[dmdba@dmdsc1 ~]$

3.2.3导入数据

[dmdba@dmdsc1 dave]$ dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=/'/dm/dave/cndba.ctl/' log=/'/dm/dave/cndba.log/' 
dmfldr V7.6.0.95-Build(2018.09.13-97108)ENT 
dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制文件:

加载行数:全部

每次提交服务器行数:50000

跳过行数:1

允许错误数:100

是否直接加载:Yes

是否插入自增列:No

数据是否已按照聚集索引排序:No

字符集:GBK



数据文件共1个:
/dm/dave/cndba.txt

错误文件:/dm/dave/cndba.bad

目标表:CNDBA

列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            WHT
C2                                                                                                                               CHARACTER            |
C3                                                                                                                               yyyy-mm-dd           |

行缓冲区数量: 4
任务线程数量: 4

3行记录已提交

目标表:CNDBA
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,1行 没有加载。

跳过的逻辑记录总数:1
读取的逻辑记录总数:4
拒绝的逻辑记录总数:1

用时:11.016(ms)

[dmdba@dmdsc1 dave]$ 

[dmdba@dmdsc1 dave]$ cat cndba.bad 
dmfldr: 2019-09-18 00:34:06 SYSDBA->CNDBA 4 4|yyyy-mm-dd

[dmdba@dmdsc1 dave]$ 

按我们的要求进行了导入。我们查看数据是否追加了:
[dmdba@dmdsc1 dave]$ disql 

disql V7.6.0.95-Build(2018.09.13-97108)ENT 
用户名:密码:

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 17.215(毫秒)
Connected to: DM 7.1.6.95
SQL> select * from cndba;

行号     C1          C2          C3        
---------- ----------- ----------- ----------
1          1           1           2019-09-16
2          2           2           2019-09-17
3          3           3           2019-09-18
4          1           1           2019-09-16
5          2           2           2019-09-17
6          3           3           2019-09-18

6 rows got

已用时间: 1.908(毫秒). 执行号:10.
SQL> 

处理完成。

.3 大对象处理

  dmfldr 支持对 DM 数据库的大字段类型数据的载入和导出,DM 数据库支持的大字段数据类型有 TEXT、LONGVARCHAR、IMAGE、LONGVARBINARY、BLOB 以及 CLOB。

3.3.1 大字段数据的导出

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

1)建测试表anqing: 
SQL> create table anqing(c1 int,c2 blob,c3 clob);
操作已执行
已用时间: 21.915(毫秒). 执行号:11.
SQL> 

2) 插入数据
SQL> INSERT INTO anqing VALUES(1,0XAB121032DE,'www.cndba.cn');
影响行数 1

已用时间: 2.461(毫秒). 执行号:12.
SQL> INSERT INTO anqing VALUES(2,0XAB121032DE,'www.cndba.cn');
影响行数 1

已用时间: 2.123(毫秒). 执行号:13.
SQL> commit;
操作已执行
已用时间: 1.935(毫秒). 执行号:14.
SQL> 

2)编辑控制文件 /dm/dave/anqing.ctl,内容如下:

[dmdba@dmdsc1 ~]$ cat /dm/dave/anqing.ctl
LOAD DATA
INFILE '/dm/dave/anqing.txt'
INTO TABLE anqing
FIELDS '|'
(
C1,
C2,
C3
)
[dmdba@dmdsc1 ~]$ 

4) 使用 dmfldr 进行导出数据
[dmdba@dmdsc1 ~]$ dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=/'/dm/dave/anqing.ctl/' LOB_DIRECTORY=/'/dm/dave//' mode=/'out/' LOB_FILE_NAME=/'anqing/'
dmfldr V7.6.0.95-Build(2018.09.13-97108)ENT 
2 rows is load out
总共导出 2 行数据
用时:257.203(ms)

[dmdba@dmdsc1 ~]$ 


5)查看数据

[dmdba@dmdsc1 ~]$ cd /dm/dave
[dmdba@dmdsc1 dave]$ ll
总用量 32
-rw-r--r-- 1 dmdba dinstall   34  9月 18 00:42 anqing
-rw-r--r-- 1 dmdba dinstall   83  9月 18 00:41 anqing.ctl
-rw-r--r-- 1 dmdba dinstall   52  9月 18 00:42 anqing.txt
-rw-r--r-- 1 dmdba dinstall   58  9月 18 00:34 cndba.bad
-rw-r--r-- 1 dmdba dinstall  182  9月 18 00:33 cndba.ctl
-rw-r--r-- 1 dmdba dinstall 2701  9月 18 00:34 cndba.log
-rw-r--r-- 1 dmdba dinstall   75  9月 18 00:29 cndba.txt
-rw-r--r-- 1 dmdba dinstall    7  9月 18 00:38 dmsql.buf1568738112660288.buf

#非lob 数据:
#在数据文件中,大字段以“文件名:起始偏移:长度”的形式记录在数据文件中。
[dmdba@dmdsc1 dave]$ cat anqing.txt 
1|anqing:0:5|anqing:5:12
2|anqing:17:5|anqing:22:12

#lob 数据:
[dmdba@dmdsc1 dave]$ cat anqing
«2ݷww.cndba.cn«2ݷww.cndba.cn[dmdba@dmdsc1 dave]$ 
[dmdba@dmdsc1 dave]$

3.3.2 DIRECT 为 TRUE 时大字段数据的载入

当 MODE 为 IN 且 DIRECT 为 TRUE 时,此时数据载入若涉及到大字段对象,需要用户指定大字段数据文件。

若 CLIENT_LOB 为 TRUE,LOB_DIRECTORY 应指定大字段数据文件所在的客户端本地目录;
若 CLIENT_LOB 为 FALSE,用户必须先把相关文件传送到 DM服务器所在主库,然后使用 LOB_DIRECTORY指明存放目录大字段数据文件在数据文件中指定,可以是任意格式的文件。

在数据文件中,大字段以“文件名:起始偏移:长度”的形式记录在数据文件中。指定的文件名无效时,dmfldr 会报错,装载失败。对于 CLOB 类型字段,当指定的偏移、长度范围内带有不完整字符时,dmfldr 将装载失败。http://www.cndba.cn/cndba/dave/article/3705

这里直接使用上节导出的数据,导入之前将控制文件改成append模式了:
[dmdba@dmdsc1 dave]$ dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=/'/dm/dave/anqing.ctl/' LOB_DIRECTORY=/'/dm/dave//' LOB_FILE_NAME=/'anqing/'
dmfldr V7.6.0.95-Build(2018.09.13-97108)ENT 
dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.
...

数据文件共1个:
/dm/dave/anqing.txt

错误文件:fldr.bad

目标表:ANQING

列名                                                                                                                           包装数据类型   终止
C1                                                                                                                               CHARACTER            |
C2                                                                                                                               CHARACTER            |
C3                                                                                                                               CHARACTER            |

行缓冲区数量: 4
任务线程数量: 4

2行记录已提交

目标表:ANQING
2 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。

跳过的逻辑记录总数:0
读取的逻辑记录总数:2
拒绝的逻辑记录总数:0

用时:8.010(ms)

[dmdba@dmdsc1 dave]$ 



查看数据:

SQL> select * from anqing;

行号     C1          C2           C3          
---------- ----------- ------------ ------------
1          1           0xAB121032DE www.cndba.cn
2          2           0xAB121032DE www.cndba.cn
3          1           0xAB121032DE www.cndba.cn
4          2           0xAB121032DE www.cndba.cn

已用时间: 2.903(毫秒). 执行号:19.
SQL>

3.3.3 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) 建表 hefei:
SQL> CREATE TABLE hefei(C1 INT,C2 BLOB,C3 CLOB);
操作已执行
已用时间: 26.622(毫秒). 执行号:22.
SQL> 

2) 编辑数据文件 /dm/dave/hefei.txt,文件内容如下
1|0x12d3c8a7|www.cndba.cn
2|0x12a4cbac|www.cndba.cn
3|0x22d3c8b3|www.cndba.cn

3) 编辑控制文件 /dm/dave/hefei.ctl,内容如下:
LOAD DATA
INFILE '/dm/dave/hefei.txt'
INTO TABLE hefei
FIELDS '|'
(
C1,
C2,
C3
)

4) 使用 dmfldr 进行导入数据,BLOB_TYPE 为 HEX_CHAR
[dmdba@dmdsc1 dave]$ dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=/'/dm/dave/hefei.ctl/' direct=false blob_type=/'hex_char/'
dmfldr V7.6.0.95-Build(2018.09.13-97108)ENT 
dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.
……

3 rows processed.

目标表:HEFEI
3 行加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。

跳过的逻辑记录总数:0
读取的逻辑记录总数:3
拒绝的逻辑记录总数:0

用时:269.328(ms)

[dmdba@dmdsc1 dave]$ 


5) 查询表数据
SQL> select * from hefei;

行号     C1          C2         C3          
---------- ----------- ---------- ------------
1          1           0x12D3C8A7 www.cndba.cn
2          2           0x12A4CBAC www.cndba.cn
3          3           0x22D3C8B3 www.cndba.cn

已用时间: 2.321(毫秒). 执行号:26.
SQL>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2296
    原创
  • 3
    翻译
  • 582
    转载
  • 198
    评论
  • 访问:8505244次
  • 积分:4477
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ