暂无图片
暂无图片
1
暂无图片
暂无图片
2
暂无图片

去O入云的探索----数据迁移

原创 周琦放 2021-06-06
1921

Oracle 到mysql的迁移改造方案

1 表结构改造

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

1.2 表结构改造
1.2.1工具
使用Navicat Premium 工具进行转换
image.png
2:配置mysql和oracle连接
Connection(MySQL/Oracle)
image.png
3:mysql连接配置
image.png
4:Oracle连接配置
image.png
5:配置完成后如下图
image.png
6:ToolsData Transfer
image.png
7:选择源端和目标端数据库

Genral栏中选择源端数据库为oracle(192.168.56.226_oracle),schema 为需要转换的表用户
目标端使用file 文件,用于保存转换好的mysql脚本,数据库版本为mysql5.7(可以根据实际环境选择)
image.png
Options栏中只选择Create tables 和 Continue on error
image.png
8:选择表以后开始进行转换
image.png

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

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

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

image.png

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

O2M全量数据初始化

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

Oracle源端

1.数据库操作
1.开启归档(正常生产应该开启)
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
archive log list;
2.开启附加日志和强制日志
alter database add supplemental log data;
alter database force logging;
alter system switch logfile;
3.启用OGG参数
show parameter enable_goldengate_replication
alter system set enable_goldengate_replication=true;
4.创建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
-------------------------------以下参数内容-----------------------------
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

-------------------------------以下参数内容-----------------------------
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.


  •               ** 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

O2M增量数据同步

本次环境都是单机环境
image.png

Oracle源端

抽取进程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;

添加进程EXTTEST
ADD EXTRACT EXTTEST, TRANLOG,BEGIN now
ADD EXTTRAIL ./dirdat/et, EXTRACT EXTTEST

投递进程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;
添加进程PUMPTEST
add extract PUMPTEST,exttrailsource /home/oracle/ogg/dirdat/et
add rmttrail /root/ogg/dirdat/pt,extract PUMPTEST

Mysql目标端
提取进程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;

添加提取进程REPTEST
add replicat REPTEST,exttrail /root/ogg/dirdat/pt,checkpointtable targetdb.oggcheckpoint

同步测试
源段
insert into c select * from c;
进程统计信息

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

最后修改时间:2021-06-06 21:09:21
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

king007
暂无图片
3年前
评论
暂无图片 0
附件的脚本,作者能分享下不,感谢
3年前
暂无图片 点赞
评论
徐孝亮
暂无图片
3年前
评论
暂无图片 0
放歌666
3年前
暂无图片 点赞
评论