数据库

首页 » 常识 » 问答 » 去O入云的探索Oracle到MySQ
TUhjnbcbe - 2024/10/26 17:08:00
福州白癜风医院 http://baijiahao.baidu.com/s?id=1681053053973129699&wfr=spider&for=pc

表结构改造

数据类型映射关系

字段映射关系请参考:

CSDN——Mysql与Oracle字段类型转换对照表

表结构改造

1.工具

使用NavicatPremium工具进行转换。

2.配置MySQL和Oracle连接

Connection(MySQL/Oracle)

3.MySQL连接配置

4.Oracle连接配置

5.配置完成后如下图

6.ToolsDataTransfer

7.源端和目标端数据库

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

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

Options栏中只选择Createtables和Continueonerror

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

注意以上的转换方式,会导致某些表的字段类型改变,比如oraclevarchar()转换成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数据库中。

备选工具

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

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

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

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

开源工具

yugong、canal、otter、datax。

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

3.O2M全量数据初始化

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

LoadingDatafromFiletoReplicat

Oracle源端

1.数据库操作

开启归档(正常生产应该开启)shutdownimmediate;startupmount;alterdatabasearchivelog;alterdatabaseopen;archiveloglist;开启附加日志和强制日志alterdatabaseaddsupplementallogdata;alterdatabaseforcelogging;altersystemswitchlogfile;启用OGG参数showparameterenable_goldengate_replication;altersystemsetenable_goldengate_replication=true;创建OGG专用用户CREATEUSERoggIDENTIFIEDBYogg;grantconnect,resource,unlimitedtablespacetoogg;grantdbatoogg;2.安装软件

3.配置mgr

./ggsci

PORT

PURGEOLDEXTRACTS/home/oracle/ogg/dirdat,USECHECKPOINTS

4.添加检查点表

dbloginuseridogg,passwordogg

addcheckpointtableogg.checkpoint

5.添加附加日志

dbloginUSERIDoggpasswordogg

addtrandata(owner).*

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

SELECT‘ADDTRANDATA‘

OWNER

’.’

TABLE_NAMEFROM(selectowner,table_namefromdba_tables

whereownerinupper(’owner’)

and(table_namenotlike‘%%)andTEMPORARY=Nandtable_namenotlikeBIN%ANDtable_namenotlike%BAK%MINUSselectowner,table_nameFROMDBA_LOG_GROUPSwhere(table_namenotlike%%’));

6.生成表结构定义文件

editparamsdefgensource

参数设置如下:

useridoggpasswordogg

defsfile/home/oracle/ogg/dirdef/o2msource.def

tableapp.*;

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

./defgenparamfile/home/oracle/ogg/dirprm/defgensource.prm

scpo2msource.defroot

..56.:/root/ogg/dirdef

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

addextractINITTEST,sourceistable

配置参数:

editparamsINITTEST

开启初始化抽取:

StartINITTEST

查看进程状态:

infoextract*,task

MySQL目标端

1.数据库操作

createuser‘root’

’%’identifiedby‘’;

grantallon.to‘root’

’%’;

2.安装软件

3.配置mgr参数

./ggsci

port

ACCESSRULE,PROG,IPADDR...*,ALLOW

4.设置检查点表

dbloginsourcedbtargetdb

..56.:,useridroot,password

addcheckpointtabletargetdb.oggcheckpoint

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

editparamsrinittest

6.开始初始化复制

./replicatparamfiledirprm/rinittest.prmREPORTFILEdirrpt/rinittest.rpt

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

……

-02-:09:49INFOOGG-MAPresolved(entryapp.source_test):map“APP”.“SOURCE_TEST”,target“targetdb”.“source_test”.

-02-:09:49INFOOGG-ThedefinitionfortableAPP.SOURCE_TESTisobtainedfromthetrailfile.

-02-:09:49INFOOGG-Usingfollowingcolumnsindefaultmapbyname:id,name,age.

-02-:09:49INFOOGG-Usingthefollowingkeycolumnsfortargettabletargetdb.source_test:id.

4.O2M增量数据同步

本次环境都是单机环境

Oracle源端

1.抽取进程EXTTEST配置

extractEXTTEST

Dynamicresolution

SETENV(ORACLE_HOME=“/home/oracle/app/oracle/product/11.2.0/dbhome_1”)

SETENV(ORACLE_SID=“orcl”)

SETENV(NLS_LANG=“AMERICAN_AMERICA.AL32UTF8”)

USERIDoggpasswordogg

extTrail/home/oracle/ogg/dirdat/et

DiscardFile/home/oracle/ogg/dirrpt/EXTTEST.dsc,Purge

TABLEAPP.A;

TABLEAPP.B;

TABLEAPP.C;

TABLEAPP.TEST1;

TABLEAPP.DBA_TAB_COLUMNS_TMP;

TABLEAPP.DBA_TABLES_TMP;

TABLEAPP.SOURCE_TEST;

2.添加进程EXTTEST

ADDEXTRACTEXTTEST,TRANLOG,BEGINnow

ADDEXTTRAIL./dirdat/et,EXTRACTEXTTEST

3.投递进程PUMPTEST配置

editparamsPUMPTEST

extractPUMPTEST

passthru

dynamicresolution

USERIDoggpasswordogg

rmthost..56.mgrport

rmttrail/root/ogg/dirdat/pt

TABLEAPP.A;

TABLEAPP.B;

TABLEAPP.C;

TABLEAPP.TEST1;

TABLEAPP.DBA_TAB_COLUMNS_TMP;

TABLEAPP.DBA_TABLES_TMP;

TABLEAPP.SOURCE_TEST;

4.添加进程PUMPTEST

addextractPUMPTEST,exttrailsource/home/oracle/ogg/dirdat/et

addrmttrail/root/ogg/dirdat/pt,extractPUMPTEST

MySQL目标端

1.提取进程REPTEST配置

editparamsREPTEST

replicatREPTEST

targetdbtargetdb

..56.:,useridroot,password

sqlexec“SETFOREIGN_KEY_CHECKS=0”

SOURCEDEFS/root/ogg/dirdef/o2msource.def

SOURCECHARSETPASSTHRU

discardfile/root/ogg/dirrpt/REPTEST.dsc,purge,megabytes50

mapapp.a,targettargetdb.a;

mapapp.b,targettargetdb.b;

mapapp.c,targettargetdb.c;

mapapp.test1,targettargetdb.test1;

mapapp.dba_table_columns_tmp,targettargetdb.dba_table_columns_tmp;

mapapp.dba_tables_tmp,targettargetdb.dba_tables_tmp;

mapapp.source_test,targettargetdb.source_test;

2.添加提取进程REPTEST

addreplicatREPTEST,exttrail/root/ogg/dirdat/pt,checkpointtabletargetdb.oggcheckpoint

3.同步测试

源段

insertintocselect*fromc;

4.进程统计信息

GGSCI(orcldg)4statsreptest

SendingSTATSrequesttoREPLICATREPTEST…

StartofStatisticsat-03-:11:45.

ReplicatingfromAPP.Ctotargetdb.c:

***Totalstatisticssince-03-:35:07***

Totalinserts.00

Totalupdates0.00

Totaldeletes0.00

Totaldiscards0.00

Totaloperations.0

关于作者

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

1
查看完整版本: 去O入云的探索Oracle到MySQ