数据迁移和常见问题解决-从oracle到DM8

本文详细介绍了从Oracle 11g到DM8的数据库迁移过程,包括使用DMDTS工具进行数据迁移、设置关键初始化参数、创建用户表空间以及迁移步骤中的常见问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

ORACLE 到 DM 的移植主要有以下几个方面的工作:

1. 分析待移植系统,确定移植对象。

2. 通过数据迁移工具 DTS 完成常规数据库对象及数据的迁移。

3. 通过人工完成 PL/SQL 的移植,只需要做少量的修改即可。

4. 移植完成后对移植的结果进行校验,确保移植的完整性和正确性。

5. 对应用系统进行移植、测试和优化

本文主要讲诉DTS迁移过程和常见问题

二、迁移环境 

软件 版本
源数据库Oracle 11g
目标数据库DM 8
操作系统   Windows 10
迁移工具DM 数据迁移工具 (DM DTS)

 

注意事项:

1、选择合适的初始化参数

初始化库,关键的点在于对初始化参数的设置,本章节明确是从 Oracle 移植到 DM 数

据库,所以具体的初始化参数建议如下:

(1)关于页大小 PAGE_SIZE。Oracle 也叫块大小(block),在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,从 Oracle 移植到 DM,建议设置页大小为 8KB,一旦创建好了数据库,在该库的整个生命周期内,页大小都不能够改变。除了每个字段的最大长度限制外,每条记录总长度不能大于页面大小的一半。如果系统中存在或者以后可能存在含有较长的字符串类型的表,建议该参数设置为 16 或者 32。页大小设置越大,最后数据文件的物理大小就会越大,系统运行时,每次从磁盘调入内存的数据单位也就越大,所以此处要慎重。

(2)关于簇大小 EXTENT_SIZE。数据文件使用的簇大小,即每次分配新的段空间时连续的页数,只能是 16 页或 32 页,缺省使用 16 页,从 ORACLE 移植到 DM 使用默认值就可以。

(3)关于大小写敏感 CASE_SENSITIVE。DM 为了兼容不同的数据库,在初始化数据库的时候有一个参数字符串比较大小写敏感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。建议 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感,ORACLE 迁移过来的系统,使用大小写敏感,以便和原来系统匹配。

(4)关于字符集 CHARSET。建议采用默认值 GB18030,如果需要国际字符可以采用Unicode,GB18030 数字字母占 1 个字节,普通汉字占 2 个字节,部分繁体及少数民族文字占 4 字节,Unicode 在达梦中采用 UTF-8 编码格式,欧洲的字母字符占 1 到 2 个字节,亚洲的大部分字符占 3 个字节,附加字符为 4 个字节。如果只存储中文和字母数字,一般来说 GB18030 更节省空间一些。

(5)BLANK_PAD_MODE 空格填充模式,默认是 0,从 Oracle 移植要设置为 1。

2、创建用户和表空间

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

3、移植状态要确定

严禁在生产环境中直接迁移。因为移植首先是一个测试的工作,所以移植应该避免从 Oracle 生产环境数据库中直接进行移植,需要提前向应用开发商提出需要搭建一个测试环境,准备 Oracle 需要移植的环境和数据。直接从生产库上进行数据移植,有很多风险存在,例如会影响生产库的效率,引发崩溃的可能等等。

推荐使用 pl/sql developer 工具进行移植测试工作。也可以使用 Oracle 自带的客户端

三、迁移过程

第一步:新建工程与迁移

第二步:选择迁移方式

第三步:选择数据源和目的库

第四步:指定对象复制或查询

第五步:选择迁移对象

第六步:审阅迁移任务

第七步:验证数据

 

新建工程与迁移:

DM DTS 工具存放在 DM 数据库安装目录下 tool 文件夹,执行 ./dts 即可运行 DM DTS 工具。新建工程,选择迁移,并右键新建迁移。

在新建工程对话框中填写工程名和工程描述信息,点击【确定】按钮,成功添加了一个工程。如下图所示:

展开工程节点,选择【新建迁移】。输入迁移名称:test,迁移描述:从 Oracle 迁移到 DM,点击【确定】按钮,完成迁移的创建。如下图所示:

 

 

选择迁移方式

默认打开目录为 DM DTS 工具介绍,选择【下一步】。迁移方式选择【Oracle–>DM】方式,如下图所示:

 

选择数据源和目的库:

分别输入主机名 (IP) 端口(Oracle 默认端口 1521,DM 默认端口 5236),服务名(Oracle 默认服务名 ORCL),角色(默认),用户名和口令,如下图所示:

 

 

指定对象复制或查询:

选择源模式和目的模式。从数据源复制对象,默认模式及模式对象、目录、同义词、上下文。

迁移对象,默认在 DM 数据库创新同名模式,并迁移表、视图、物化视图、序列、存储过程/函数、触发器、包、同义词、自定义类型。如需调整,用户可根据自身情况勾选,如下图所示:

 

选择迁移对象

此处选择要迁移的具体表格、视图、存储过程等。如需调整,用户可根据名称具体选择,如下图所示:

注意:

转换按钮可设置迁移策略,包括表定义、主键、约束条件、索引、数据、读写行数设置等参数,可供用户调整策略。

列映射选项中可调整列名、数据类型、精度、主键(唯一)、空值限制等参数,用户可自行调整。

 

 

审阅迁移任务

用户可查看迁移过程重要参数和修改条件,如需修改,可执行上一步进行修改,确认无误后,点击【完成】,如下图所示:

 

验证数据

完成数据迁移后,我们还需对迁移的数据进行验证,表、视图、存储过程、序列都存在且与原数据一致,迁移完成。如下图所示:

 

四、迁移过程中常见问题

1、标度大于精度

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

2、连接尚未建立或已经关闭

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

3、序列最大值超出达梦范围

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

4、字符串截断

一般从 oracle 迁移到 DM7 的时候,出现字符串截断的一般都是字段中含有中文,出现这种问题是因为 DM7 初始化的时候选择的字符集是 Unicode(即 utf-8),该字符集的国际标准是一个汉字占 3 个字节,而 oracle 中默认情况下一个汉字占 2 个字节,此时迁移的时候就会报错。

遇到该错误有 3 种解决办法。

1 是在初始化的时候,字符集选择 gb18030

2 是初始化数据实例时选择 VARCHAR 类型以字符

3 是选择迁移方式的时候,选择字符长度隐射关系为 2。

 

5、记录超长

DM7 在初始化的时候,选择的页大小影响后面表每行数据的长度,表每行的长度之和(普

通数据类型)不能超过一页大小,如果超过1 页大小即报记录超长的错误。

解决办法:

(1) 找到表中 varchar 类型比较长的(如 varchar2(8000)这种),修改成 text 类型; (2) 初始化的时候页大小选择 32k。(对于表中 varchar2 类型较长,并且字段较多的情 况不太适合,这种情况采用方法 1 解决。)

6、违反唯一性约束

这种情况是因为表中设置了唯一性约束或者主键约束,但是数据中有重复记录造成的。

这种情况有可能是原始库的约束被禁用了,或者数据重复迁移造成的。

解决办法: 在确定源数据没有问题的情况下,迁移的时候选择删除后再拷贝,如下图:

 在迁移界面中,先中要迁移的表,然后点击转换在弹出的窗口中选择删除后拷贝,如下图:

 

这样既可迁移成功。

7、违反引用约束

这种问题主要是由外键约束造成的,父表的数据没有迁移,先迁移了子表的数据。

解决办法:

(1)第一次迁移只选择表定义,不选择约束等

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

(3)第三步选择约束、索引等

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

这个问题一般是因为在迁移视图之前,没有将视图依赖的表迁移过去。

解决办法: 严格按照迁移的顺序,先迁移表,然后再迁移视图、存储过程、函数等的顺序迁移即可。

https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值