怎么把oracle的数据导入到mysql中?
OGG全称为Oracle GoldenGate,是由Oracle官方提供的用于解决异构数据环境中数据复制的一个商业工具。相比于其它迁移工具OGG的优势在于可以直接解析源端Oracle的redo log,因此能够实现在不需要对原表结构做太多调整的前提下完成数据增量部分的迁移。本篇文章将重点介绍如何使用OGG实现Oracle到MySQL数据的平滑迁移,以及讲述个人在迁移过程中所碰到问题的解决方案。
(一)OGG逻辑架构
参照上图简单给大家介绍下OGG逻辑架构,让大家对OGG数据同步过程有个简单了解,后面章节会详细演示相关进程的配置方式,在OGG使用过程中主要涉及以下进程及文件:
Manager进程:需要源端跟目标端同时运行,主要作用是监控管理其它进程,报告错误,分配及清理数据存储空间,发布阈值报告等
Extract进程:运行在数据库源端,主要用于捕获数据的变化,负责全量、增量数据的抽取
Trails文件:临时存放在磁盘上的数据文件
Data Pump进程:运行在数据库源端,属于Extract进程的一个辅助进程,如果不配置Data Pump,Extract进程会将抽取的数据直接发送到目标端的Trail文件,如果配置了Data Pump,Extract进程会将数据抽取到本地Trail文件,然后通过Data Pump进程发送到目标端,配置Data Pump进程的主要好处是即使源端到目标端发生网络中断,Extract进程依然不会终止
Collector进程:接收源端传输过来的数据变化,并写入本地Trail文件中
Replicat进程:读取Trail文件中记录的数据变化,创建对应的DML语句并在目标端回放
二、迁移方案(一)环境信息OGG版本 OGG 12.2.0.2.2 For Oracle OGG 12.2.0.2.2 For MySQL 数据库版本 Oracle 11.2.0.4 MySQL 5.7.21 OGG_HOME /home/oracle/ogg /opt/ogg (二)表结构迁移表结构迁移属于难度不高但内容比较繁琐的一步,我们在迁移表结构时使用了一个叫sqlines的开源工具,对于sqlines工具在MySQL端创建失败及不符合预期的表结构再进行特殊处理,以此来提高表结构转换的效率。注意:OGG在Oracle迁移MySQL的场景下不支持DDL语句同步,因此表结构迁移完成后到数据库切换前尽量不要再修改表结构。(三)数据迁移数据同步的操作均采用OGG工具进行,考虑数据全量和增量的衔接,OGG需要先将增量同步的抽取进程启动,抓取数据库的redo log,待全量抽取结束后开启增量数据回放,应用全量和增量这段期间产生的日志数据,OGG可基于参数配置进行重复数据处理,所以使用OGG时优先将增量进行配置并启用。此外,为了避免本章节篇幅过长,OGG参数将不再解释,有需要的朋友可以查看官方提供的Reference文档查询任何你不理解的参数。1.源端OGG配置(1)Oracle数据库配置针对Oracle数据库,OGG需要数据库开启归档模式及增加辅助补充日志、强制记录日志等来保障OGG可抓取到完整的日志信息查看当前环境是否满足要求,输出结果如下图所示:(2)Oracle数据库OGG用户创建OGG需要有一个用户有权限对数据库的相关对象做操作,以下为涉及的权限,该示例将创建一个用户名和密码均为ogg的Oracle数据库用户并授予以下权限(3)源端OGG 管理进程(MGR)配置(4)源端OGG 表级补全日志(trandata)配置表级补全日志需要在最小补全日志打开的情况下才起作用,之前只在数据库级开启了最小补全日志(alter database add supplemental log data;),redolog记录的信息还不够全面,必须再使用add trandata开启表级的补全日志以获得必要的信息。(5)源端OGG 抽取进程(extract)配置Extract进程运行在数据库源端,负责从源端数据表或日志中捕获数据。Extract进程利用其内在的checkpoint机制,周期性地检查并记录其读写的位置,通常是写入到本地的trail文件。这种机制是为了保证如果Extract进程终止或者操作系统宕机,我们重启Extract进程后,GoldenGate能够恢复到以前的状态,从上一个断点处继续往下运行,而不会有任何数据损失。(6)源端OGG 传输进程(pump)配置pump进程运行在数据库源端,其作用非常简单。如果源端的Extract抽取进程使用了本地trail文件,那么pump进程就会把trail文件以数据块的形式通过TCP/IP协议发送到目标端,Pump进程本质上是Extract进程的一种特殊形式,如果不使用trail文件,那么Extract进程在抽取完数据后,直接投递到目标端。补充:pump进程启动时需要与目标端的mgr进程进行连接,所以需要优先将目标端的mgr提前配置好,否则会报错连接被拒绝,无法传输抽取的日志文件到目标端对应目录下(7)源端OGG 异构mapping文件(defgen)生成该文件记录了源库需要复制的表的表结构定义信息,在源库生成该文件后需要拷贝到目标库的dirdef目录,当目标库的replica进程将传输过来的数据apply到目标库时需要读写该文件,同构的数据库不需要进行该操作。2.目标端OGG配置(1)目标端MySQL数据库配置
确认MySQL端表结构已经存在
MySQL数据库OGG用户创建
mysql> create user "ogg"@"%" identified by "ogg";
mysql> grant all on *.* to "ogg"@"%";
#### 提前创建好ogg存放checkpoint表的数据库
mysql> create database ogg;
(2)目标端OGG 管理进程(MGR)配置目标端的MGR进程和源端配置一样,可直接将源端配置方式在目标端重复执行一次即可,该部分不在赘述(3)目标端OGG 检查点日志表(checkpoint)配置checkpoint表用来保障一个事务执行完成后,在MySQL数据库从有一张表记录当前的日志回放点,与MySQL复制记录binlog的GTID或position点类似。#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
ggsci> edit param ./GLOBALS
checkpointtable ogg.ggs_checkpoint
ggsci> dblogin
将Oracle数据导入MySQL方法:先把oracle表中的数据另存在excel表中,再把excel表中数据导入到mysql中。这里要将oracle中表eventlogs的数据导入到mysql中。步骤如下:
1、在PL/SQL中用select * 搜索到eventlogs表的所有数据,然后右键点击"Copy to Excel";如下图所示:
2、将数据保存为excel表,并重名;如下图:
3、打开mysql的可视化工具,我这里是Navicat,选择表,点击导入向导;如下图所示:
4、选择上图中"导入类型"的"execel文件",然后点击"下一步";如下图所示:
5、接下来会让你选择文件,选择你已经保存的excel文件,并选择“SQL Result”,如下图所示:
6、然后一直点击下一步,最后一步点击开始。会出现一个“sql result”的表,重命名为你想要的表即可。如图所示: