Linux 下对于Dmfldr(快速装载工具)的基本操作
1.功能简介
dmfldr(DM Fast Loader)是 DM 提供的快速数据装载命令行工具。使用dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。
2.系统结构
dmfldr 实际上除了客户端工具,还包含一个在数据库服务器中的 dmfldr功能模块,它们共同完成 dmfldr 的各项功能.
3.启动dmfldr
安装好 DM 数据库管理系统后,在安装目录的“bin”子目录下可找到 dmfldr 执行文件。
dmfldr 的使用必须指定必要的参数,否则工具会报错“无效的参数个数”并退出。
可通过命令./dmfldr help 查看有关dmfldr使用格式和参数值。
如例程所示,USERID 和 CONTROL 是启动 dmfldr 必须要指定的参数,且 USERID 必须是第一个参数,CONTROL 必须是第二个参数。
4.dmfldr 实战
当 dmfldr 工作在 IN 模式时,从数据文件中读取数据并载入数据库;当工作在 OUT 模式时,从数据库中将指定数据导出到数据文件。
4.1简单文本数据载入
(1)在控制文件中指定数据文件
1).在数据库上建立一张能够匹配原始数据的表L1
2).编辑数据文件 test.txt,存放路径为/data/dmdata/test.txt。
3).编辑控制文件 test.ctrl,存放路径为/data/dmdata/test.ctrl。
4).使用 dmfldr 进行数据载入(进入数据库安装bin目录下)
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/data/dmdata/test.ctrl\'
5).查询表检测数据是否载入
SQL>select * from TEST.L1;
(2)使用 DATA 参数指定数据文件
1).在数据库上建立一张能够匹配原始数据的表L2
2).编辑数据文件 test.txt和控制文件test.ctrl,存放路径为/data/dmdata/下
3).使用 dmfldr 进行数据载入
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/data/dmdata/test.ctrl\' data=\'/data/dmdata/test.txt\'
4).查询表检测数据是否载入
SQL>select * from TEST.L2;
4.2数据转换与错误数据文件
dmfldr 支持所有 DM 数据库支持的列定义类型,包括字符串、数值、时间日期、时间日期间隔、大字段类型等;dmfldr 支持 UTF8、GBK 和 GB18030 编码之间的相互转换。
数据类型和编码转换过程中常见的出错的情况:
*编码转换失败。
*目标列为字符串类型时,数据长度大于列定义长度。
*目标列为数值类型时,数据包含非法字符或者转换后超出该数值的范围。
*目标列为日期类型时,dmfldr 默认按 yyyy-mm-dd hh:mi:ss 的格式解析,如果数据不是这样的格式,需要指定对应列的时间日期 fmt 格式而未指定。
当数据类型和编码转换中存在错误数据,而错误数在允许的最大错误数范围内时,dmfldr 会将出错的数据记录到错误数据文件中,默认的错误文件名为 fldr.bad。允许的最大容错个数由 ERRORS 选项设置,默认为 100。
1).在数据库上建立一张能够匹配原始数据的表L3
2).编辑数据文件 test.txt和控制文件test.ctrl,存放路径为/data/dmdata/下
3).使用 dmfldr 进行数据载入
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/data/dmdata/test.ctrl\' badfile=\'/data/dmdata/test.bad\'
4).查看错误数据文件/data/dmdata/test.bad
4.3大字段数据的导出
当 dmfldr 工作在导出模式即 MODE 为 OUT 时,dmfldr 生成大字段对应的数据文件名由 LOB_FILE_NAME 指定,若未指定默认为 dmfldr.lob,文件存放于LOB_DIRECTORY 指定的目录,如果未指定 LOB_DIRECTORY 则存放于指定的导出数据文件同一目录。
1).在数据库上建立一张能够匹配原始数据的表L4
2).为表L4插入数据
3).编辑数据文件 test.ctrl,存放路径为/data/dmdata/test.ctrl
4).使用 dmfldr 进行导出数据
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/data/dmdata/test.ctrl\' data=\'/data/dmdata/test.txt\' mode=\'out\' lob_directory=\'/data/dmdata/\'
5).查看导出的大字段数据文件dmfldr.lob
4.4自增列装载
当 DIRECT 参数为 FALSE 时,dmfldr 将把从数据文件中读取的自增列值作为目标值插入数据库表中,用户应当保证每一行的自增列的值符合自增列的规则,否则将造成数据混乱。
当 DIRECT 参数为 TRUE 时,dmfldr 提供了 SET_IDENTITY 参数(默认为 FALSE)对数据载入时自增列的处理进行设置:
*如果指定 SET_IDENTITY 选项值为 TRUE,则 dmfldr 将把从数据文件中读取的自增列值作为目标值插入数据库表中,用户应当保证每一行的自增列的值符合自增列的规则,否则将造成数据混乱;
*如果 SET_IDENTITY 选项值设置为 FALSE,则 dmfldr 将忽略数据文件中对应自增列的值,服务器将根据自增列定义和表中已有数据自动生成自增列的值插入每一行的对应列。
1).在数据库上建立一张能够匹配原始数据的表L5。
2)为表L5插入两行数据
3)编辑数据文件 test.txt,存放路径为/data/dmdata/test.txt
4)编辑控制文件 test.ctrl,存放路径为/data/dmdata/test.ctrl
5)使用 dmfldr 进行数据载入
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/data/dmdata/test.ctrl\' direct=true set_identity=false
6)查看表 TEST.L5 的数据
如果将 SET_IDENTITY 置为 TRUE:则不会实现自增列。