热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【达梦干货攻略】dmfldr大字段数据装载

干货

dmfldr是DM提供的快速数据装载命令行工具,用户通过使用dmfldr工具能够把一定格式的文本数据以简单、快速、高效的方式导入到达梦数据库中,或把达梦数据库中的数据按照一定格式导出到文本文件。
在之前的干货中我们分享过dmfldr的使用方法,本次重点介绍大字段数据的载入与载出。

本章内容已在如下环境上测试:
①操作系统:中标麒麟7, Windows 10;
②数据库版本:达梦8;
相关关键字:dmfldr、 大字段数据装载、LOB_DIRECTORY

dmfldr系统结构
dmfldr主要包括客户端工具和位于数据库服务器的dmfldr功能模块。dmfldr系统结构如下图所示:
当进行数据载入时,dmfldr客户端接收用户提交的命令与参数,分析控制文件与数据文件,将数据打包发送给服务器端的dmfldr模块,由服务器完成数据的真正装载工作。并分析服务器返回的消息,必要时根据用户参数指定生成日志文件与错误数据文件。
当进行数据导出时,dmfldr客户端接收用户提交的命令与参数,分析控制文件,将用户要求转换成相应消息发送给服务器端的dmfldr模块。服务器解析并打包需要导出的数据,发送给dmfldr客户端,客户端将数据写入指定的数据文件,必要时根据用户参数指定生成日志文件。

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

01

大字段数据导出

当dmfldr工作在导出模式(MODE为OUT)时,生成大字段对应的数据文件名由LOB_FILE_NAME指定,若未指定默认为dmfldr.lob,文件存放目录由LOB_DIRECTORY指定,如果未指定则存放于导出数据文件同一目录。
现将T_TESTLOB表数据导出到文件/dm8/backup/dmfldr/testlob.txt文件中,大字段数据导出到/dm8/backup/dmfldr/testlob.lob文件中。
(1)创建测试表和插入数据
创建T_TESTLOB表,字段ID为自增列,插入测试数据,表结构参考如下:

    create table t_testlob (
    id int identity,
    name varchar(20),
    info1 blob,
    info2 clob
    );
    insert into t_testlob (name, info1, info2)
    values('张学名', 0xabcdef001, '武汉市东湖高新区未来科技城');
    insert into t_testlob (name, info1, info2)
    values('陈无良', 0xdfdfd234, '江苏省南京市雨花台区花神大道');
    insert into t_testlob (name, info1, info2)
    values('马梁', 0xfadaaf123, '上海市浦东新区上海市张江高科技园区');
    insert into t_testlob (name, info1, info2)
    values('李梅', 0xab121032def, '北京市海淀区中关村南大街');
    insert into t_testlob (name, info1, info2)
    values('程一航', 0xdadde110, '四川省成都市高新区天顺北街');
    commit;
    插入后表数据如下:
    (2)编写控制文件
    编辑控制文件testlob.ctrl,数据导出至/dm8/backup/dmfldr/testlob.txt文件中,控制文件内容参考如下:

      LOAD DATA
      INFILE '*'
      INTO TABLE t_testlob
      FIELDS '|'
      (
      ID,
      NAME,
      INFO1,
      INFO2
      )
      (3)执行导出命令
      使用dmfldr命令导出数据,执行命令参考如下(注意用户名区分大小写):

        dmfldr userid=SYSDBA/dameng123@192.168.88.101:5236
        cOntrol=\'/dm8/backup/dmfldr/testlob.ctrl\'
        data=\'/dm8/backup/dmfldr/testlob.txt\' mode=\'out\'
        lob_directory=\'/dm8/backup/dmfldr\' lob_file_name=\'testlob.lob\'

        显示导出5行数据:
        (4)查看导出结果
        在/dm8/backup/dmfldr/目录下生成testlob.txt和testlob.lob两个文件,执行目录生成导出日志文件。testlob.lob无法直接打开,testlob.txt内容展示如下。

        02

        大字段数据载入

        场景一:DIRECT为TRUE

        当载入的大字段数据在单独的数据文件中存放时(比如上述导出的大字段数据文件),需指定DIRECT=TRUE方式导入。

        非数据库服务器上导入时,指定CLIENT_LOB为TRUE,LOB_DIRECTORY指定为大字段数据文件所在的客户端本地目录;数据库服务器上导入时,则指定CLIENT_LOB为FALSE,LOB_DIRECTORY指定为大字段数据文件所在服务器目录(需先把大字段文件传送到DM服务器)。

        大字段数据文件在数据文件中指定,以“文件名:起始偏移:长度”的形式记录在数据文件中。

        使用如下命令将上述导出的数据文件testlob.txt和testlob.lob导入到服务器192.168.88.102的T_TESTLOB表中(T_TESTLOB表提前创建):

          dmfldr userid=SYSDBA/dameng123@192.168.88.102:5236
          cOntrol=\'/dm8/backup/dmfldr/testlob.ctrl\' 
          data=\'/dm8/backup/dmfldr/testlob.txt\' mode=\'in\' 
          lob_file_name=\'testlob.lob\' client_lob=true 
          lob_directory=\'/dm8/backup/dmfldr\' direct=true set_identity=false

          从执行结果中可以看出共导入5行记录。


          检查导入的数据:


          场景二:DIRECT为FALSE

          当大字段列数据保存在数据文件中时,需指定DIRECT=FALSE方式导入。BLOB_TYPE参数指定BLOB列内容类型(包含HEX_CHAR和HEX,默认为HEX_CHAR十六进制)。

          编辑数据文件testlobdata.txt,内容参考如下:



          使用前面导出的控制文件内容,在windows机器上使用dmfldr导入,命令参考如下:

            dmfldr userid=SYSDBA/dameng123@192.168.88.102:5236
            cOntrol='d:/test/testlob.ctrl'
            data='d:/test/testlobdata.txt' mode='in'
            direct=false blob_type='hex'

            执行结果显示如下:




            以上是本次干货攻略的分享内容,希望能给大家带来帮助,谢谢。

            往期回顾

            干货攻略丨DM8归档日志挖掘

            干货攻略丨达梦SQL优化之LIKE前后百分号
            干货攻略丨DM8锁等待和死锁
            干货攻略丨DM8并行查询



            推荐阅读
            author-avatar
            小默yic
            这个家伙很懒,什么也没留下!
            PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
            Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有