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

一、数据库国产化背景
racle仍然是迄今为止最伟大的数据库,我们这一代人见过或者听说的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. 架构图
    异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第1张图片

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

  1. 搭建源端环境
    打包镜像

    [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
    
    
  2. 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
  1. 购买目标端 GaussDB for openGauss
    控制台选取云数据库GaussDB

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第2张图片

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第3张图片

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第4张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第5张图片

提交

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第6张图片

  1. 测试登录GaussDB for openGauss
    DAS平台
    异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第7张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第8张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第9张图片

命令行

[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)
  1. UGO对象迁移
    UGO整个对象迁移流程如下:

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第10张图片
创建评估项目

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第11张图片

填数据库连接信息

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第12张图片

预检查

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第13张图片

选择评估范围

支持自定义多种数据库对象的评估

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第14张图片

任务确认,创建

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第15张图片

确认目标库评估

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第16张图片

源数据库分析

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第17张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第18张图片

目标数据库评

对不同种类的目标数据库进行兼容性和性能的分析

工作量及人天评估,对象信息的统计解决客户痛点问题

列举存在的风险点及给出相应的修改意见

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第19张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第20张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第21张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第22张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第23张图片

总结报告

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第24张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第25张图片
创建迁移项目

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第26张图片

转换计划

业界去O普遍是在数据库语法层模仿Oracle语法,这种做法其实是藕断丝连的,华为的方案是完全切换到自主可控的生态,所以UGO的转化是属于“真转化”。

华为在公开直播课中也提到UGO训练库具有独特的优势,本身是Oracle全球的top级用户,在IOE的核心领域进行打磨,替换大行的Oracle巨石系统核心业务,也就是A类业务。目前标志性项目中千万行级PLSQL已经达到95%的转化率。

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第27张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第28张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第29张图片

SQL前后对比及修改建议

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第30张图片

语法转换

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第31张图片

对象校正

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第32张图片

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

可以一次性完整看到Oracle 51种对象一>GaussDB (for openaauss)对象兼容度,而不是仅仅展示当前Oracle使用了哪些对象,对于计划批量替换Oracle的用户可以一次性理解兼容度问题。

针对Oracle系统视图集成到业务PL/SQL中的普遍情况。UGO对Oracle和GaussDB (for opencauss)系统视图兼容关系进行详细对比,贴合用户去O过程中的关键诉求进行针对性设计。

针对对象兼容度进行属性级兼容分析和对比,解决了业界普遍回答不了的一个问题:例如一个索引转化成功,如何证明这个索引转化成功?UGO的这个功能可以展示这个索引在Oracle有几种属性,在GaussDB(for opengauss)有对应的属性进行支持,所以两者等价了。

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第33张图片

报告展示

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第34张图片

  1. DRS数据同步
    RDS数据同步流程如下:

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第35张图片
创建同步任务

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第36张图片

填写连接信息,创建SMN

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第37张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第38张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第39张图片

填写源库和目标库信息

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第40张图片

编辑同步任务

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第41张图片

高级设置

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第42张图片

数据加工

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第43张图片

预检查

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第44张图片

任务确认

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第45张图片

控制台截图

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第46张图片

源端

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第47张图片

目标端

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第48张图片

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第49张图片

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第50张图片

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

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第51张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第52张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第53张图片

异构迁移Oracle的前世今生——HuaweiCloud+UGO+DRS_第54张图片

四、测试总结

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

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

关于作者
李宏达,openGauss开源社区commiter,目前主要从事Oracle,openGauss,云服务相关工作。现拥有Oracle OCP,OceanBase OBCA,openGauss OGCA,PostgreSQL PGCA,华为云HCIP(Solutions Architect)认证。

你可能感兴趣的