暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

sqlldr转dmfldr

原创 张鹏 2023-09-06
271

sqlldr转dmfldr
温文稳问 2023/06/14 284 1 0
SQLLOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。而DMFLDR(DM Fast Loader)是 DM 提供的快速数据装载命令行工具,大多数条件下只需将适用于sqlldr的控制文件部分修改下,即可使用dmfldr命令将sqlldr导出的文件迁移至达梦库内。
以下分享几处工作中遇到的不同点:
不同点说明
dmfldr命令中所有 ‘ 前都需要加 \ 进行转义。如:
sqlldr中bad项在dmfldr内需改写为badfile。如:
#sqlldr执行命令为

#dm执行命令为:

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

如需导入序列需提前在库内创建,再在控制文件内调用。示例:
dmfldr导入指定值需在控制文件中使用constant参数。示例:
报错处理
执行结果报错“load fail“
检查dmfldr命令是否在数据库bin目录下执行。需切换至bin目录下使用./dmfldr方式执行。
执行结果报错“由于数据格式错误被丢弃“
检查导入文件内列数是否与控制文件内不符。特别当存在空值时,也需要在空值左右写好分隔符。
执行结果报错“由于数据错误没有加载“
检查导入文件内是否有中文乱码,可以通过将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执行结果

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执行结果

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论