暂无图片
暂无图片
15
暂无图片
暂无图片
暂无图片

达梦8 数据迁移报错汇总

原创 Frank_ 2021-08-30
11378

数据迁移报错汇总

目录

前言

数据迁移是达梦数据库一个比较常用的工具,利用这个工具,可以比较高效的对不同的数据库之间进行迁移,基于 oracle19c迁移到dm8 的一次迁移,总结了一下,迁移的过程,以及迁移过程会出现的一些常见问题。

image.png

本章只介绍迁移过程出现的错误,具体的迁移过程(包含达梦数据库中对象和oracle库中对象及数据量对比的内容),可以查看以下连接:数据迁移流程

迁移表数据时的报错

记录超长

image.png

解决办法:
image.png

列 [xxxxxx]长度超出定义

报错原因:
因为使用了不同的字符集,不同的字符集一个字符占用的字节不一致,导致列长度超出定义。

解决办法:
按照源端数据库的字符集参数重新初始目标端数据库(不推荐,需要重新迁移)
修改对应列的长度(源数据库开发需要使用到列长度的定义,需要谨慎修改)

违反唯一性约束

报错原因:
表设置了唯一性约束或者主键约束,但是被禁用了,导致表中有重复数据。还有可能是数据迁移时重复了。

解决办法:
查看是否是约束被禁用导致的,如果是的话,需要和应用商量如何解决,是否需要删除重复数据,还是去掉该约束,重新迁移该表。迁移时记得点击转换,选择先删除后拷贝。

数据大小超过可支持范围

image.png

解决办法:
排查具体是哪列报的问题,在目标数据库对应表的对应列扩大下数据精度或者数据类型。

精度必须大于标度

原因:
Oracle 中 number (m,n) 允许 n>m,但是在 DM 中是不允许的,DM 中 m>=n,m 表示精度,n 表示标度。精度是一个无符号整数,定义了总的数字数;标度定义了小数点右边的数字位数。

解决办法:
将number (m,n) 的类型确保m>=n

迁移过程中出现的错误:JAVA HEAP SPACE

原因:
dts 所在机器内存不足导致/本机内存不足

解决办法,增加内存

精度超出范围

原因:
可能是由于 Oracle 和 DM 数据库字符集不一样的原因:比如 gbk 和 utf-8 中文占用的字节数不一样。

解决办法:
在迁移的时候,可以将字符长度映射调正大。
image.png

如果碰到中文对应到 DM 都需要三倍长度,可以检查初始化数据库的时候,达梦数据库选择字符串是否以字符为单位。(length_in_char=1试试)

对象对比出现的不一致的情况

根据数据对象报告,筛选前面是达梦的所有对象,后面为Oracle的对象.

通过筛选数据:oracle的数据选择valid,达梦的数据选择invalid,以及空白的数据。得到以下对象迁移有问题。

image.png

以下是进行解决的办法:
1.首先,重新编译该对象(注意编译登录的用户需要为目的端的用户,不能是sysdba)

否则会出现如下错误:
2.编译后报错:
image.png

3.找到对应的对象,右键修改:
image.png

4.复制语句到编辑器中:
image.png

5.定位出错的地方,并修改,可以单独执行的查询语句可以尝试执行一下,方便定位:
image.png

6.查找表所属的用户:
image.png

7.修改为:
image.png

8.重新编译:
image.png

▲注意:
执行编译的登录用户一定要是当前的用户,使用sysdba可能会出现无法解析成员访问表达式[xxx]。

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

评论