前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >去O入云的探索--Oracle到MySQL的迁移改造方案

去O入云的探索--Oracle到MySQL的迁移改造方案

作者头像
数据和云
发布2021-08-27 16:13:53
1.5K0
发布2021-08-27 16:13:53
举报
文章被收录于专栏:数据和云数据和云

,点击上方"蓝字"

关注我们,享更多干货!

1.表结构改造

数据类型映射关系

字段映射关系请参考: https://blog.csdn.net/weixin_34128839/article/details/91644197

表结构改造

1.工具

使用Navicat Premium 工具进行转换。

2.配置MySQL和Oracle连接

Connection(MySQL/Oracle)

3.MySQL连接配置

4.Oracle连接配置

5.配置完成后如下图

6.ToolsData Transfer

7.源端和目标端数据库

Genral栏中选择源端数据库为Oracle(192.168.56.226_oracle),schema为需要转换的表用户。

目标端使用file文件,用于保存转换好的MySQL脚本,数据库版本为MySQL5.7(可以根据实际环境选择)。

Options栏中只选择Create tables和Continue on error

8.选择表以后开始进行转换

注意以上的转换方式,会导致某些表的字段类型改变,比如oracle varchar(2000)转换成MySQL后可能会变成text。

由于工具转换会出现字段类型的变化,需要进行二次加工修改,因此参考数据类型关系映射。使用脚本进行批量转换。

脚本如下:

该脚本转换只针对常用字段和索引进行转换,Oracle的常用字段NUMBER、DATE、CLOB、BLOB、XMLTYPE、CHAR、FLOAT、TIMESTAMP、VARCHAR2、NVARCHAR2。

2.数据迁移

数据迁移的前提是表结构改造完成,并已经在MySQL中创建。Oracle数据迁移到MySQL采用三步走的策略:Oracle到MySQL的全量同步;Oracle到MySQL的增量同步;MySQL到Oracle的增量同步。其中MySQL到Oracle的增量同步主要是为了保证:一旦出现紧急状况,业务能够很快的切换到原来的Oracle数据库中。

备选工具

  • Oracle GoldenGate

能够很好的支持Oracle和MySQL之间的全量、增量同步。可以记录数据同步期间成功的条数、异常的个数。由于OGG是直接抽取日志,然后在目标端应用。优点为实时性好、无需考虑两端增删改操作;缺点就是配置复杂。

  • Navicat Premium

图形化工具,操作简单、学习成本低、上手很快。能够很好的支持Oracle到MySQL的初始化全量同步数据,并详细的记录同步日志信息。但是不支持Oracle和MySQL之间的增量同步。

  • Kettle Etl

图形化工具,通过编写脚本实现异构数据库之间的同步。但是针对的是单个对象进行同步,不适合大批量数据表的同步。并且由于使用的是SQL语句进行同步,无法及时同步两个数据库之间的数据变化,比如源端删除或者更新一条数据,还要配置一条删除或者更新语句。

比较适合少量的Oracle到MySQL的初始化全量数据。

开源工具

yugong、canal、otter、datax。

以上工具基于速度、流行度、成熟度等因素考虑,建议使用oracle goldengate;如果涉及到开源工具选择建议使用yugong。

3.O2M全量数据初始化

Oracle OGG初始化本地采用File to replicat的方式进行。即先在源端抽取出数据生成文件投递到目标端,在目标端再去复制到数据库中。

Loading Data from File to Replicat

Oracle源端

1.数据库操作

  • 开启归档(正常生产应该开启) shutdown immediate; startup mount; alter database archivelog; alter database open; archive log list;
  • 开启附加日志和强制日志 alter database add supplemental log data; alter database force logging; alter system switch logfile;
  • 启用OGG参数 show parameter enable_goldengate_replication; alter system set enable_goldengate_replication=true;
  • 创建OGG专用用户 CREATE USER ogg IDENTIFIED BY ogg ; grant connect,resource,unlimited tablespace to ogg; grant dba to ogg;

2.安装软件

3.配置mgr

./ggsci

PORT 7809

PURGEOLDEXTRACTS /home/oracle/ogg/dirdat, USECHECKPOINTS

4.添加检查点表

dblogin userid ogg,password ogg add checkpointtable ogg.checkpoint

5.添加附加日志

dblogin USERID ogg password ogg add trandata (owner).*

也可以通过语句进行批量生成

SELECT ‘ADD TRANDATA ‘||OWNER||’.’||TABLE_NAME FROM(select owner,table_name from dba_tables where owner in upper(’&owner’) and (table_name not like ‘%%') and TEMPORARY = 'N' and table_name not like 'BIN%' AND table_name not like '%BAK%' MINUS select owner, table_name FROM DBA_LOG_GROUPS where (table_name not like '%%’));

6.生成表结构定义文件

edit params defgensource

参数设置如下:

userid ogg password ogg defsfile /home/oracle/ogg/dirdef/o2msource.def table app.*;

7.生成定义文件并发送到目标端

./defgen paramfile /home/oracle/ogg/dirprm/defgensource.prm scp o2msource.def root@192.168.56.225:/root/ogg/dirdef

8.配置初始化抽取进程inittest

add extract INITTEST,sourceistable

配置参数:

edit params INITTEST

代码语言:javascript
复制
extract INITTEST
USERID ogg password ogg
rmthost 192.168.56.225 mgrport 7810
RMTFILE /root/ogg/dirdat/it, PURGE
TABLE APP.A;
TABLE APP.B;
TABLE APP.C;
TABLE APP.TEST1;
TABLE APP.DBA_TAB_COLUMNS_TMP;
TABLE APP.DBA_TABLES_TMP;
TABLE APP.SOURCE_TEST;

开启初始化抽取: Start INITTEST

查看进程状态: info extract *, task

MySQL目标端

1.数据库操作

create user ‘root’@’%’ identified by ‘123456’; grant all on . to ‘root’@’%’;

2.安装软件

3.配置mgr参数

./ggsci

port 7810 ACCESSRULE, PROG , IPADDR ...*, ALLOW

4.设置检查点表

dblogin sourcedb targetdb@192.168.56.225:3306,userid root,password 123456 add checkpointtable targetdb.oggcheckpoint

5.配置初始化复制进程RINITTEST

edit params rinittest

代码语言:javascript
复制
SPECIALRUN
END RUNTIME
targetdb targetdb@192.168.56.225:3306,userid root,password 123456
sqlexec “SET FOREIGN_KEY_CHECKS=0”
EXTFILE /root/ogg/dirdat/it
SOURCEDEFS /root/ogg/dirdef/o2msource.def
map app.a,target targetdb.a;
map app.b,target targetdb.b;
map app.c,target targetdb.c;
map app.test1,target targetdb.test1;
map app.dba_table_columns_tmp,target targetdb.dba_table_columns_tmp;
map app.dba_tables_tmp,target targetdb.dba_tables_tmp;
map app.source_test,target targetdb.source_test;

6.开始初始化复制

./replicat paramfile dirprm/rinittest.prm REPORTFILE dirrpt/rinittest.rpt

7.观察报告dirrpt/rinittest.rpt 复制成功

…… 2021-02-25 19:09:49 INFO OGG-06505 MAP resolved (entry app.source_test): map “APP”.“SOURCE_TEST”,target “targetdb”.“source_test”.

2021-02-25 19:09:49 INFO OGG-02756 The definition for table APP.SOURCE_TEST is obtained from the trail file.

2021-02-25 19:09:49 INFO OGG-06511 Using following columns in default map by name: id, name, age.

2021-02-25 19:09:49 INFO OGG-06510 Using the following key columns for target table targetdb.source_test: id.

代码语言:javascript
复制
** Run Time Statistics **
Last record for the last committed transaction is the following:
Trail name : /root/ogg/dirdat/it000000
Hdr-Ind : E (x45) Partition : . (x0c)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 34 (x0022) IO Time : 2021-02-25 19:05:20.812324
IOType : 5 (x05) OrigNode : 255 (xff)
TransInd : . (x03) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 0 AuditPos : 0
Continued : N (x00) RecCount : 1 (x01)
2021-02-25 19:05:20.812324 Insert Len 34 RBA 58107285
TDR Index: 6

Reading /root/ogg/dirdat/it000000, current RBA 58107371, 500408 records, m_file_seqno = 0, m_file_rba = 58107371
Report at 2021-02-25 19:09:49 (activity since 2021-02-25 19:08:50)
From Table APP.A to targetdb.a:
# inserts: 200000
# updates: 0
# deletes: 0
# discards: 0
From Table APP.B to targetdb.b:
# inserts: 100000
# updates: 0
# deletes: 0
# discards: 0
From Table APP.C to targetdb.c:
# inserts: 200000
# updates: 0
# deletes: 0
# discards: 0
From Table APP.DBA_TABLES_TMP to targetdb.dba_tables_tmp:
# inserts: 8
# updates: 0
# deletes: 0
# discards: 0
From Table APP.SOURCE_TEST to targetdb.source_test:
# inserts: 400
# updates: 0
# deletes: 0
# discards: 0
Last log location read:
FILE: /root/ogg/dirdat/it000000
SEQNO: 0
RBA: 58107371
TIMESTAMP: 2021-02-25 19:05:20.812324
EOF: NO
READERR: 400

4.O2M增量数据同步

本次环境都是单机环境

Oracle源端

1.抽取进程EXTTEST配置

extract EXTTEST Dynamicresolution SETENV (ORACLE_HOME = “/home/oracle/app/oracle/product/11.2.0/dbhome_1” ) SETENV (ORACLE_SID = “orcl”) SETENV (NLS_LANG = “AMERICAN_AMERICA.AL32UTF8”) USERID ogg password ogg extTrail /home/oracle/ogg/dirdat/et DiscardFile /home/oracle/ogg/dirrpt/EXTTEST.dsc, Purge TABLE APP.A; TABLE APP.B; TABLE APP.C; TABLE APP.TEST1; TABLE APP.DBA_TAB_COLUMNS_TMP; TABLE APP.DBA_TABLES_TMP; TABLE APP.SOURCE_TEST;

2.添加进程EXTTEST

ADD EXTRACT EXTTEST, TRANLOG,BEGIN now ADD EXTTRAIL ./dirdat/et, EXTRACT EXTTEST

3.投递进程PUMPTEST配置

edit params PUMPTEST

extract PUMPTEST passthru dynamicresolution USERID ogg password ogg rmthost 192.168.56.225 mgrport 7810 rmttrail /root/ogg/dirdat/pt TABLE APP.A; TABLE APP.B; TABLE APP.C; TABLE APP.TEST1; TABLE APP.DBA_TAB_COLUMNS_TMP; TABLE APP.DBA_TABLES_TMP; TABLE APP.SOURCE_TEST;

4.添加进程PUMPTEST

add extract PUMPTEST,exttrailsource /home/oracle/ogg/dirdat/et

add rmttrail /root/ogg/dirdat/pt,extract PUMPTEST

MySQL目标端

1.提取进程REPTEST配置

edit params REPTEST replicat REPTEST targetdb targetdb@192.168.56.225:3306,userid root,password 123456 sqlexec “SET FOREIGN_KEY_CHECKS=0” SOURCEDEFS /root/ogg/dirdef/o2msource.def SOURCECHARSET PASSTHRU discardfile /root/ogg/dirrpt/REPTEST.dsc,purge,megabytes 50 map app.a,target targetdb.a; map app.b,target targetdb.b; map app.c,target targetdb.c; map app.test1,target targetdb.test1; map app.dba_table_columns_tmp,target targetdb.dba_table_columns_tmp; map app.dba_tables_tmp,target targetdb.dba_tables_tmp; map app.source_test,target targetdb.source_test;

2.添加提取进程REPTEST

add replicat REPTEST,exttrail /root/ogg/dirdat/pt,checkpointtable targetdb.oggcheckpoint

3.同步测试

源段

insert into c select * from c;

4.进程统计信息

GGSCI (orcldg) 4> stats reptest

Sending STATS request to REPLICAT REPTEST …

Start of Statistics at 2021-03-09 18:11:45.

Replicating from APP.C to targetdb.c:

*** Total statistics since 2021-03-09 17:35:07 *** Total inserts 400000.00 Total updates 0.00 Total deletes 0.00 Total discards 0.00 Total operations 400000.00

墨天轮原文链接:https://www.modb.pro/db/69642(复制链接至浏览器或点击文末阅读原文查看)

关于作者

周琦放,云和恩墨技术顾问,MySQL 11g OCP,OBCA证书长期服务于金融行业。现负责公司Oracle、MySQL、Postgres数据库运维方面的技术工作;热衷于运维故障处理、备份恢复、升级迁移、性能优化的学习与分享。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.数据迁移
    • 3.O2M全量数据初始化
      • 4.O2M增量数据同步
        • 本次环境都是单机环境
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档