Oracle迁移到达梦

Oracle迁移到DM

1. 概述

Oracle到DM的迁移主要有以下几个方面的工作:
	1.分析带迁移系统,确定迁移对象。
	2.通过数据迁移工具DTS完成常规数据库对象及数据的迁移。
	3.通过人工完成PL/SQL的迁移,只需要做少量的修改即可。
	4.迁移完成后对迁移的结果进行校验,确保迁移的完整性和正确性。
	5.对应用系统进行迁移、测试和优化。

1.1 合理配置INI参数

​ DM的INI参数文件中针对从Oracle迁移到DM,有几个专门的参数,如下:

参数效果及建议SQL
COMPATIBLE_MODE是否兼容其它书记库模式。
0:不兼容
1:兼容SQL92标准
2:兼容Oracle
3:兼容MS SQL SERVER
4:兼容MySQL
5:兼容DN6
6:兼容Teradata
SP_SET_PARA_VALUE(2,‘COMPATIBLE_MODE’,2); 或 ALTER SYSTEM SET ‘COMPATIBLE_MODE’=2 SPFILE;
CALC_AS_DECIMAL整数相除是否保留小数位,修改为1

1.2 新建用户和表空间

​ 从Oracle迁移到DM,要求必须创建新的用户和表空间,不要把数据迁移到系统管理员SYSDBA用户下和MAIN表空间下。

2. 连接DTS

新建迁移作业:鼠标右键迁移–>选择新建迁移。

在这里插入图片描述

创建迁移名称,填写迁移描述。

在这里插入图片描述

进入欢迎页面。

在这里插入图片描述

选择迁移方式。

在这里插入图片描述

连接源端数据库。

在这里插入图片描述

连接目的端数据库。

在这里插入图片描述

进入迁移页面。

在这里插入图片描述

3. 常规对象及数据迁移

指定从数据源复制对象。

在这里插入图片描述

等待获取迁移对象。

在这里插入图片描述

选择迁移对象。

在这里插入图片描述

等待创建迁移任务。

在这里插入图片描述

审阅迁移任务,点击完成,开始迁移。

在这里插入图片描述

进行数据迁移。

在这里插入图片描述

查看迁移失败内容。

在这里插入图片描述

查看具体报错信息。

在这里插入图片描述

4. 常见故障案例

4.1 标度大于尺度

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

4.2 连接尚未建立或已经关闭

	这个问题有可能是因为Oracle数据库中存在非法的数据,如:-5486-12-31 00:00:00这样的非法的时间,在批量绑定插入的时候JDBC未做校验,服务器端检测到就会把这个连接剔除,就会报这个错误。新版的JDBC驱动(2019-7月以后)已经对此类问题进行了处理,增加了校验,碰到非法的数据会直接报错。碰到这种问题建议使用最新的JDBC驱动,替换掉迁移工具使用的JDBC驱动即可。

4.3 序列最大值超出达梦范围

	<最大值>指定序列能生成的最大值,如果忽略MAXVALUE子句,则降序序列的最大值缺省为-1,升序序列的最大值为9223372036854775807 (0x7FFFFFFFFFFFFFF F)。非循环序列在到达最大值之后,将不能继续生成序列数;但是Oracle中最大值28个9,迁移到DM时报序列最大值超出达梦范围的错误(最新的DTS版本已经直接将超过DM最大值的序列的最大值转换成9223372036854775807)。

4.4 字符串截断

	一般从Oracle迁移到DM的时候,出现字符串阶段的一般都是字段中含有中文,出现这种问题时因为DM初始化的时候选择的字符是Unicode(即utf-8),该字符集的国际标准是一个汉字占3个字节,而Oracle中默认情况下一个汉字占2个字节,此时迁移的时候就会报该错误。
	解决方案:
	1.DM数据库初始化的时候,字符集选择gb18030
	2.DM数据库初始化的时候,选择VARCHAR类型以字符为单位
	3.因为前面2中都需要重新初始化数据库,第三种不需要重新初始化数据库即可解决,即在选择迁移方式的时候,选择字符长度隐射关系为2

4.5 记录超长

	DM数据库在初始化的时候,选择的页大小影响后面表每行数据的长度,表每行的长度之和(普通数据类型)不能超过一页大小,如果超过1页大小即报记录超长的错误。
	解决方法:
	1.找到表中VARCHAR类型比较长的(如carchar2(8000)这种),修改为text类型
	2.初始化的时候页大小选择32k。(对于表中varchar2类型较长,并且字段较多的情况不太合适,这种情况采用方法1解决即可)

4.6 违反唯一约束性

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

在迁移界面中,选中要迁移的表,然后点击转换。

在这里插入图片描述

在弹出的窗口中选择删除后拷贝。

在这里插入图片描述

4.7 违反引用约束

在这里插入图片描述

	这种问题主要是由外键约束造成的,父表的数据没有迁移,先迁移了子表的数据。
	解决方法:
	迁移的时候先不迁移外键等约束,在选择好要迁移的表时,点击转换。

第一次只选择表定义,不选择约束等。

在这里插入图片描述

第一次迁移完成后(确保没有错误),第二次只选择数据。

在这里插入图片描述

第三步选择性约束、索引等。

在这里插入图片描述

4.8 视图迁移过程中顺序问题:无效的用户对象

在这里插入图片描述

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

4.9 错误码以错误描述信息的对应

错误码错误信息
0字符串截取
-2665记录超长
-6602违反唯一性约束
-6607违反引用约束
-2107无效的对象

码以错误描述信息的对应

错误码错误信息
0字符串截取
-2665记录超长
-6602违反唯一性约束
-6607违反引用约束
-2107无效的对象

详情请参考:https://eco.dameng.com

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值