SQL Server 到达梦数据迁移实施指南:字段、序列和 CDC 怎么落地

SQL Server 到达梦数据迁移实施指南,覆盖 Canal、Kettle、DataX 和 DataMover 的选型差异,说明源端和目标端权限、DataMover 部署、内存配置、任务创建和结果校验。适合国产化替代前完成一轮可复制的迁移同步实施。

先说现场

SQL Server 到达梦的难点集中在 identity、datetime2、uniqueidentifier、nvarchar、schema 和大小写。实施时先选 2 到 3 张典型表,确认字段类型、主键和后续增量能力,再扩大范围。

方案怎么选

方案适合场景主要限制
CanalMySQL 到下游的增量解析和分发对 SQL Server 到 DM8 场景不是首选
Kettle批量抽取、转换和清洗偏 ETL 流程,长期 CDC 和任务状态管理较弱
DataX一次性离线迁移需要维护 JSON,缺少完整 Web 和 CDC 管理
DataMover全量、增量字段和 CDC 的私有化同步需要部署 Manager、Worker 和元数据库

如果目标是国产化替换,并且后续还要持续同步或追平变更,DataMover 的全量、增量字段和 CDC 可以放在同一套可视化管理中。

DataMover 是什么

DataMover 是一个私有化部署的数据迁移同步工具:

  • 普通任务处理全量和基于增量字段的定时同步。
  • 实时任务处理 SQL Server CDC,捕获 INSERT、UPDATE、DELETE。
  • Web 界面配置数据源、表映射、字段映射、同步策略和执行监控。
  • Manager 负责调度,Worker 负责实际读取和写入。

部署拓扑

浏览器
  |
Manager: 8000
  |
Worker: 8011
  |
元数据库:MySQL 5.7+ 或 PostgreSQL 12+

部署拓扑

curl -fsSL https://down.datamover.cn/install.sh | bash

下载页:https://datamover.cn/download.html
文档页:https://datamover.cn/doc/

准备阶段:测试表建表和造数

先在 SQL Server 源端创建测试表并生成数据。达梦目标端可以用 DataMover 自动建表,也可以先按预期结构创建。

SQL Server 源端测试表

CREATE TABLE dm_demo_user (
  id BIGINT IDENTITY(1,1) PRIMARY KEY,
  username NVARCHAR(64),
  phone NVARCHAR(32),
  status NVARCHAR(16),
  amount DECIMAL(18,2),
  created_at DATETIME2,
  updated_at DATETIME2,
  row_guid UNIQUEIDENTIFIER DEFAULT NEWID()
);

;WITH N AS (
  SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n
  FROM sys.all_columns a
  CROSS JOIN sys.all_columns b
)
INSERT INTO dm_demo_user (username, phone, status, amount, created_at, updated_at)
SELECT
  'user_' + CAST(n AS NVARCHAR),
  '1380000' + RIGHT('0000' + CAST(n AS NVARCHAR), 4),
  CASE WHEN n % 2 = 0 THEN 'active' ELSE 'inactive' END,
  ROUND(RAND() * 100000, 2),
  SYSDATETIME(),
  SYSDATETIME()
FROM N
WHERE n <= 10000;

达梦目标端预期表结构

CREATE TABLE dm_demo_user (
  id BIGINT PRIMARY KEY,
  username VARCHAR(64),
  phone VARCHAR(32),
  status VARCHAR(16),
  amount NUMERIC(18,2),
  created_at TIMESTAMP,
  updated_at TIMESTAMP,
  row_guid VARCHAR(36)
);

源库和目标库权限

端需要权限原因
SQL Server 源端读取表结构、业务数据和元数据;CDC 场景还要 CDC 相关权限数据源连接、选表、字段映射和增量读取
达梦目标端建表、写入、更新、删除自动建表和任务写入
元数据库创建数据库和表权限保存任务、位点和执行记录
Worker访问源端、目标端和元数据库实际执行任务

SQL Server CDC 前需要确认数据库或表已启用 CDC,并使用具备相关权限的账号。

SQL Server 源端权限检测

SELECT name, type_desc
FROM sys.database_principals
WHERE name = 'datamover_user';

SELECT permission_name
FROM sys.fn_my_permissions(NULL, 'DATABASE')
WHERE permission_name IN ('SELECT', 'VIEW DEFINITION', 'CONNECT');

SQL Server 源端授权示例

CREATE LOGIN datamover_user WITH PASSWORD = 'change_me';
CREATE USER datamover_user FOR LOGIN datamover_user;
ALTER ROLE db_datareader ADD MEMBER datamover_user;
GRANT VIEW DEFINITION TO datamover_user;

USE your_database;
EXEC sys.sp_cdc_enable_db;

达梦目标端权限检测

SELECT grantee, table_name, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'DATAMOVER_TARGET';

达梦目标端授权示例

CREATE USER DATAMOVER_TARGET IDENTIFIED BY "change_me";
GRANT RESOURCE TO DATAMOVER_TARGET;
CREATE SCHEMA DATAMOVER_SYNC AUTHORIZATION DATAMOVER_TARGET;

DataMover 配置选择和内存配置

配置建议说明
数据批大小默认 5000先跑通再调优
抽取方式首次全量选择 全量日常同步选择 增量
增量字段优先自增主键或更新时间字段应有索引
调度方式一次性或间隔性按业务节奏配置
Worker JVM数据量大时调大避免频繁 GC
目标端索引大批量迁移可评估迁移后再建索引减少写入放大

创建普通任务

  1. 添加 SQL Server 源端数据源,测试连接通过。
  2. 添加达梦目标端数据源,确认建表和写入权限。
  3. 新建普通任务,选择源端和目标端。
  4. 进入表映射,选择试迁表。
  5. 检查字段映射和同步策略。
  6. 保存并启动。

创建普通任务

字段映射重点

SQL Server 类型/特性达梦处理要确认什么
IDENTITY序列或 identity当前值校准
DATETIME2达梦时间类型精度和时区
UNIQUEIDENTIFIERVARCHAR 或 UUID 类型长度和业务语义
NVARCHAR(n)VARCHAR(n)长度、字符集
schema/大小写达梦 schema表名和字段名是否被正确识别

增量字段和 CDC

普通增量字段只能感知新增和修改,无法感知物理删除。需要同步删除时,使用实时任务 CDC。

普通增量同步策略

SQL Server CDC 前检查:

  • 数据库或表是否启用 CDC。
  • 源端账号权限是否足够。
  • Worker 是否能读取 CDC 日志。

CDC 策略配置入口

结果验证

SELECT COUNT(*) FROM source_table;
SELECT COUNT(*) FROM target_table;

SELECT MIN(id), MAX(id) FROM source_table;
SELECT MIN(id), MAX(id) FROM target_table;

SELECT status, COUNT(*) FROM source_table GROUP BY status;
SELECT status, COUNT(*) FROM target_table GROUP BY status;

SELECT * FROM source_table WHERE id IN (1, 100, 1000);
SELECT * FROM target_table WHERE id IN (1, 100, 1000);

常见坑

identity 迁移后新数据主键冲突

原因是当前值没有同步到达梦侧序列。全量迁移后查询目标表最大主键,并校准序列或 identity。

datetime2 精度变化

达梦侧时间类型可能保留不同的精度,时间字段应做最小值和最大值校验。

CDC 启动后没有增量

检查 SQL Server CDC 是否启用、账号权限和 Worker 日志。

相关入口

常见问题解答

SQL Server 到达梦迁移最要注意什么?

重点看 identity、datetime2、uniqueidentifier、nvarchar、schema 和大小写。

SQL Server identity 迁到达梦后怎么办?

将 identity 转为达梦序列或 identity,并校准当前值。

SQL Server 到达梦 CDC 前要检查什么?

确认 SQL Server CDC 已启用、源端权限和 Worker 日志,必要时临时打开 DEBUG。

在自己的环境中验证

下载 DataMover,开始配置迁移与同步任务。

免费下载快速开始