在线迁移Oracle到目标MySQL内核的数据库,如MySQL,PolarDB,Percona Server MySQL,MariaDB,OceanBase,TiDB,GaussDB for MySQL
- 迁移全库表结构以及表行数据到目标数据库
- 目标数据库表结构是源库超集即可迁移行数据
- 多线程批量方式迁移表行数据
- 数据比对源库以及目标库
在运行的客户端PC需要同时能连通源端数据库以及目标数据库
支持Windows、Linux、MacOS
解压之后即可运行此工具
若在Linux环境下请使用unzip解压,例如:
[root@localhost opt]# unzip OracleSync2MySQL-linux64-0.0.1.zip
以下为Windows平台示例,其余操作系统命令行参数一样
注意:在Windows系统请在CMD运行此工具,如果是在MacOS或者Linux系统,请在有读写权限的目录运行
备注:如果在linux下运行,请先在工具所在目录设定下环境变量LD_LIBRARY_PATH中指定当前工具目录使用的instantclient,如下:
[root@uatenv OracleSync2MySQL]# pwd
/opt/OracleSync2MySQL
[root@uatenv OracleSync2MySQL]# ls
example.yml instantclient OracleSync2MySQL
[root@uatenv OracleSync2MySQL]# export LD_LIBRARY_PATH=./instantclient编辑example.cfg文件,分别输入源库跟目标数据库信息
src:
host: 192.168.1.200
port: 1521
database: orcl
username: admin
password: oracle
dest:
host: 192.168.1.37
port: 3306
database: test_polar
username: root
password: 11111
pageSize: 100000
maxParallel: 100
batchRowSize: 1000
tables:
test:
- select * from test
exclude:
operationlogdatabase: 源端src是oracle服务名,目标端dest是数据库名称
pageSize: 分页查询每页的记录数
maxParallel: 最大能同时运行goroutine的并发数
tables: 自定义迁移的表以及自定义查询源表,按yml格式缩进
exclude: 不需要迁移的表,按yml格式缩进
batchRowSize: 批量insert目标表的行数
迁移全库表结构、行数据,索引约束、自增列等对象
OracleSync2MySQL.exe --config 配置文件
示例
OracleSync2MySQL.exe --config example.yml
如果是Linux或者macOS请在终端运行
备注:如果在linux下运行,请先在工具所在目录设定下环境变量LD_LIBRARY_PATH中指定当前工具目录使用的instantclient
[root@uatenv OracleSync2MySQL]# pwd
/opt/OracleSync2MySQL
[root@uatenv OracleSync2MySQL]# ls
example.yml instantclient OracleSync2MySQL
[root@uatenv OracleSync2MySQL]# export LD_LIBRARY_PATH=./instantclient
[root@uatenv OracleSync2MySQL]#./OracleSync2MySQL --config example.yml
全库迁移完成之后会生成迁移摘要,观察下是否有失败的对象,通过查询迁移日志可对迁移失败的对象进行分析
+-------------------------+---------------------+-------------+----------+
| SourceDb | DestDb | MaxParallel | PageSize |
+-------------------------+---------------------+-------------+----------+
| 192.168.149.37-sourcedb | 192.168.149.33-test | 30 | 100000 |
+-------------------------+---------------------+-------------+----------+
+-----------+----------------------------+----------------------------+-------------+--------------+
|Object | BeginTime | EndTime |FailedTotal |ElapsedTime |
+-----------+----------------------------+----------------------------+-------------+--------------+
|Table | 2023-07-21 17:12:51.680525 | 2023-07-21 17:12:52.477100 |0 |796.579837ms |
|TableData | 2023-07-21 17:12:52.477166 | 2023-07-21 17:12:59.704021 |0 |7.226889553s |
+-----------+----------------------------+----------------------------+-------------+--------------+
Table Create finish elapsed time 5.0256021s
迁移完之后比对源库和目标库,查看是否有迁移数据失败的表
windows使用:OracleSync2MySQL.exe --config your_file.yml compareDb
e.g.
OracleSync2MySQL.exe --config example.yml compareDb
在Linux,MacOS使用示例如下
./OracleSync2MySQL --config example.yml compareDb
Table Compare Result (Only Not Ok Displayed)
+-----------------------+------------+----------+-------------+------+
|Table |SourceRows |DestRows |DestIsExist |isOk |
+-----------------------+------------+----------+-------------+------+
|abc_testinfo |7458 |0 |YES |NO |
|log1_qweharddiskweqaz |0 |0 |NO |NO |
|abcdef_jkiu_button |4 |0 |YES |NO |
|abcdrf_yuio |5 |0 |YES |NO |
|zzz_ss_idcard |56639 |0 |YES |NO |
|asdxz_uiop |290497 |190497 |YES |NO |
|abcd_info |1052258 |700000 |YES |NO |
+-----------------------+------------+----------+-------------+------+
INFO[0040] Table Compare finish elapsed time 11.307881434s 迁移全库表结构、行数据,视图、索引约束、自增列等对象
OracleSync2MySQL.exe --config 配置文件
示例
OracleSync2MySQL.exe --config example.yml
如果是Linux或者macOS请在终端运行
备注:如果在linux下运行,请先在工具所在目录设定下环境变量LD_LIBRARY_PATH中指定当前工具目录使用的instantclient
[root@uatenv OracleSync2MySQL]# pwd
/opt/OracleSync2MySQL
[root@uatenv OracleSync2MySQL]# ls
example.yml instantclient OracleSync2MySQL
[root@uatenv OracleSync2MySQL]# export LD_LIBRARY_PATH=./instantclient
[root@uatenv OracleSync2MySQL]#./OracleSync2MySQL --config example.yml
不迁移全库数据,只迁移部分表,根据配置文件中自定义查询语句迁移表结构和表行数据到目标库
OracleSync2MySQL.exe --config 配置文件 -s
示例
OracleSync2MySQL.exe --config example.yml -s
仅在目标库创建所有表的表结构,不包括行数据
OracleSync2MySQL.exe --config 配置文件 createTable -t
示例
OracleSync2MySQL.exe --config example.yml createTable -t
仅在目标库创建自定义的表结构,不包括行数据
OracleSync2MySQL.exe --config 配置文件 createTable -s -t
示例
OracleSync2MySQL.exe --config example.yml createTable -s -t
仅迁移源库的所有行数据到目标库,不包括表结构
OracleSync2MySQL.exe --config 配置文件 onlyData
示例
OracleSync2MySQL.exe --config example.yml onlyData
仅迁移yml配置文件中自定义查询sql的所有行数据到目标库,不包括表结构
OracleSync2MySQL.exe --config 配置文件 onlyData -s
示例
OracleSync2MySQL.exe --config example.yml onlyData -s
不迁移任何数据,仅转储DDL语句,表创建、索引、自增列、视图等对象ddl语句输出到log文件下的createSql.log
OracleSync2MySQL.exe --config 配置文件 -m
示例
OracleSync2MySQL.exe --config example.yml -m
2024-06-04 修复tablemeta中视图批量替换的问题,新增-m模式,仅输出创建数据库对象的脚本文件到createSql.log文件,不会迁移任何对象
2024-05-30 修复默认值缺失的问题
2024-05-14 修复注释没有迁移的问题
2024-03-29 修复分页查询遇到别名冲突问题
2023-11-27 -s自定义迁移的时候,读取配置文件中的表名并统一转为大小
2023-10-24 优化fetchTableMap的方法
2023-08-31 修改迁移数据时的insert方法,insert语句由之前的insert into tableName values改成了insert into tableName(col1,col2) values。修复timestamp类型转换文本不正确的问题
2023-08-23 新增触发器+序列形式的Oracle自增迁移到目标库自增列,迁移外键,normal-index类型的索引,comment注释,视图,转储源数据库的函数、存储过程等对象到平面文件
2023-08-14 工具新增Oracle instantclient在工具同一目录
2023-08-04 修复没有数据的表没有在目标库创建的问题,新增索引以及约束迁移
2023-08-01 修改连接源库以及目标库连接池数量为不限制,使用godror连接Oracle
2023-07-28 分页查询获取bug修复,增加timestamp类型适配
2023-07-27 Oracle全库迁移表和表数据到目标MySQL数据库
