【达梦数据库】异构数据库迁移记录--gaussdb迁移达梦篇

目录

迁移环境

迁移顺序

指定连接源库的驱动

迁移报错以及处理思路

对象[xxx]DEFAULT约束表达式无效

 无效的模式名[xxx]


迁移环境

数据库类型数据库字符集大小写是否敏感
gaussdb (源库)GBK敏感
达梦 (目标库)GB18030敏感

迁移顺序

迁移准备:在目标库创建迁移用户/表空间并授权、统计要迁移的源库对象数量

迁移第一阶段:表定义、注释和数据

迁移第二阶段:索引、主键、约束

迁移第三阶段:其他非表对象

迁移最后阶段:收集统计信息

         迁移实施的详细步骤这里不再赘述,可以参考官方手册和我前面迁移Oracle到达梦的步骤截图,以下将重点讲述从guassdb迁移到达梦需要注意的地方和一些报错的处理。

指定连接源库的驱动

       我们知道gaussdb是基于PG数据库来进行开发的,而达梦的迁移工具dts的迁移方式中并没有单独gaussdb-DM的选项,因此在发起迁移的时候,我们是选择PostgreSQL-DM的方式,指定gaussdb的驱动。

 选择迁移方式为PostgreSQL==》DM

 指定驱动为gaussdb的驱动

迁移报错以及处理思路

对象[xxx]DEFAULT约束表达式无效

报错原因

这个报错通常是由于源库使用的一些函数在达梦中不兼容,需要进行相应的等效替换

处理思路

下面通过一个实际的案例来说明遇到此类问题该如何解决

      从报错的详细内容可以得知,在达梦数据库中使用跟源库gaussdb一样的建表sql来创建表时,由于uploadtime这个字段使用的DEFAULT约束函数在达梦中并不存在,导致创建表失败了。

        那么怎么知道在达梦数据库中有哪个函数的功能是跟pg_systimestamp()相同的呢?查看官方的函数使用手册是最便捷的方式。

       首先我们先到gaussdb的官网,了解pg_systimestamp()的作用是什么

        在达梦的官网中查找可以实现相同功能的函数

       如果还是不确定该函数是否能满足原来字段约束的需求的话,可以在达梦数据库中进一步的验证,例如

select SYSTIMESTAMP() from dual;

 

        确认了可以实现等效替换的函数之后,便可以将原来建表失败的sql进行对应函数的修改,在达梦数据库中执行建表sql,再发起后面迁移表数据的步骤。

 无效的模式名[xxx]

 报错原因

常见的原因有两种

1) 要迁移的模式没有创建

2) 迁移的目标库为大小写敏感且模式名为大写,但是建表语句指定的模式名为小写

 处理思路

     首先检查报错的模式在目标数据库中有没有创建,没有的话先创建再重新发起一次迁移任务。建议在正式迁移前,就将要迁移的模式创建好。例如要迁移的库/用户名为TEST,那么我们就在目标创建TEST用户即可,达梦会自动创建一个同名的模式名为TEST。

      需要注意的是,不管数据库是否大小写敏感,创建的用户和模式名,都会自动转为大写的形式存在于数据库中。

      在排除掉了第一种情况(同名的模式已创建)后,我们再来检查当前迁移的目标达梦数据库是否为大小写敏感。

       当确认了迁移的目标达梦数据库是大小写敏感,且建表语句指定了模式名是小写的情况下,我们单独创建小写的模式即可,不创建同名的用户了,因为一个数据库中不建议存在名称相同但有大写和小写两种形式的模式。

      单独创建小写的模式需要注意将该模式指定到其他用户下,如果不指定的话就是默认其归属于SYSDB用户,不便于后期的数据库管理。例如创建一个名为aa的模式,指定该模式的拥有者为BB,那么在aa模式下创建的表都会存放在BB用户的默认表空间中。

CREATE SCHEMA "aa" AUTHORIZATION "BB";

创建了小写的模式后,重新发起迁移任务,报错解决。

想要了解更多内容可访问达梦技术社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值