环境
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\'后,数据导入失败。
故障定位及修复过程
- 查看错误日志文件
[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. 其他原因:除了上述情况外,有时转换错误可能是由于配置问题、数性问题、网络通信问题等引起的。