Skip to main content

moregeek program

一款dba开发的oracle迁移mysql工具-oracle_mig_mysql_10883615的博客-多极客编程


这是一款由业余DBA写的数据迁移工具,可在线一键迁移Oracle数据库到MySQL数据库,包含表元数据、数据行迁移、视图、部分触发器、自增列、索引约束等对象自动创建。操作简单,开箱即用,适用全平台操作系统。



(Oracle一键迁移MySQL工具oracle_mig_mysql使用)


1.简介


:sparkling_heart:功能特性


:sparkles:支持Linux,Windows,MacOS,Oracle 11.2.0.4及以上,MySQL 5.7,8.0及以上测试通过


:sparkles: 支持在线迁移Oracle到MySQL的表、视图、索引、触发器、外键、自增列、以及部分触发器,不支持存储过程以及函数的迁移


:sparkles: 自动分析源库Oracle字段的长度并适配到MySQL合适的长度,避免MySQL字段长度太长问题 “Row size too large 65535”


:sparkles: 自动处理Oracle触发器+序列形式的自增列适配到MySQL原生自增列


:sparkles: 转储Oracle的函数、存储过程到平面文件以便修改人工翻译适配到MySQL


:sparkles: 后台多进程数据迁移,数据迁移更快


:sparkles: 支持迁移部分表结构以及数据功能


:sparkles: 支持迁移Oracle与MySQL共同存在的列数据,即目标数据库的列字段是源数据库列字段的超集


:sparkles: 记录迁移日志,转储表、视图等DDL对象创建失败的sql语句


:sparkles: 支持Oracle与MySQL表数量快速比对功能


:star:环境要求




  • 运行此工具的PC需要能连通源端Oracle以及目标MySQL数据库




  • 依赖oracle客户端环境(release已集成instant client)




2.下载


下载工具:point_right:点击此次下载:point_left:


3.平台测试


硬件平台:


CPU 内存 硬盘 数据库信息
Intel i7-12700 2.10 GHz(12核20线程) 芝奇皇家戟 DDR4 3600 32G 西数SN850 Oracle 19c,MySQL 5.7.24

SN850磁盘iops性能:


随机读 108816.88
随机写 94763.05
顺序读 111201.16
顺序写 22127.80
块大小 8K

image


源端表结构


CREATE TABLE TEST 
(
ID NUMBER,
NAME VARCHAR2(100),
SEX VARCHAR2(100)
)


在以上测试平台迁移Oracle一张2000万的表,迁移耗时68秒


截图




v1.9.21.1版本及以下为单线程迁移数据,迁移Oracle一张2000万的表耗时709秒


在这里插入图片描述


4.运行概览


全库迁移


qqqqqqq.png


比对数据


image


记录迁移失败的DDL


image


转储索引、视图、存储过程、函数DDL


image


多进程并行迁移表数据


image


5.开箱使用


下载release
在这里插入图片描述


解压之后即可运行此工具


1、解压,例如将oracle_mig_mysql.zip上传到/opt目录


2、在root用户下解压


[root@localhost root]# cd /opt

[root@localhost root]# unzip oracle_mig_mysql.zip

全库迁移示例


Linux环境


1、进入迁移工具目录


[root@localhost opt]# cd /opt/oracle_to_mysql

2、运行环境变量脚本


[root@localhost ]# sh env_ora.sh && source run_env


image


:warning:注意:此步骤仅Linux环境需要,Windows以及MacOS无需执行


3、编辑配置文件 config.ini文件,修改源数据库以及目标数据库信息



[root@localhost ]# vi config.ini

[oracle]
host = 192.168.212.23
port = 1521
user = admin
passwd = admin123
service_name = orcl
split_page_size = 10000 # 每个表分页查询的结果集总数
split_process = 16 # 并行执行分页查询的线程数

[mysql]
host = 192.168.209.24
port = 3306
user = root
passwd = Gep
database = temptest
dbchar = utf8mb4
row_batch_size = 10000 # 每次插入到目标表的行数


4、执行全库迁移


须知:如果是通过堡垒机或者是vpn连接的非图形化界面,强烈建议使用后台方式运行此工具,避免数据迁移中断



后台执行命令(需要命令后面带-q):

示例:[root@localhost ]# nohup ./oracle_mig_mysql -q &

前台执行命令:(不推荐,如果源库数据量很大,建议使用后台迁移,避免putty等终端工具超时自动断开)

示例:[root@localhost ]# ./oracle_mig_mysql


4、查看数据迁移运行过程


如果是在后台运行nohup ./oracle_mig_mysql -q &,可通过如下命令查看实时迁移过程



[root@localhost ]# tail -100f nohup.out


迁移已经完成


image


5、迁移完成后查看迁移任务日志


[root@localhost ]# cd /opt/oracle_to_mysql/mig_log/


此文件夹下面以时间戳名命的子文件夹内有如下日志需要关注:


ddl_failed_table.log --> 创建失败的表、视图、索引、触发器等对象的DDL创建语句,此部分需要修改语法适配并重新在MySQL创建即可


insert_failed_table.log --> 表数据插入失败的对象名称,此部分需要重新对个别表重新迁移数据


ddl_function_procedure.sql --> Oracle导出的存储过程以及函数的定义,此部分需要修改语法适配并重新在MySQL创建即可


MacOS环境


终端内执行即可:


iShot20221013_14.33.27.png


iShot20221013_14.35.51.png


Windows环境


Windows环境与Linux环境类似,下载压缩包之后解压到任意目录


1、编辑配置文件 config.ini文件,修改源数据库以及目标数据库信息


[oracle]
host = 192.168.212.23
port = 1521
user = admin
passwd = admin123
service_name = orcl
split_page_size = 10000 # 每个表分页查询的结果集总数
split_process = 16 # 并行执行分页查询的线程数

[mysql]
host = 192.168.209.24
port = 3306
user = root
passwd = Gep
database = temptest
dbchar = utf8mb4
row_batch_size = 10000 # 每次插入到目标表的行数

2、cmd进入迁移工具目录


在cmd命令行窗口内执行

进入工具所在目录

C:\Users\Administrator>g:

G:\>cd G:\oracle_mig_mysql

3、执行全库迁移


G:\oracle_mig_mysql>oracle_mig_mysql.exe

4、迁移完成后查看迁移任务日志


迁移工具目录下面会生成以时间戳名命的日志需要关注:


ddl_failed_table.log --> 创建失败的表、视图、索引、触发器等对象的DDL创建语句,此部分需要修改语法适配并重新在MySQL创建即可


insert_failed_table.log --> 表数据插入失败的对象名称,此部分需要重新对个别表重新迁移数据


ddl_function_procedure.sql --> Oracle导出的存储过程以及函数的定义,此部分需要修改语法适配并重新在MySQL创建即可


6.比对Oracle以及MySQL表数据量


oracle_compare_mysql.py,可以在数据迁移完成后快速比对Oracle以及MySQL的表数据量,检查是否有数据缺失。



以下执行后开始比对数据量

Linux:
[root@localhost ]# ./oracle_compare_mysql

Windows:
G:\oracle_mig_mysql>oracle_compare_mysql.exe


在这里插入图片描述


比对完之后,可以通过连接对应的MySQL数据库,查询比对结果
例如:
连接对应MySQL库之后查询


select * from DATA_COMPARE;


在这里插入图片描述


7.迁移部分表以及数据


仅迁移数据(不创建表结构以及表索引)


以下以Linux环境示例,windows环境操作方式类似


:warning:备注:使用-d命令前,需要确保mysql数据库已经创建了该表的表结构


:warning:需了解,使用-d命令,会先truncate(清空)目标表的数据再迁移数据


1、编辑custom_table.txt文件输入要迁移数据的表名称


示例如下:



[root@localhost ]# vi custom_table.txt

Z_AD_I_SN
Z_D_SN
Z_F_SN
Z_R_SN


2、开始迁移部分表数据



Linux下执行命令:

[root@localhost ]# ./oracle_mig_mysql -d

Windows下执行命令:

G:\oracle_mig_mysql>oracle_mig_mysql.exe -d


Source Database information:
+----------+-------------+-----------------------------------------------------------+
| database | schema_info | connect_info |
+----------+-------------+-----------------------------------------------------------+
| Oracle | admin | ((HOST=192.168.212.23)(PORT=1521))((SERVICE_NAME=orcl))) |
+----------+-------------+-----------------------------------------------------------+
+---------------------------------------+
| migrate mode |
+---------------------------------------+
| Migration Mode:migrate partion tables |
+---------------------------------------+

table for migration:
+-----------------------+
| TABLE_NAME |
+-----------------------+
| Z_AD_I_SN |
| Z_D_SN |
| Z_F_SN |
| Z_R_SN |
+-----------------------+

Target Database Information:
+----------+-----------------+----------+-----------+----------+
| database | ip_addr | port_num | user_name | db_name |
+----------+-----------------+----------+-----------+----------+
| MySQL | 192.168.209.2 | 3306 | root | temptest |
+----------+-----------------+----------+-----------+----------+
2021-12-23 18:17:00

READY FOR MIGRATING DATABASE ?:(PLEASE INPUT "Y" OR "N" TO CONTINUE)
y --------> 这里输入Y确认是否迁移
GO
START MIGRATING ROW DATA! 2021-12-23 18:17:03.715882

[Z_AD_I_SN] 插入完成 源表行数:100 目标行数:100 THREAD 1 2021-12-23 18:17:04.077622
[Z_D_SN] 插入完成 源表行数:100 目标行数:100 THREAD 1 2021-12-23 18:17:04.361066
[Z_F_SN] 插入完成 源表行数:100 目标行数:100 THREAD 1 2021-12-23 18:17:04.639245
[Z_R_SN] 插入完成 源表行数:100 目标行数:100 THREAD 1 2021-12-23 18:17:04.900548


8.完整命令列表


通过编辑custom_table.txt 文件以及配合命令参数可自定义哪些表需要迁移


:diamond_shape_with_a_dot_inside:命令示例:


:one:仅迁移自定义表的表结构以及数据包括索引等约束


./oracle_mig_mysql -c

:two:仅迁移自定义表的表数据,不包括表结构以及索引等约束


./oracle_mig_mysql -d

:three:仅迁移自定义表的元数据,即表结构(表定义、视图、索引、触发器自增列等约束),不迁移数据


./oracle_mig_mysql -m

:four:静默模式,输入-q之后无需在命令行界面键入“y”进行迁移前确认,默认为一键:bangbang:全库迁移:bangbang:


./oracle_mig_mysql -q 

©著作权归作者所有:来自51CTO博客作者爱玩很简单的原创作品,请联系作者获取转载授权,否则将追究法律责任

redis的安装与新特性acl安全策略_mingo的博客-多极客编程

Yum安装Redis 直接使用yum install redis命令安装的Redis可能不是最新版本,如果需要安装新版本则需要安装Remi的软件源,命令如下: yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm 安装并启动 #安装 yum --enablerepo=remi install redi

nomad 真的会替代 kubernetes 吗?_mb6242cc9db1000的博客-多极客编程

根据目前的市场状况,大多数人都同意 Kubernetes(又名“K8s”)赢得了容器编排之战,战胜了 Docker Swarm 和 Mesos 等替代品。但在 K8s (2014) 的同一时间还有另一个编排项目,那就是 HashiCorp 的 Nomad。(2015)Kubernetes 由 Google 孵化并得到持续的社区支持,实际上是容器编排的理想之选。然而,Kubernetes 并不是适用

图解postgresql进程结构和内存结构_dba攻坚之路的博客-多极客编程

PG进程和内存结构图建立会话的过程阶段一:客户端发起请求阶段二:该阶段由主服务postmaster进程负责服务器是否接受客户端的host通信认证服务器对客户端进行身份鉴别PM进程:提供监听,连接协议,验证功能,fork其他进程 ,监听哪个IP是受到postgres.conf影响的,默认提供socket和TCP方式连接。建立会话的过程验证功能:通过pg_hba.conf和用户验证模块来提供。阶段三:

db2 v11基于linux平台的tsa集群部署_httpblog.51cto.com的博客-多极客编程

DB2双机规划 TSA的全名是Tivoli System Automation for Multiplatforms,是一款高可用集群软件,类似微软的Failover Cluster,或者IBM的PowerHA,TSA的底层基于IBM的RSCT技术构建,在DB2软件安装的时候,tsa以SA MP组件的方式内置的安装介质中,可以随DB2一起安装。TSA一般和DB2的HADR配合使用,实现故障的自动切

postgresql的流复制搭建_dba攻坚之路的博客-多极客编程

单机版流复制测试环境搭建搭建规划主库备库数据目录/pgdata/12/data/pgdata/1202/data归档目录/pgdata/12/arch/pgdata/1202/arch端口54325433创建流复制用户create role replica with replication login password '123456';备份主库pg_basebackup -D /backup/

db_ha集群添加/删除节点_pg_hgdb的博客-多极客编程

瀚高数据库目录环境文档用途详细信息环境系统平台:Linux x86-64 Red Hat Enterprise Linux 7版本:4.5.7文档用途本文档用于指导db_ha集群添加/删除节点操作。详细信息1、新增节点安装和其他节点同版本数据库rpm -ivh hgdb4.5.7-see-centos7-x86-64-20220307.rpm2、安装集群软件rpm -ivh db_ha4.1.1-

【数据库数据恢复】asm磁盘组掉线导致oracle asm实例无法挂载的数据恢复案例_sun的博客-多极客编程

数据库数据恢复环境: 4个硬盘组成Oracle ASM磁盘组。 数据库故障&分析: ASM磁盘组掉线 ,ASM实例不能mount。管理员联系我们数据恢复中心进行oracle数据库的数据恢复。 对故障ASM磁盘组的磁盘进行分析。北亚数据库数据恢复工程师取出ASM元数据进行分析发现ASM存储元数据损坏,diskgroup无法mount。 可以尝试重组ASM存储空间,然后从ASM磁盘组中导出数据

oracle拨云见日第9篇之oracle10.2.0.1升级11.2.0.4.3_走不完的路,看不完的书!的博客-多极客编程

引言不知不觉中,人气竟然50W+了。真是荣幸之至,何德何能有这么多兄弟来看我的文章。我今天整个狠活,再带来一篇非常非常非常干货的文章。在前面的文章中,我们写过:Oracle10.2.0.1升级10.2.0.5.19、Oracle11.2.0.1.0升级11.2.0.4.3。网上Oracle升级的文章非常多,而本篇文章带来的是Oracle升级终结篇:Oracle10.2.0.1升级11.2.0.4.

oracle-清理监听日志文件 listener.log_小宝大人的博客-多极客编程

监听日志文件listener.log在哪?单机(集群)都看这里,只不过,集群是在grid用户下,而单机则是在oracle用户下。那么,怎么快速的找到它呢?##就是这样。这里说的是 log.xml 监听日志文件cd $ORACLE_BASE/diag/tnslsnr/$HOSTNAME/listener/alert下图中,显示的是监听日志文件​​log.xml​​的目录位置。监听日志文件listen

oracle故障处理:ora-j000_hostname进程导致的异常处理_集成工程师学习数据库的博客-多极客编程

1、数据库层次查看会话发现长时间会话,如下:2、根据sid查询出系统层次的spid,如下:3、根据spid信息查询进程信息,如下:4、Kill the session:5.kill session的方式5.1、数据库层次根据sid查询出会话信息select sid,serial# from v$session where sid='575';alter system kill session 's

oracle故障处理:rman-06207&rman-06214_集成工程师学习数据库的博客-多极客编程

1、在给客户系统巡检时通过rman维护日志发现有rman维护日志报错:RMAN-06207: WARNING: 3 objects could not be deleted for DISK channel(s) dueRMAN-06208:          to mismatched status.  Use CROSSCHECK command to fix statusRMAN-06210

oracle故障处理:rman delete obsolete报错ora-19606解决_集成工程师学习数据库的博客-多极客编程

在使用rman维护数据库备份记录的时候,通过delete obsolete命令删除文件的时候发生了ora-19606,具体报错如下:RMAN> delete obsolete;RMAN retention policy will be applied to the commandRMAN retention policy is set to redundancy 1using channel