资讯专栏INFORMATION COLUMN

去O迁移小计(oracle--MySQL)

IT那活儿 / 2594人阅读
去O迁移小计(oracle--MySQL)
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

迁移背景

随着集团去O工作展开,近期实施多套oracle迁移开源数据库,随着业务需求变化,数据量较大,迁移面临的调整也越来越大,近期实施一次大表迁移MySQL的操作,在迁移过程中并对该大表进行分表 ; 要求业务停机时间不超过2小时

环境说明:

主机
数据库
迁移对象
用途
10.10.10.11
Oracle 19c
user.big_table(300GB)
源端数据库
10.10.10.12
MySQL8.0
user.table_n(分150个表)
目标数据库
10.10.10.13
--

临时主机,部署迁移工具
迁移思路:
序号
操作
耗时
1
Oracle端使用物化视图分表
约50h
2
使用etl工具同步mv数据到mysql
约70h
3
配置ogg同步mv分表
4
启用mv增量刷新
5
停业务,准备切换到MySQL

6
最后一次mv增量刷新,并确保ogg同步到完成

7
业务切换到MySQL验证业务



迁移过程

2.1 实施MV分表

原表约300GB数据,迁移到MySQL中需要分表为150个分表;最终分表方式如下(对字段后40位求和与150取余):
-创建mv的脚本如下:
alter session force parallel query parallel 10;
alter session force parallel ddl parallel 10;
alter session force parallel dml parallel 10;
create materialized view TABLE_O refresh fast  with primary key  on demand  as
select * FROM  USER.BIG_TABLE
where mod(decode(length(col1), 1,ASCII(substr(col1, -1, 1)),
2, ASCII(substr(col1, -1, 1)) + ASCII(substr(col1, -2, 1)),
3, ASCII(substr(col1, -1, 1)) + ASCII(substr(col1, -2, 1)) + ASCII(substr(col1, -3, 1)) ,
......
, 150) = 0 ;

分表踩坑:

  • 一开始才用对字段进行hash分表,经测试,oracle hash计算结果和应用程序hash计算结不一致,放弃该方式。
  • 对字段后2位进行ASCII计算去和后和150进行取余,经测试数据分布严重不均匀不能实现良好的分表效果。
  • 多次测试后,最终确定采用字段后40位求和后与150取余。
  • 使用物化视分表,增量刷新缓慢,通过调整参数规避。

2.2 采用ETL同步分表数据到MySQL

由于ogg initial load初始化效率较低,故采用kettle同步mv数据到MySQL:

  • 在10.10.10.13主机部署kettle软件;
  • MySQL提前创建表结构;
  • 配置kettl同步。
Kettl程序如下:

2.3 配置ogg同步mv到MySQL

1)Oracle创建ogg账号

CREATE USER GOLDENGATE IDENTIFIED BY goldengate DEFAULT TABLESPACE users TEMPORARY TABLESPACE TEMP;
GRANT CONNECT TO GOLDENGATE;
GRANT ALTER ANY TABLE TO GOLDENGATE;
GRANT ALTER SESSION TO GOLDENGATE;
GRANT CREATE SESSION TO GOLDENGATE;
GRANT FLASHBACK ANY TABLE TO GOLDENGATE;
GRANT SELECT ANY DICTIONARY TO GOLDENGATE;
GRANT SELECT ANY TABLE TO GOLDENGATE;
GRANT RESOURCE TO GOLDENGATE;
GRANT EXECUTE ANY TYPE TO GOLDENGATE;
GRANT SELECT ANY TRANSACTION TO GOLDENGATE;
GRANT CREATE any  TABLE,CREATE any  SEQUENCE TO goldengate ;
GRANT INSERT ANY TABLE TO GOLDENGATE;
GRANT UPDATE ANY TABLE TO GOLDENGATE;
GRANT DELETE ANY TABLE TO GOLDENGATE;
GRANT CREATE ANY INDEX TO GOLDENGATE;
grant unlimited  tablespace to goldengate ;
grant execute on DBMS_FLASHBACK to goldengate;
grant  COMMENT ANY TABLE  to goldengate;
alter system set enable_goldengate_replication=true sid=* scope=both;
exec dbms_goldengate_auth.grant_admin_privilege(goldengate)

2归档模式/补充日志/force logging

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
alter database FORCE LOGGING;
set line 350 pages 999
col NAME for a15
col LOG_MODE for a15
col OPEN_MODE for a15
col PLATFORM_NAME for a25
col FORCE_LOGGING for a20
col SUPPLEMENTAL_LOG_DATA_MIN for a25
SELECT
NAME,
LOG_MODE,
OPEN_MODE,
PLATFORM_NAME,
FORCE_LOGGING,
SUPPLEMENTAL_LOG_DATA_MIN
FROM
V$DATABASE;
alter system archive log current;

3)部署ogg软件

在10.10.10.13部署ogg软件,部署过程较为简单,不在赘述。

4)添加ogg凭证

export TNS_ADMIN=/data/ggsdata/tnsadmin
exora=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.10.10.11 )(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =test )
)
)
添加ogg凭证:
add credentialstore
alter credentialstore add user goldengate@exora alias exora
INFO CREDENTIALSTORE
dblogin useridalias exora

5)添加附加日志

为150个mv都添加附加日志:
add  trandata user.table_0
info  trandata user.table_0
add  trandata user.table_1
info  trandata user.table_2
......

6)配置ogg mgr

-- 参数如下:
PORT 7809
DYNAMICPORTLIST 7810-7819
ACCESSRULE, PROG SERVER, ALLOW
AUTOSTART EXTRACT *
AUTORESTART EXTRACT * retries 5 waitminutes 3
PURGEOLDEXTRACTS /ogg/ggs_oracle/dirdat/*,usecheckpoints, minkeepdays 2
LAGREPORTMINUTES 10
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 60
-- 启动mgr:
Start  mgr

7)配置extract

  • 参数文件如下:
--base parameter
extract ex_ora
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
SETENV (TNS_ADMIN=/data/ggsdata/tnsadmin)
useridalias exora
numfiles 5000
TRANLOGOPTIONS INTEGRATEDPARAMS (max_sga_size 256, parallelism 1)
exttrail /data/ggsdata/dirdat/yx
DISCARDFILE /data/ggsdata/dirrpt/ex_ora_01.dsc,APPEND,MEGABYTES 100
DISCARDROLLOVER AT 3:00
REPORTCOUNT EVERY 30 MINUTES, RATE
REPORTROLLOVER AT 9:00
WARNLONGTRANS 2h, CHECKINTERVAL 30m
TRANLOGOPTIONS INTEGRATEDPARAMS(_CKPT_RETENTION_CHECK_FREQ 300)
TRANLOGOPTIONS EXCLUDEUSER GOLDENGATE
-- Performance optimization
cachemgr cachesize 512M, cachedirectory /data/ggsdata/dirtmp 10G
BR BRINTERVAL 40M, BRDIR BR
--map objects(150个分表)
table UPSYS.t_audition_0;
table UPSYS.t_audition_1;
......
  • 添加extract:
dblogin useridalias exora
REGISTER EXTRACT ex_ora , DATABASE
ADD EXTRACT ex_ora, INTEGRATED TRANLOG, BEGIN NOW
ADD EXTTRAIL /data/ggsdata/dirdat/yx, EXTRACT ex_ora , MEGABYTES 50
start  exora

8)配置OGG复制到MySQL

  • 安装ogg for mysql:解压软件即可,不在赘述。
  • MySQL创建ogg用户。
create user goldengate@% identified by Goldengate-123;
grant all on *.* to goldengate@%;

配置MySQL ogg mgr进程:

edit params mgr

PORT 7839
DYNAMICPORTLIST 7840-7849
ACCESSRULE, PROG SERVER, ALLOW
AUTOSTART REPLICAT *
AUTORESTART REPLICAT * retries 5 waitminutes 1
--PURGEOLDEXTRACTS /ogg/ggs_mysql/dirdat/*,usecheckpoints, minkeepdays 2
LAGREPORTMINUTES 10
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 60
--STARTUPVALIDATIONDELAY 5
DBLOGIN sourcedb user@10.10.10.12:3306, USERID goldengate, PASSWORD Goldengate-123


Start mgr

添加复制进程:

  • 添加添加checkpointtable:
create database pt;

cd $OGG_HOME
ggsci
edit param ./GLOBALS
checkpointtable pt.ggs_checkpoint
  • 添加复制进程:
DBLOGIN sourcedb pt@10.10.10.12:3306, USERID goldengate, PASSWORD Goldengate-123
add checkpointtable pt.ggs_checkpoint
add replicat rp_ora,exttrail /data/ggsdata/dirdat/yx,checkpointtable pt.ggs_checkpoint
-- 编辑复制参数:
edit params rp_ora

replicat rp_ora
targetdb user@10.10.10.12:3306,userid goldengate,password Goldengate-123
--sourcedefs   /data/ggsdata/dirdef/zly.def
discardfile /data/ggsdata/dirrpt/rep_exora.dsc,append,megabytes 50
REPERROR DEFAULT, ABEND
REPORTCOUNT EVERY 60 MINUTES, RATE
REPORTROLLOVER AT 9:00

MAP user.table_0, target user.table_0;
MAP user.table_1, target user.table_1;
......
MAP user.table_149, target user.table_149;
此时oracle和MySQL中数据一样,且 oracle中mv未进行刷新,可直接启动复制进程。
Start rp_ora

2.4 配置物化视图增量刷新

set linesize 350 pages 999
col OWNER for a15
col JOB_NAME for a25
col JOB_CREATOR for a25
col ENABLED for a10
col START_DATE for a25
col NEXT_RUN_DATE for a25
col LAST_START_DATE for a25
col REPEAT_INTERVAL for a40
col JOB_ACTION for a60
SELECT OWNER,
JOB_NAME,
ENABLED,
STATE,
JOB_TYPE,
JOB_ACTION,
to_char(START_DATE, yyyy/mm/dd hh:mm) START_DATE,
to_char(LAST_START_DATE, yyyy/mm/dd hh:mm) LAST_START_DATE,
to_char(NEXT_RUN_DATE, yyyy/mm/dd hh:mm) NEXT_RUN_DATE,
REPEAT_INTERVAL,
RUN_COUNT
FROM dba_scheduler_jobs
WHERE
JOB_ACTION LIKE %TABLE_%"%
ORDER BY 6 ;
执行以上查询,根据查询结果编写启用mv增量刷新的语句,如:
exec dbms_scheduler.enable(name=>upper(UPSYS.MV_RF$J_0_S_55082) );
启用刷新后,观察ogg同步情况。

2.5 切换业务到MySQL

业务停止后,手动执行一次快速刷新,ogg无延迟后,将业务切换到MySQL数据库。


经验总结

本次迁移经过多次测试,总计耗时约2个月;测试过程中,触发了物化视图bug等诸多问题,甚至影响现网业务,导致测试进展缓慢。
应当充分了解业务,只有对业务对数据了解之后,才能提出新环境合理的规划设计及选择合理的迁移技术。
在技术选择上,应该进行广泛的测试,不局限于某一种技术,避免遇阻后没有备用方案,在条件允许的情况下,能达成目标的方案都应该进行测试评估,择优而用


本文作者:张雷员(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129107.html

相关文章

  • OceanBase迁移服务:向分布式架构升级的直接路径

    摘要:年月日,迁移服务解决方案在城市峰会中正式发布。迁移服务向分布式架构升级的直接路径基于上述问题和挑战,同时经过蚂蚁十年数据库架构升级的先进经验,蚂蚁金服为客户打造了这款一站式数据迁移解决方案迁移服务,简称。 2019年1月4日,OceanBase迁移服务解决方案在ATEC城市峰会中正式发布。蚂蚁金服资深技术专家师文汇和技术专家韩谷悦共同分享了OceanBase迁移服务的重要特性和业务实践...

    KaltZK 评论0 收藏0
  • OceanBase迁移服务:向分布式架构升级的直接路径

    摘要:年月日,迁移服务解决方案在城市峰会中正式发布。迁移服务向分布式架构升级的直接路径基于上述问题和挑战,同时经过蚂蚁十年数据库架构升级的先进经验,蚂蚁金服为客户打造了这款一站式数据迁移解决方案迁移服务,简称。 2019年1月4日,OceanBase迁移服务解决方案在ATEC城市峰会中正式发布。蚂蚁金服资深技术专家师文汇和技术专家韩谷悦共同分享了OceanBase迁移服务的重要特性和业务实践...

    gnehc 评论0 收藏0
  • 基于双态IT架构的混合云助力企业数字化转型之路

    摘要:打造满足未来稳态敏态业务的双态架构分析机构预测,年全球的都是由数字化来驱动。单奖定介绍说,在解决敏态稳态同时落地的需求,联想不仅提供支持双态的混合云架构,还能帮助企业实现数据的价值。今天,越来越多的企业认识到,在企业数字化转型的道路上,IT基础设施是必不可少的重要支撑。随着企业数字化转型脚步加快,IT基础设施也正在发生重要变革,混合云、网络虚拟化、安全等成为这轮变革的关键词。作为对市场最新变...

    Cruise_Chan 评论0 收藏0
  • PyCharm 设置小计

    摘要:在使用的新特性时,出现如下,身为完美主义强迫症患者,怎么能忍展开详情无脑翻译一下如果您需要你的代码兼容多个版本例如如果您正在构建一个库,请启用此检查。检查设置中可以指定你的代码需要兼容的版本的范围。 在使用Python 3.6的新特性f-strings时,出现如下warning,身为完美主义+强迫症患者,怎么能忍? Python version 2.7 does not support...

    Warren 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<