目录
迁移环境
数据库类型 | 数据库字符集 | 大小写是否敏感 |
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";
创建了小写的模式后,重新发起迁移任务,报错解决。
想要了解更多内容可访问达梦技术社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台