Skip to content

Repository files navigation

MySQL到Oracle数据迁移工具

一个功能完整的MySQL到Oracle数据库迁移工具,支持表结构迁移、数据迁移、增量同步、断点续传和数据验证。

功能特性

1. 结构迁移

  • ✅ 自动转换表结构(字段类型、长度、默认值、NULL约束)
  • ✅ 索引迁移(普通索引、唯一索引)
  • ✅ 主键约束迁移
  • ✅ 外键约束迁移
  • ✅ 自增序列转换(MySQL AUTO_INCREMENT → Oracle SEQUENCE + TRIGGER)
  • ⚠️ 触发器迁移(需手动审查)

2. 数据迁移

  • ✅ 批量数据迁移(默认每批5000条)
  • ✅ 数据类型自动转换
  • ✅ 空字符串与NULL的处理(MySQL空串 → Oracle NULL)
  • ✅ 日期时间类型转换
  • ✅ 大文本和二进制数据迁移

3. 断点续传

  • ✅ 迁移进度实时保存
  • ✅ 支持暂停和恢复
  • ✅ 记录每个表的迁移偏移量
  • ✅ 失败自动重试

4. 主键映射

  • ✅ 记录MySQL和Oracle的主键映射关系
  • ✅ 支持后续的关联查询和数据追溯

5. 数据验证

  • ✅ 行数对比验证
  • ✅ 抽样数据验证(随机抽取1000条对比)
  • ✅ 生成验证报告

6. Web界面

  • ✅ 现代化的Vue3 + Element Plus界面
  • ✅ 连接测试功能
  • ✅ 可视化迁移向导
  • ✅ 实时进度监控
  • ✅ 任务管理和历史记录

技术架构

后端技术栈

  • 框架: Spring Boot 3.2 + Java 17
  • 架构: COLA 4.0(Clean Architecture)
  • 数据访问: MyBatis Plus
  • 连接池: HikariCP
  • 本地存储: H2数据库(存储任务状态和映射关系)

前端技术栈

  • 框架: Vue 3 + Vite
  • UI组件: Element Plus
  • 状态管理: Pinia
  • HTTP客户端: Axios

项目结构(COLA 4.0)

data-migration/
├── migration-client/          # 对外API定义(DTO)
├── migration-adapter/         # 适配层(Web控制器)
├── migration-app/            # 应用层(业务逻辑)
│   ├── executor/             # 迁移执行器
│   ├── validator/            # 数据验证器
│   └── service/              # 应用服务
├── migration-domain/         # 领域层(领域模型)
│   ├── model/                # 领域模型
│   └── gateway/              # 领域网关接口
├── migration-infrastructure/ # 基础设施层
│   ├── datasource/           # 数据源管理
│   ├── converter/            # DDL/数据转换器
│   ├── metadata/             # 元数据读取
│   └── repository/           # 仓储实现
├── migration-start/          # 启动模块
└── migration-web/            # 前端项目

快速开始

环境要求

  • JDK 17+
  • Maven 3.8+
  • Node.js 16+
  • MySQL 5.7+ / 8.0+
  • Oracle 11g+ / 19c+

1. 克隆项目

git clone <repository-url>
cd data_migration

2. 启动后端

# 编译项目
mvn clean package -DskipTests

# 启动应用
cd migration-start
mvn spring-boot:run

后端服务将在 http://localhost:8080 启动

3. 启动前端

cd migration-web

# 安装依赖
npm install

# 启动开发服务器
npm run dev

前端服务将在 http://localhost:3000 启动

4. 访问应用

打开浏览器访问: http://localhost:3000

使用指南

创建迁移任务

  1. 配置源数据库(MySQL)

    • 输入主机地址、端口、数据库名
    • 输入用户名和密码
    • 点击"测试连接"确认连接正常
  2. 配置目标数据库(Oracle)

    • 输入主机地址、端口、服务名/SID
    • 输入用户名和密码
    • 点击"测试连接"确认连接正常
  3. 配置迁移选项

    • 输入任务名称
    • 选择迁移类型(全量/增量)
    • 选择是否迁移索引、触发器、序列
    • 设置批量大小和并发数
  4. 确认并创建

    • 检查配置信息
    • 点击"创建任务"
  5. 执行迁移

    • 在任务详情页点击"启动"
    • 实时查看迁移进度
    • 支持暂停和恢复

数据类型映射

MySQL类型 Oracle类型 说明
VARCHAR VARCHAR2 最大4000字节
TEXT/LONGTEXT CLOB 大文本
INT NUMBER(10) 整数
BIGINT NUMBER(19) 长整数
DECIMAL(p,s) NUMBER(p,s) 精确数值
DATETIME TIMESTAMP 日期时间
BLOB BLOB 二进制数据
AUTO_INCREMENT SEQUENCE + TRIGGER 自增列

特殊处理

  1. 空字符串: MySQL的空字符串会被转换为Oracle的NULL
  2. 自增列: MySQL的AUTO_INCREMENT会转换为Oracle的SEQUENCE和TRIGGER
  3. 日期格式: 自动转换为Oracle的TIMESTAMP格式
  4. 大小写: Oracle默认转换为大写,表名和字段名会自动处理

API文档

连接测试

POST /api/v1/migration/connections/test
Content-Type: application/json

{
  "type": "MYSQL",
  "host": "localhost",
  "port": 3306,
  "database": "test_db",
  "username": "root",
  "password": "password"
}

创建任务

POST /api/v1/migration/tasks
Content-Type: application/json

{
  "taskName": "测试迁移",
  "sourceConfig": {...},
  "targetConfig": {...},
  "migrationType": "FULL",
  "migrateIndexes": true,
  "migrateSequences": true,
  "batchSize": 5000
}

启动任务

POST /api/v1/migration/tasks/{taskId}/start

查询进度

GET /api/v1/migration/tasks/{taskId}/progress

配置说明

application.yml

server:
  port: 8080

migration:
  datasource:
    maximum-pool-size: 10      # 连接池最大连接数
    connection-timeout: 30000  # 连接超时(毫秒)
  batch-size: 5000             # 默认批量大小
  max-retry: 3                 # 失败重试次数

注意事项

迁移前准备

  1. 数据备份: 强烈建议在迁移前备份源数据库和目标数据库
  2. 权限检查: 确保源数据库有读权限,目标数据库有完整的DDL和DML权限
  3. 网络连接: 确保应用服务器能够同时访问MySQL和Oracle
  4. 磁盘空间: 确保目标数据库有足够的磁盘空间

性能优化

  1. 批量大小: 根据数据特点调整批量大小(1000-10000)
  2. 并发数: 谨慎使用并发迁移,避免数据库压力过大
  3. 索引: 可以先迁移数据,再创建索引,提高迁移速度
  4. 日志级别: 生产环境建议设置为INFO或WARN

已知限制

  1. 触发器需要手动审查和调整
  2. 存储过程和函数不支持自动迁移
  3. 视图不支持自动迁移
  4. 不支持分区表的自动迁移

故障排查

连接失败

  • 检查网络连通性
  • 确认数据库服务正常运行
  • 检查用户名、密码和权限

迁移失败

  • 查看错误日志
  • 检查目标数据库磁盘空间
  • 确认目标数据库权限

数据不一致

  • 使用数据验证功能检查
  • 检查迁移日志中的警告信息
  • 手动对比关键数据

开发指南

编译项目

mvn clean package

运行测试

mvn test

代码规范

  • 遵循阿里巴巴Java开发规范
  • 使用Lombok简化代码
  • 为公共API编写JavaDoc

许可证

本项目采用 MIT 许可证

作者

caojianmiao

更新日志

v1.0.0 (2025-10-09)

  • ✨ 首次发布
  • ✅ 完整的MySQL到Oracle迁移功能
  • ✅ Web管理界面
  • ✅ 断点续传支持
  • ✅ 数据验证功能

About

Database migration tool — Java multi-module (DDD-style) backend + Vue 3 web UI for configuring and running table migrations

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages