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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS

原创 李宏达 2021-12-07
1413

目录导读

一、数据库国产化背景

Oracle仍然是迄今为止最伟大的数据库,我们这一代人见过或者听说的Oracle版本是8i,9i,发布日期为1998年和2001年,Oracle最早的发布日期可以追溯到上个世纪60~70年代,那时候的甲骨文公司叫做RSi(Relational Software,Inc),Oracle数据库从功能简单到复杂,从不稳定到稳定经历了时间的沉淀。

盖国强盖老师称作“国产数据库的元年”是2019年,国产数据库起步虽晚,但是也已经有40年左右的历史,随着近年来国家的引导、支持和扶植,互联网企业以高度的热情入局,新兴的独立数据库创业企业参与,头部科技企业的加入,加上本土数据库的庞大用户基数,相信国产数据库的发展终有一天能后来居上,从试用,能用,到敢用,易用,好用的转变。

随着2019年“贸易战”的影响,多项技术被“卡脖子”,尤其是芯片行业,造成国内企业无芯可用的局面。作为三大基础软件之一的数据库,同样也存在“卡脖子”的问题,在国家政策的引导下,越来越多的企业入局,追求自主可控,摆脱国外垄断的局面。

另外,在很多细分场景上,单独的Oracle已经无法满足国内独特业务场景的需求,国产数据库在分布式、云原生相继发力,目前在金融、互联网、运营商等行业已经取得不错的成绩,甚至打开了国外的市场。

去IOE的口号近年来一直在被提到,随着国产数据库浪潮的袭来,去IOE中的“Oracle”已经被许多大中小型企业提上日程,有一个比较共性的问题是,越是重度应用Oracle,使用特性越多的用户,往往是迁移复杂度越大。举个例子,Oracle的PL/SQL功能,随着时间的积累有的客户PL/SQL的代码量达到百万甚至千万级别,这个量级异构迁移的代码改造量所花费的人力物力是很多客户无法接受的,仅这一个功能就使许多想去“O”的用户望而却步。当前的去“O”形势是八仙过海各显神通,并没有一款很好的工具能够统一迁移流程,华为云近期推出了两款产品UGO+DRS,相信可以帮助用户完成并简化去“O”的过程。

二、什么是UGO,DRS,GaussDB

数据库和应用迁移 UGO(Database and Application Migration UGO,简称UGO)是专注于异构数据库结构迁移和应用SQL转换的专业云服务。通过UGO的预迁移评估、自动化语法转换,帮助用户提前识别迁移风险,提升迁移效率,最大化降低用户的数据库迁移成本。

数据复制服务(Data Replication Service,简称为DRS)是一种易用、稳定、高效,用于数据库在线迁移和数据库实时同步的云服务。DRS围绕云数据库,降低了数据库之间数据流通的复杂性,有效地帮助您减少数据传输的成本。

GaussDB(for openGauss)是华为公司倾力打造的自研企业级分布式关系型数据库,该产品具备企业级复杂事务混合负载能力,同时支持优异的分布式事务,同城跨AZ部署,数据0丢失,支持1000+扩展能力,PB级海量存储等企业级数据库特性。拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。同时华为开源openGauss单机主备社区版本,鼓励更多伙伴、开发者共同繁荣中国数据库生态。

华为凭借UGO+DRS共同在获得了信通院在商业教据库迁移方面的设定行业标准中最高级别成绩

三、迁移测试

本次测试模拟生产环境中的Oracle数据库到华为云GaussDB(for openGauss)的异构迁移,使用UGO来迁移对象,使用DRS来迁移并实时同步数据,并对迁移过程及数据进行评估和校验。

1. 架构图

DRS_UGO.png

测试架构图如上,源端为安装在Docker中的Oracle 19C,目标端为华为云上购买的GaussDB(for openGauss)实例,UGO及DRS等都是通过华为云购买,直接在网页控制台中操作。

2. 搭建源端环境

打包镜像

[root@ecs-ugo ~]# git clone https://github.com/oracle/docker-images.git [root@ecs-ugo ~]# cd docker-images-main/OracleDatabase/SingleInstance/dockerfiles/19.3.0/ [root@ecs-ugo 19.3.0]# ls checkDBStatus.sh Checksum.ee createDB.sh db_inst.rsp installDBBinaries.sh relinkOracleBinary.sh runUserScripts.sh setupLinuxEnv.sh checkSpace.sh Checksum.se2 dbca.rsp.tmpl Dockerfile LINUX.X64_193000_db_home.zip runOracle.sh setPassword.sh startDB.sh [root@ecs-ugo 19.3.0]# pwd /root/docker-images-main/OracleDatabase/SingleInstance/dockerfiles/19.3.0 [root@ecs-ugo 19.3.0]# cd .. [root@ecs-ugo dockerfiles]# ./buildContainerImage.sh --help ./buildContainerImage.sh: illegal option -- - Usage: buildContainerImage.sh -v [version] -t [image_name:tag] [-e | -s | -x] [-i] [-o] [container build option] Builds a container image for Oracle Database. Parameters: -v: version to build Choose one of: 11.2.0.2 12.1.0.2 12.2.0.1 18.3.0 18.4.0 19.3.0 21.3.0 -t: image_name:tag for the generated docker image -e: creates image based on 'Enterprise Edition' -s: creates image based on 'Standard Edition 2' -x: creates image based on 'Express Edition' -i: ignores the MD5 checksums -o: passes on container build option * select one edition only: -e, -s, or -x LICENSE UPL 1.0 Copyright (c) 2014,2021 Oracle and/or its affiliates. [root@ecs-ugo dockerfiles]# ./buildContainerImage.sh -v 19.3.0 -i -e [root@ecs-ugo dockerfiles]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE oracle/database 21.3.0-ee 0855ee2749de 9 days ago 7.94GB swr.cn-north-4.myhuaweicloud.com/oracle/oracle 21.3.0 0855ee2749de 9 days ago 7.94GB oracle/database 19.3.0-ee cc930c1e5ee2 10 days ago 6.53GB swr.cn-north-4.myhuaweicloud.com/oracle/oracle 19.3.0 cc930c1e5ee2 10 days ago 6.53GB swr.cn-north-4.myhuaweicloud.com/oracle/oracle 19c cc930c1e5ee2 10 days ago 6.53GB oraclelinux 7-slim 078d6e3ae75e 5 weeks ago 132MB
复制

启动Oracle 19c

docker run --name oracle21c -d \ -p 15221:1521 \ -e ORACLE_SID=LEE \ -e ORACLE_PDB=oracle19c \ -e ORACLE_PWD=Enmotech \ -e ORACLE_CHARACTERSET=ZHS16GBK \ swr.cn-north-4.myhuaweicloud.com/oracle/oracle:19.3.0
复制

测试连接

[root@ecs-ugo ~]# docker exec -it oracle19c bash [oracle@666d4b0868ff ~]$ export ORACLE_SID=LEE [oracle@666d4b0868ff ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 3 05:35:53 2021 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORACLE19C READ WRITE NO SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 [oracle@666d4b0868ff ~]$ lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 03-DEC-2021 05:36:29 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 03-DEC-2021 03:31:42 Uptime 0 days 2 hr. 4 min. 46 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora Listener Log File /opt/oracle/diag/tnslsnr/666d4b0868ff/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=666d4b0868ff)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/admin/LEE/xdb_wallet))(Presentation=HTTP)(Session=RAW)) Services Summary... Service "LEE" has 1 instance(s). Instance "LEE", status READY, has 1 handler(s) for this service... Service "LEEXDB" has 1 instance(s). Instance "LEE", status READY, has 1 handler(s) for this service... Service "d16cf25e0b510cc0e053020011ace43e" has 1 instance(s). Instance "LEE", status READY, has 1 handler(s) for this service... Service "oracle19c" has 1 instance(s). Instance "LEE", status READY, has 1 handler(s) for this service... The command completed successfully
复制

3. 购买目标端 GaussDB for openGauss

控制台选取云数据库GaussDB

image.png

在“实例管理”页面,单击“购买数据库实例”

image.png

在创建实例页面,选择计费模式,填写并选择实例相关信息后,单击“立即购买”。

image.png

image.png

提交

image.png

4. 测试登录GaussDB for openGauss

DAS平台
image.png

image.png

image.png

命令行

[root@ecs-ugo Euler2.5_X86_64]# gsql -d enmotech -h 192.168.0.202 -Uroot -p8000 -r -WEnmotech2021@ gsql ((GaussDB Kernel V500R001C20 build 327f8401) compiled at 2021-09-15 00:29:02 commit 1094 last mr 6379 ) SSL connection (cipher: DHE-RSA-AES128-GCM-SHA256, bits: 128) Type "help" for help. enmotech=> select version(); version ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ PostgreSQL 9.2.4 (GaussDB Kernel V500R001C20 build 327f8401) compiled at 2021-09-15 00:28:41 commit 1094 last mr 6379 on aarch64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit (1 row)
复制

5. UGO对象迁移

UGO整个对象迁移流程如下:
UGO.png
创建评估项目

  • 支持Oracle数据库多个版本(11g、12c、18c、19c)

image.png

填数据库连接信息

image.png

预检查

  • 校验迁移所需要的必要条件

image.png

选择评估范围

  • 支持自定义多种数据库对象的评估
    image.png

任务确认,创建

image.png

确认目标库评估

  • 智能化推荐目标数据库种类的选择,用户选型的角度是多维度的考量的,UGO提供兼容度角度推荐可以提供关键量化的维度。

image.png

源数据库分析

  • 记录了原数据库画像的详细情况

image.png

image.png

目标数据库评估

  • 对不同种类的目标数据库进行兼容性和性能的分析
  • 工作量及人天评估,对象信息的统计解决客户痛点问题
  • 列举存在的风险点及给出相应的修改意见

image.png

image.png

image.png

image.png

image.png

总结报告

image.png

image.png
创建迁移项目

image.png

转换计划

  • 业界去O普遍是在数据库语法层模仿Oracle语法,这种做法其实是藕断丝连的,华为的方案是完全切换到自主可控的生态,所以UGO的转化是属于“真转化”。
  • 华为在公开直播课中也提到UGO训练库具有独特的优势,本身是Oracle全球的top级用户,在IOE的核心领域进行打磨,替换大行的Oracle巨石系统核心业务,也就是A类业务。目前标志性项目中千万行级PLSQL已经达到95%的转化率。

image.png

image.png

image.png

sql前后对比及修改建议

image.png

语法转换

image.png

对象校正

image.png

新功能展望
据了解,未来还将计划支持如下功能:

  • 可以一次性完整看到Oracle 51种对象一>GaussDB (for openaauss)对象兼容度,而不是仅仅展示当前Oracle使用了哪些对象,对于计划批量替换Oracle的用户可以一次性理解兼容度问题
  • 针对Oracle系统视图集成到业务PL/SQL中的普遍情况。UGO对Oracle和GaussDB (for opencauss)系统视图兼容关系进行详细对比.贴合用户去O过程中的关键诉求进行针对性设计
  • 针对对象兼容度进行属性级兼容分析和对比,解决了业界普遍回答不了的一个问题:例如一个索引转化成功,如何证明这个索引转化成功?。UGO的这个功能可以展示这个索引在oracle有几种属性,在GaussDB(for opengauss)有对应的属性进行支持.所以两者等价了

image.png

报告展示

image.png

6. DRS数据同步

RDS数据同步流程如下:
DRS.png
创建同步任务

image.png

填写连接信息,创建SMN

image.png

image.png

image.png

填写源库和目标库信息

image.png

编辑同步任务

image.png

高级设置

image.png

数据加工

image.png

预检查

  • 预检查的条目非常多,可以避免踩很多坑。

image.png

任务确认

image.png

控制台截图

image.png

源端

image.png

目标端

image.png

7. DRS数据校验

  • 对象级对比:支持对数据库、索引、表、视图、存储过程和函数、表的排序规则等对象进行对比。

image.png

  • 数据级对比:支持对表或者集合的行数和内容进行对比。(内容对比暂未开放)

image.png

  • 查看对比报表,导出报告。

image.png

image.png

image.png

image.png

四、测试总结

传统的Oracle异构迁移需要大量的人工参与调研评估、测试验证,项目实施的周期也非常长,整个人力成本平均大约在50万左右。在目前“去O”+上云的趋势下,借助华为云的UGO和DRS工具能够快速迁移到华为云GaussDB(for openGauss)以及RDS等异构数据库,工具完全覆盖了整个异构对象迁移、数据同步、数据校验整个项目周期,其中最复杂的对象迁移只需根据改写提示和评估人天对部分对象进行整改即可,这大大降低了“去O”的成本,降低了国产数据库在替换传统数据库的门槛,期待工具未来支持更多的数据库并支持云下迁移。

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

评论

zly
暂无图片
3年前
评论
暂无图片 0
./buildContainerImage.sh -v 19.3.0 -i -e 执行这个命令后报错:No docker or podman executable found in your PATH 查看相关路径下文件如下: [root@ecs-kpcent dockerfiles]# ls 11.2.0.2 12.1.0.2 12.2.0.1 18.3.0 18.4.0 19.3.0 21.3.0 buildContainerImage.sh 操作系统版本为CentOS Linux release 8.0.1905 (Core) 网络上搜索解决方案未果。发在此处江湖求教~~
3年前
暂无图片 点赞
1
李宏达
暂无图片
3年前
回复
暂无图片 0
你这看起来像没安装docker服务啊
3年前
暂无图片 点赞
回复