注册
Oracle到DM8数据迁移实战
专栏/技术分享/ 文章详情 /

Oracle到DM8数据迁移实战

秧秧 2026/07/23 98 0 0
摘要

一、迁移场景与环境说明

本次迁移的源端与目标端环境如下:
源数据库:Oracle 11g,部署于Win11操作系统
目标数据库:DM8,同样运行于Win环境
迁移工具:达梦自带的数据迁移工具DTS

二、迁移前准备

2.1 源端Oracle准备

# 查看数据文件位置
select file_name from dba_data_files;
# 创建测试表空间
 create tablespace tp_test datafile ' \APP\30238\ORADATA\ORCL\TP_TEST. DBF' size 100M;
# 创建用户
create user tp_test identified by "123456" default tablespace tp_test temporary tablespace TEMP:
# 授予DBA权限(生产环境建议按需赋权)
grant dba to test;
# 连接新用户创建测试表
conn tp_test;
create table test01(id number(10), name varchar(10));
# 插入测试数据
insert into test01 values (1,'张三');
insert into test01 values (2,'李四');
insert into test01 values (3,'王五');
insert into test01 values (4,'赵六');
insert into test01 values (5,'刘琴');
insert into test01 values (6,'李帅');
commit;

2.2 目标端DM8准备

在达梦数据库中创建对应的用户和表空间,注意用户与表空间的规划。

# 创建表空间(建议大小略大于源端)
CREATE TABLESPACE "TEST" DATAFILE '/home/dmdba/dmdbms/data/DAMENG/TEST.DBF' SIZE 150;
# 创建用户
CREATE USER "TEST" IDENTIFIED BY "SYSDBA_123a" DEFAULT TABLESPACE "TEST";
# 授予DBA权限
GRANT dba TO TEST;

如果目标端用户已提前创建,迁移时可不勾选“创建模式”,避免冲突.

2.3 DM8兼容性参数调整

为使DM8更好地兼容Oracle语法和数据类型,需调整以下两个关键参数:

# 设置兼容模式为Oracle(2代表Oracle兼容模式)
SP_SET_PARA_VALUE(2,'CALC_AS_DECIMAL',2);
# 设置计算精度处理方式
SP_SET_PARA_VALUE(2,'CALC AS_DECIMAL',1);

COMPATIBLE_MODE为静态参数,修改后必须重启数据库服务才能生效。重启后可通过以下语句验证:

SELECT PARA NAME, PARA VALUE FROM VSDM INI WHERE PARA NAME 'CALC AS DECIMAL' OR PARA NAME 'COMPATIBLE MODE';

三、使用DTS工具执行迁移

达梦DTS工具提供图形化向导式迁移,操作直观且支持多种数据源。
3.1 创建工程与迁移任务
新建工程:点击“新建工程”,输入工程名如“oracle-dm”
新建迁移:在工程上右键选择“新建迁移”,填写迁移名称和描述
选择迁移方式:选择“Oracle到DM”
3.2 配置数据源连接
源端Oracle信息
image.png
目标端DM8信息:
image.png

3.3 选择迁移对象

勾选源端待迁移的模式(Schema),如“TEST”
选择具体需要迁移的表、视图、存储过程等对象
点击“分析源对象”可统计待迁移对象数量
94fd701f89d22c560b34cb4ad9b0647e.jpg

3.4 配置映射关系与迁移策略

点击“转换”可对每个表进行精细化配置:
迁移策略选项:
表定义:是否迁移表结构。
主键/约束/索引:可选择迁移方式,建议大数据量表启用“异步索引”(先迁数据后建索引)。
数据:主键冲突时可选择“覆盖”或“跳过”。
读写行数:大字段表可调整“源一次读取行数”和“目的一次提交行数”,避免内存溢出。
字符长度扩展:
若源端为GBK字符集、目标端为UTF-8,建议在迁移选项中设置字符长度系数(如1.5或2),防止中文字符截断。

3.5 审阅与执行

1.审阅迁移任务摘要,确认配置无误
2.点击“完成”开始迁移
3.等待迁移进度完成
c84a2995752254409591d5d916a820d2.png
75338809c5636a4846696f9f7e5ea39f.png

四、迁移后校验与常见问题

4.1 数据验证

迁移完成后,务必进行严格验证:

# 对比对象数量
SELECT OBJECT_TYPE, COUNT(*) 
FROM ALL_OBJECTS 
WHERE OWNER='TEST' 
GROUP BY OBJECT_TYPE;
# 验证关键表数据行数
SELECT COUNT(*) FROM TEST.TEST;

4.2 常见问题及解决方案

根据实践经验,迁移中可能遇到以下问题:

问题现象 可能原因 解决方案
字符串截断/数据溢出 源端(Oracle)与目标端(DM)的字符集不一致(如源为GBK,目标为UTF-8),或字段长度/精度不兼容。 1. 迁移前,在DTS工具的迁移选项中设置字符长度系数(建议设为1.52),为字符列预留空间。2. 检查表定义,若Oracle的NUMBER(m,n)m < n,需调整DM侧定义为NUMBER(m,n)以确保精度兼容。
外键约束失败 迁移数据时,子表的数据先于父表被导入,导致外键校验失败。 采用分步迁移策略:1. 仅迁移表结构(不包含外键)。2. 迁移所有数据。3. 最后单独迁移或手动创建外键约束。
连接超时或迁移卡住 网络不稳定,或单次读取/提交的数据量过大导致内存溢出(OOM)。 1. 在DTS的“转换”->“映射关系”中,调小 “源一次读取行数”“目的一次提交行数” (例如设为500或1000)。2. 检查DTS工具的启动脚本(如dts.ini),适当调大JVM内存参数`。
序列(Sequence)值超范围 Oracle序列的最大值可能超过了DM序列允许的最大值。 新版DTS通常会自动进行转换。若遇到问题,可在迁移完成后,在DM侧手动调整序列的MAXVALUE,或将其设置为NOMAXVALUE
视图或存储过程无效 迁移时,视图依赖的表或基础对象尚未被迁移。 严格控制迁移顺序:先迁移表结构,再迁移数据,然后迁移索引和约束,最后迁移视图、存储过程、函数等依赖对象。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服