Oracle迁移DM达梦数据库注意事项及常见问题

        公司有项目要求国产化适配,考虑到当前项目使用的Oracle数据库,为了减少迁移成本,数据库方面经过调研以及和客户确认,我们最终选择了达梦数据库(DM8),在数据迁移方面达梦做得比较完善,提供了DTS工具,能够很方便的进行数据迁移。如图1:可以看到支持很多数据库间的迁移。

在迁移之前,对于初步接触达梦数据的朋友应该注意一下内容:
1、迁移前根据实际需求确定好相关的数据库版本,选择合适的 jdk 版本(一般jdk8是OK的)。

2、达梦数据库安装时,注意考虑中文对应到 DM 都需要三倍长度,可以在初始化数据库的时候,达梦数据库选择字符串是否以字符为单位。(length_in_char=1试试)。

3、新建实例时注意修改兼容性参数COMPATIBLE_MODE=2。兼容性模式,0:不兼容,1:兼容     SQL92 标准,2:部分兼容 ORACLE,3:部分兼容 MS SQL SERVER,4:部分兼容                     MYSQL, 5:兼容 DM6,6:部分兼容 TERADATA。该参数默认为 0,修改方式有两种:

    在 dm.ini 文件中修改 COMPATIBLE_MODE 参数的值。 利用 SQL 语句修改 COMPATIBLE_MODE 参数的值。SP_SET_PARA_VALUE(2,'COMPATIBLE_MODE',2);或
ALTER SYSTEM SET 'COMPATIBLE_MODE'=2 SPFILE;该参数为静态参数,需要重启数据库后生效。

4、注意迁移的顺序。迁移时应先迁移序列、再迁移表、最后迁移视图、自定义类型、类、函数、存储过程、包等;对于数据量大的表单独迁移;对于大字段较多的表,需要修改批量迁移的行数,以免造成迁移工具内存溢出。

5、迁移完成后,一定要进行验证。

图1

选择Oracle迁移达梦,根据界面提示,完成数据库链接信息填写后即可选择迁移内容(图2):

图2

varchar2 (4000) 迁移后变成 (3900)

DM 数据库根据页大小,varchar 字段最大长度有限制。具体限制如下:

DTS 内部有字段类型映射,同时也会根据差异情况判断,在 8 kB 页大小情况下,将 Oracle 的 varchar2 (4000) 迁移成 varchar2 (3900)。 

违反引用约束
这种问题主要是由外键约束造成的,父表的数据没有迁移,先迁移了子表的数据,【解决方法】:迁移的时候先不迁移外键等约束,在选择好要迁移的表时,按照以下步骤进行迁移:第一次只选择表定义,不选择约束等;第一次迁移完成后(确保没有错误),第二次只选择数据;第三步选择约束、索引等;按照上面三步迁移,基本上都可以顺利迁移成功。

违反唯一性约束
这种情况是因为表中设置了唯一性约束或者主键约束,但是数据中有重复记录。有可能是原始库的约束被禁用了,或者数据重复迁移造成的。【解决方法】:在确定源数据没有问题的情况下,迁移的时候选择删除后再拷贝。

迁移视图提示:无效的用户对象
这个问题一般是因为在迁移视图之前,没有将视图依赖的表迁移过去,【解决方法】:严格按照迁移的顺序,先迁移表,然后再迁移视图、存储过程、函数的顺序迁移即可。

报错:精度必须大于标度

【解决方法】:Oracle 中 number (m,n) 允许 n>m,但是在 DM 中是不允许的,DM 中 m>=n,m 表示精度,n 表示标度。精度是一个无符号整数,定义了总的数字数;标度定义了小数点右边的数字位数。碰到这种问题一方面要思考一下 Oracle 里面列定义是否弄错了,如果是特意这样设计的,要搞清楚这个列到底需要存放什么样的数据,单独迁移这张表,对 DM 数据类型进行修改。

迁移过程中出现的错误:违反协议
一般是 Oracle 的 jdbc 驱动问题导致,尝试更换驱动包。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在将 Oracle 数据库迁移达梦数据库时,需要注意转换精度的问题。Oracle 数据库达梦数据库在数值类型的精度上存在差异,需要进行转换。 在 Oracle 数据库中,数值类型包括 NUMBER、FLOAT 和 BINARY_FLOAT 等。其中,NUMBER 类型可以指定精度和小数位数,例如 NUMBER(10,2) 表示精度为 10,小数位数为 2。FLOAT 和 BINARY_FLOAT 类型的精度由系统自动确定。 而在达梦数据库中,数值类型包括 NUMBER、FLOAT 和 DOUBLE 等。其中,NUMBER 类型可以指定精度和小数位数,例如 NUMBER(10,2) 表示精度为 10,小数位数为 2。FLOAT 和 DOUBLE 类型的精度由系统自动确定。 在将 Oracle 数据库迁移达梦数据库时,需要注意以下几点: 1. 转换精度:需要将 Oracle 数据库中的数值类型转换为达梦数据库中相应的数据类型,并注意转换精度的问题。在转换过程中,需要确保达梦数据库中的精度和小数位数足够满足业务需求。 2. 数据溢出:由于 Oracle 数据库达梦数据库的数值类型精度不同,可能会出现数据溢出的情况。在进行数据迁移前,需要检查 Oracle 数据库中的数据是否会出现溢出的情况,并根据需要进行数据类型的转换或调整达梦数据库的精度。 3. 数据类型的兼容性:Oracle 数据库达梦数据库的数据类型不完全相同,需要进行数据类型的兼容性检查。在进行数据迁移前,需要检查 Oracle 数据库中的数据类型是否与达梦数据库中的数据类型兼容,如不兼容,需要进行相应的数据类型转换。 总之,在进行 Oracle 数据库达梦数据库迁移时,需要仔细检查数据类型的精度和兼容性,以确保数据迁移的准确性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值