本篇文章主要记录使用DM8过程中,遇到报错“-7082:外部表数据错误”的排查过程及解决办法。
1.背景:
开发商在本地windows环境进行系统开发,根据业务逻辑,会定时传输外部表到指定路径,使用完外部表之后进行删除。在该版本“DM Database Server 64 V8--03134283914-20220909-169171-20009 Pack1”的数据库下,查询外部表时,报“-7082:外部表数据错误”。
报错语句:select count(*) from SYSBDA.EA;
2.报错环境:
操作系统 | windows 10 |
数据库版本 | DM Database Server 64 V8--03134283914-20220909-169171-20009 Pack1 |
数据记录行数 | 10w-100w |
3.定位问题
1).排查数据编码和格式问题
用户给表结构简单,测试数据也很少,很简单。初步排查与数据的编码和格式没有太大的关系。
2). 同版本数据库不同环境
因为担心是windows环境的问题,所以在windows执行了500-1000次的查询该表的语句。发现此版本的数据库在windows环境和linux环境执行相同SQL语句能稳定复现“-7082:外部表数据错误”。
执行500次,有33次查询是返回该错误的,如下图:
3.3 不同版本相同环境
经过测试,使用如下安装包,执行查询外部表是没有报错的。因此在当时是建议用户降数据库版本进行系统开发,现在最新的版本已修复了该问题。
测试数据库情况如下:
dm8_20210910_x86_win_64_ent_8.1.2.70 | 没有问题 |
dm8_20200907_x86_rh7_64_ent_8.1.1.126.iso | 没有问题 |
dm8_20220905_x86_win_64_ent_8.1.2.70_pack7 | 没有问题 |
dm8_20221027_x86_win_64_ent | 最新版没有问题 |
dm8_20220914_x86_rh6_64.iso | 有问题 |
dm8_20220916_x86_win_64.iso | 有问题 |
附录:
windows cmd命令行实现循环执行200次查询达梦数据库示例:
@(for /l %i in (1,1,200) do (disql.exe -S sysdba/SYSDBA -e "select count(1) cnt from SYSDBA.EA")) > EA2.log
更多内容,请访问达梦社区地址:https:eco.dameng.com