注册
sqlldr转dmfldr经验分享
培训园地/ 文章详情 /

sqlldr转dmfldr经验分享

温文稳问 2023/06/14 2244 1 1

SQLLOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。而DMFLDR(DM Fast Loader)是 DM 提供的快速数据装载命令行工具,大多数条件下只需将适用于sqlldr的控制文件部分修改下,即可使用dmfldr命令将sqlldr导出的文件迁移至达梦库内。
以下分享几处工作中遇到的不同点:

不同点说明

  1. dmfldr命令中所有 ‘ 前都需要加 \ 进行转义。如:image.png

  2. sqlldr中bad项在dmfldr内需改写为badfile。如:
    #sqlldr执行命令为
    image.png
    #dm执行命令为:
    image.png

  3. dmfldr字符设置改为在命令中配置character_code参数。sqlldr是在控制文件中,图一为dmfldr配置,图二为sqlldr配置:
    image.png
    image.png

  4. 如需导入序列需提前在库内创建,再在控制文件内调用。示例:image.png

  5. dmfldr导入指定值需在控制文件中使用constant参数。示例:image.png

报错处理

  1. 执行结果报错“load fail“
    检查dmfldr命令是否在数据库bin目录下执行。需切换至bin目录下使用./dmfldr方式执行。
  2. 执行结果报错“由于数据格式错误被丢弃“
    检查导入文件内列数是否与控制文件内不符。特别当存在空值时,也需要在空值左右写好分隔符。
  3. 执行结果报错“由于数据错误没有加载“
    检查导入文件内是否有中文乱码,可以通过将character_code设置为数据库的字符集处理。

实验演示

创建测试用户与表(达梦与Oracle相同)

create user "TEST" identified by "123456789";

grant "DBA" to "TEST";

create table "TEST"."TEST"
(
	"ID" INT,
	"NAME" VARCHAR2(50),
	"STATE" CHAR(10)
);

编辑测试数据

vi today.txt
AAAAA
BBBBB
CCCCC
DDDDD
EEEEE

sqlldr命令与控制文件

命令:

sqlldr userid=TEST/123456789@127.0.0.1:1521/orcl control=sqlcon.ctl log=today.log  readsize=20680000 bindsize=20680000 bad=today.bad data=today.txt errors=1000000

控制文件:

[oracle@RH6 ~]$ vi sqlcon.ctl 
LOAD DATA
CHARACTERSET ZHS16GBK
TRUNCATE
INTO TABLE TEST
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
trailing nullcols
(
NAME ,
ID sequence(max,1),
STATE INTEGER "1"
)

sqlldr执行结果

image.png

dmfldr命令与控制文件

命令:

cd /dmsoft/dmdbms/bin

./dmfldr userid=TEST/123456789@127.0.0.1:5236 control=\'/home/dmdba/dmcon.ctl\' log=\'/home/dmdba/today.log\'  read_rows=1000000 badfile=\'/home/dmdba/today.bad\' data=\'/home/dmdba/today.txt\' errors=1000000 character_code=\'utf-8\'

控制文件:

[dmdba@XYGLPT-PTYY-SERVER-2 ~]$ vi dmcon.ctl 
LOAD DATA
INFILE *
REPLACE
INTO TABLE formmain_8071
FIELDS '|'
OPTIONALLY ENCLOSE BY '"'
trailing nullcols
(
NAME,
ID "SEQ1.NEXTVAL",
STATE constant "1"
)

dmfldr执行结果

image.png

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服