达梦dmfldr导入导出报字符转换错误的一次处理过程

环境

Windows11 +达梦8数据库

虚拟机上Centos7+ 达梦8数据库

达梦数据库工具dmfldr(数据库数据导入导出工具)

XFTP7文件传输工具

问题描述

windows11中,使用达梦dmfldr工具导出数据文件,当dmfldr工具再导入到Centos7达梦数据库时,报字符串转换出错,预期数据能正常导入。

操作过程

1.windows11中使用dmfldr工具导出DMHR.EMPLOYEE表数据

备注:

dmfldr工具使用,参考:概述 | 达梦技术文档

windows环境下达梦数据库存在DMHR.EMPLOYEE表,现将其导出,创建控制文件D:\dmdbms\hmlr\employee.ctl,内容如下:

LOAD DATA

INFILE 'D:\dmdbms\hmlr\employee.txt'

INTO TABLE DMHR.EMPLOYEE

FIELDS '|'

导出数据:

dmfldr userid=SYSDBA/SYSDBA@192.168.2.102:5236 control='D:\dmdbms\hmlr\employee.ctl' mode='out'

2.上传数据到虚拟机的linux系统下

XFTP连接虚拟机,上传hmlr目录到虚拟机中

COPY到达梦8数据库用户DMDBA用户下,并修改权限为:dmdba:dinstall

修改employee.ctl文件

3. 检查导入数据的库中是否已经存在 DMHR.EMPLOYEE表,存在则清空数据

4. 数据导入

执行 :

./dmfldr: userid=SYSDBA/SYSDBA@192.168.2.22:5236 control=\'/home/dmdba/hmlr/employee.ctl\'  mode=\'in\'后,数据导入失败。

故障定位及修复过程

  1. 查看错误日志文件

[dmdba@host2 bin]$ tail -f fldr.log

目标表:DMHR.EMPLOYEE

load failed.

失败原因: 超过最大错误数(第[241]行,第[11]列出现数据转换错误[-6111]:字符串转换出错)

0 行加载成功。

102 行由于数据错误没有加载。

101 行由于数据格式错误被丢弃。

跳过的逻辑记录总数:0

读取的逻辑记录总数:856

拒绝的逻辑记录总数:102

4.265(ms)已使用

2. 查看数据文件中的11列数据,分析原因

显示都是11列,且为行数据最后一列转换出错导致;考虑windows机器上传,可能存在/r/n的问题。

使用cat -v查看行结束符号为windows结束符。

3. windows行结束符号转换为linux行结束符

结束符号转换:sed -i 's/\r//' /home/dmdba/hmlr/employee.txt,重新检查确认行结束符已转换。

4. dmfldr 再次执行导入命令

./dmfldr userid=SYSDBA/SYSDBA@192.168.2.22:5236 control=\'/home/dmdba/hmlr/employee.ctl\'  mode=\'in\' 导入成功。

总结

达梦数据库涉及字符转换错误,都可以根据误提示或日志信息进行排查找到合适的解决办法,通常字符转换的问题为:

1. 字符编码不匹配:达使用不同的字符编码,如果转换使符编码与中存储的字符编码不匹会导错误。保在转换使用与相匹配的字符编码。

转换函数使:达梦提供了一些字符串转换函数,如TO_CHTO_DATE等。如果在使用这些函数时参数传递错误或用不正确,错误。解是仔细检查函数的参数和使是否正确。

3.格式不正确:如换的字中的数据格式不匹配,例如将一个非字符串转换为日期类型,错误。保要转换的字符串和字段的数据类型一致,或者使用合适的日期函数进行

4.长度超出达梦对于字长度有限制,如换的字符串长度超过了的限制,错误。保要转换的字符串长度不超过的限制。

5. 其他原因:除了上述情况外,有时转换错误可能是由于配置问题、数性问题、网络通信问题等引起的。

达梦技术社区:eco.dameng.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值