乐趣区

关于数据库:异构迁移Oracle的前世今生HuaweiCloudUGODRS

一、数据库国产化背景
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. 架构图

测试架构图如上,源端为装置在 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

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

在创立实例页面,抉择计费模式,填写并抉择实例相干信息后,单击“立刻购买”。

提交

  1. 测试登录 GaussDB for openGauss
    DAS 平台

命令行

[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 数据库多个版本(11g、12c、18c、19c)

填数据库连贯信息

预查看

校验迁徙所须要的必要条件

抉择评估范畴

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

工作确认,创立

确认指标库评估

智能化举荐指标数据库品种的抉择,用户选型的角度是多维度的考量的,UGO 提供兼容度角度举荐能够提供要害量化的维度。

源数据库剖析

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

指标数据库评

对不同品种的指标数据库进行兼容性和性能的剖析

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

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

总结报告


创立迁徙我的项目

转换打算

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

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

SQL 前后比照及批改倡议

语法转换

对象校对

新性能瞻望
据理解,将来还将打算反对如下性能:

能够一次性残缺看到 Oracle 51 种对象一>GaussDB (for openaauss)对象兼容度,而不是仅仅展现以后 Oracle 应用了哪些对象,对于打算批量替换 Oracle 的用户能够一次性了解兼容度问题。

针对 Oracle 零碎视图集成到业务 PL/SQL 中的广泛状况。UGO 对 Oracle 和 GaussDB (for opencauss)零碎视图兼容关系进行具体比照,贴合用户去 O 过程中的要害诉求进行针对性设计。

针对对象兼容度进行属性级兼容剖析和比照,解决了业界广泛答复不了的一个问题:例如一个索引转化胜利,如何证实这个索引转化胜利?UGO 的这个性能能够展现这个索引在 Oracle 有几种属性,在 GaussDB(for opengauss)有对应的属性进行反对,所以两者等价了。

报告展现

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


创立同步工作

填写连贯信息,创立 SMN

填写源库和指标库信息

编辑同步工作

高级设置

数据加工

预查看

预查看的条目十分多,能够防止踩很多坑。

工作确认

控制台截图

源端

指标端

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

数据级比照:反对对表或者汇合的行数和内容进行比照。(内容比照暂未凋谢)

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

四、测试总结

传统的 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)认证。

退出移动版