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




