数据迁移
迁移流程

需求确认
- 场景分类:迁移涉及容灾备份、应用改造/替代、数据库版本升级/回退、数据库替代、业务分流等不同场景。
- 工具选择依据:需根据场景特点(数据流向、停机窗口、同步需求、数据处理复杂度)匹配迁移工具及方案。
数据库调研
- 调研目标:确保迁移工具及方案满足需求,需全面分析源端与目标端环境。
- 关键调研维度:
- 环境信息
- 源/目标端操作系统、网络配置(端口开放情况)、安全策略、可视化界面支持能力。
- 服务器资源(CPU、内存)、存储容量、端口状态。
- 业务系统信息
- 业务类型、运行时段、停机窗口时长、数据量级、数据增量频率、并发访问量。
- 数据库信息
- 数据总量、字符编码规则、归档保留策略、数据库对象数量(表/索引/视图等)、表空间分布。
- 环境信息
迁移评估
- 达梦工具支持:
- DTS(数据迁移工具)
- 提供异构数据源兼容性评估,通过图形化向导完成迁移可行性分析。
- DEM(达梦企业管理器)
- 支持在线采集评估,自动生成兼容报告,覆盖Oracle、MySQL、SQL Server等数据库迁移至达梦的场景。
- SQLark 百灵连接
- 生成源库画像,识别大表/大字段表等迁移难点,推荐迁移策略(如分批次迁移、并行处理)。
- DTS(数据迁移工具)
- 人工评估补充:需单独评估大表/大字段表的迁移策略(如独立迁移、分片处理)。
移植工具选择
达梦提供四类工具,覆盖不同迁移场景:
数据迁移工具 DTS

- 功能:支持跨数据库(Oracle/MySQL/DM等)全量迁移,含对象迁移(视图/存储过程/触发器等)、数据类型自动映射、条件筛选迁移。
- 特性:向导式操作、Web端监控、迁移评估功能。
- 场景:静态全量迁移,需停机窗口,源端无数据变更。
SQLark 百灵连接

- 功能:全流程迁移服务,含评估、实施、校验,支持断点续迁(Oracle-DM)。
- 特性:自动化语法解析、分布式迁移、大表处理优化。
- 场景:Oracle/MySQL/PostgreSQL全量迁移至达梦。
数据复制软件 DMDRS

- 功能:实时数据同步,支持全量+增量、跨网闸/文件摆渡、目标端为Kafka/Redis等。
- 特性:非介入式日志捕获、主备同步、秒级延迟。
- 场景:平滑迁移(短停机)、灾备、业务分流。
数据集成软件 DMDIS

- 功能:支持异构数据源(文件/WebService/Restful)抽取、转换、加载,内置字符集/日期格式转换规则。
- 特性:二次开发接口、作业调度监控。
- 场景:跨系统数据共享、数据清洗、周期性集成。
制定移植计划
- 依据:需求分析(停机窗口/数据量/业务类型) + 数据库调研(环境/业务/对象规模)。
- 目标:选择工具组合,规避兼容性问题,规划迁移阶段(如先迁移核心表)。
移植实施
- 目标库预配置:按源库结构创建实例、表空间、用户,提升兼容性。
- 工具自动转换:多数对象(表/索引)自动迁移,少数语法差异需手动调整(如存储过程)。
移植结果校验
- 校验维度:
- 对象完整性:表/视图/存储过程数量一致。
- 数据一致性:行数、关键字段值比对。
- 业务功能验证:通过测试用例覆盖核心流程。
移植后收尾工作
- 索引补录:重建缺失索引以优化性能。
- 统计信息更新:确保优化器生成高效执行计划。
- 备份与脚本整理:备份目标库,归档迁移脚本供后续维护。
应用移植与优化
- 连接切换:修改应用配置指向达梦数据库,通常无需代码修改。
- 性能测试:验证功能正确性,优化慢SQL(如索引调整、SQL重写)。
- 高可用验证:测试故障切换、负载均衡等场景。
从 Oracle 移植到 DM
构建了一套 Oracle 19C 的单机示例库,并介绍利用 DTS 工具从 Oracle 19C 移植 monei 用户下的所有对象到 DM8 数据库的详细步骤
Oracle服务器信息
| 调研项 | 调研结果 |
|---|---|
| 数据库后台操作系统 | Red Hat Linux |
| 数据库架构 | 单机 |
| 数据库版本 | Oracle 19C |
| 待迁移数据库名 | monei |
| 待迁移的模式名 | monei |
| IP/端口信息 | 192.168.123.14/1521 |
| 用户名/密码 | monei/monei |
| 字符集编码 | 简体中文 GBK |
| 需要移植的对象 | 表(数据量)、物化视图、触发器、存储过程、函数 |
数据库对象
[ormy:oracle]:/home/oracle>sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 15 22:23:30 2025 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> select object_type,count(*) from dba_objects where owner='MONEI' group by object_type; OBJECT_TYPE COUNT(*) ---------------------------------------------- ---------- INDEX 5 TRIGGER 1 PACKAGE BODY 1 PROCEDURE 1 PACKAGE 1 FUNCTION 1 LOB 1 SEQUENCE 1 TABLE 2 VIEW 1 10 rows selected.复制
其它 Oracle 端信息统计可参考如下 SQL:
SQL> --字符集编码 SELECT value FROM NLS_Database_Parameters WHERE PARAMETER='NLS_NCHAR_CHARACTERSET'; select userenv('language') from dual;SQL> VALUE -------------------------------------------------------------------------------- AL16UTF16 SQL> USERENV('LANGUAGE') -------------------------------------------------------------------------------- AMERICAN_AMERICA.AL32UTF8 SQL> SQL> SQL> --是否以字节为单位、大小写敏感 Show parameter NLS_LENGTH_SEMANTICS;SQL> NAME TYPE ------------------------------------ ---------------------- VALUE ------------------------------ nls_length_semantics string BYTE SQL> --归档保留策略 select * from v$archived_log;SQL> no rows selected SQL> --定时作业 select * from user_jobs;SQL> no rows selected SQL> --权限查询语句 --查看用户系统权限 select PRIVILEGE from dba_sys_privs WHERE GRANTEE='MONEI';SQL> SQL> PRIVILEGE -------------------------------------------------------------------------------- CREATE TABLE CREATE VIEW CREATE PROCEDURE CREATE SESSION SQL> --查看用户对象权限 select * from dba_tab_privs WHERE GRANTEE='MONEI'; SQL> no rows selected SQL> --查看用户角色权限 select GRANTED_ROLE from dba_role_privs where grantee='MONEI';SQL> GRANTED_ROLE -------------------------------------------------------------------------------- RESOURCE CONNECT SQL> --表空间相关信息查询语句 --查询每个表空间的数据文件路径、实际使用大小,上限等及所属用户 select ee.username,dd.* from (select aa.*, bb.file_name, cc.NEXT_EXTENT from (select tbs_used_info.tablespace_name, tbs_used_info.alloc_mb, tbs_used_info.used_mb, tbs_used_info.max_mb, tbs_used_info.free_of_max_mb, tbs_used_info.used_of_max || '%' used_of_max_pct from (select a.tablespace_name, round(a.bytes_alloc / 1024 / 1024) alloc_mb, round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024) used_mb, round((a.bytes_alloc - nvl(b.bytes_free, 0)) * 100 / a.maxbytes) used_of_max, round((a.maxbytes - a.bytes_alloc + nvl(b.bytes_free, 0)) / 1048576) free_of_max_mb, round(a.maxbytes / 1048576) max_mb from (select f.tablespace_name, sum(f.bytes) bytes_alloc, sum(decode(f.autoextensible, 'YES', f.maxbytes, SQL> SQL> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 'NO', f.bytes)) maxbytes from dba_data_files f group by tablespace_name) a, (select f.tablespace_name, sum(f.bytes) bytes_free from dba_free_space f group by tablespace_name) b where a.tablespace_name = b.tablespace_name(+)) tbs_used_info order by tbs_used_info.used_of_max desc) aa, dba_data_files bb, dba_tablespaces cc where aa.tablespace_name = bb.tablespace_name and aa.tablespace_name = cc.tablespace_name) dd right join dba_users ee on dd.tablespace_name=ee.default_tablespace where ee.username in ('MONEI'); USERNAME TABLESPACE ALLOC_MB USED_MB MAX_MB FREE_OF_MAX_MB USED_OF_MA FILE_NAME NEXT_EXTENT ---------- ---------- ---------- ---------- ---------- -------------- ---------- ---------------------------------------- ----------- MONEI USERS 5 3 32768 32765 0% /home/oracle/app/oracle/oradata/MONEI/us ers01.dbf SQL> SQL> select * from (select owner, tablespace_name, sum(b) GB from (select owner, t.segment_name,t.partition_name,round(bytes / 1024 / 1024/1024 , 2) b,tablespace_name from dba_segments t) where owner in ('MONEI') group by owner,tablespace_name); 2 3 4 5 6 7 OWNER TABLESPACE_NAME GB -------------------- -------------------- ---------- MONEI USERS 0 SQL>复制
目标端DM8
启动dts
迁移管理
新建工程和迁移
点击按钮创建新的工程,输入工程名和工程描述,点击【确定】,即可创建工程,如下图所示:

迁移评估
右键选择【新建评估】,输入评估名称和评估描述,即可创建评估,如下图所示:
选择ORACLE-DM数据库迁移评估
输入数据源连接信息
评估选项设置
选择需要迁移的模式对象
选择模式对象下的对象
评阅评估任务
执行评估任务
查看评估报告
新建迁移任务
输入源端连接信息
输入目标端连接信息
迁移选项

迁移模式选择
获取迁移对象
审阅迁移任务
执行迁移任务,可以看到任务总数和完成度
数据对比
新建数据对比
数据源信息填写
目标端信息填写
对比选项
指定模式对象
选择对比对象
对比任务审阅
执行数据对比,查看对比不一致数量
登录目标端查看test01数据
登录源端查看test01数据
从 MySQL 移植到 DM
操作和Oracle中相似,需要mysql中创建
mysql> CREATE USER 'root'@'192.168.123.10' IDENTIFIED BY '!QAZ2wsx'; Query OK, 0 rows affected (0.01 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.123.10'; Query OK, 0 rows affected (0.01 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql>复制
目标端中选择mysql-dm迁移
通过评估-迁移-对比 完成数据库迁移
从 SQL Server 移植到 DM
操作和Oracle中相似,需要mysql中创建
确认迁移对象
目标端中选择SQL Server-dm迁移
通过评估-迁移-对比 完成数据库迁移
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





