一、数据库国产化背景
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来迁移并实时同步数据,并对迁移过程及数据进行评估和校验。
测试架构图如上,源端为安装在Docker中的Oracle 19C,目标端为华为云上购买的GaussDB(for openGauss)实例,UGO及DRS等都是通过华为云购买,直接在网页控制台中操作。
[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]# lscheckDBStatus.sh Checksum.ee createDB.sh db_inst.rsp installDBBinaries.sh relinkOracleBinary.sh runUserScripts.sh setupLinuxEnv.shcheckSpace.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 lsREPOSITORY TAG IMAGE ID CREATED SIZEoracle/database 21.3.0-ee 0855ee2749de 9 days ago 7.94GBswr.cn-north-4.myhuaweicloud.com/oracle/oracle 21.3.0 0855ee2749de 9 days ago 7.94GBoracle/database 19.3.0-ee cc930c1e5ee2 10 days ago 6.53GBswr.cn-north-4.myhuaweicloud.com/oracle/oracle 19.3.0 cc930c1e5ee2 10 days ago 6.53GBswr.cn-north-4.myhuaweicloud.com/oracle/oracle 19c cc930c1e5ee2 10 days ago 6.53GBoraclelinux 7-slim 078d6e3ae75e 5 weeks ago 132MB
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 2021Version 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 - ProductionVersion 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 NOSQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 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 LISTENERVersion TNSLSNR for Linux: Version 19.0.0.0.0 - ProductionStart Date 03-DEC-2021 03:31:42Uptime 0 days 2 hr. 4 min. 46 secTrace Level offSecurity ON: Local OS AuthenticationSNMP OFFListener Parameter File /opt/oracle/product/19c/dbhome_1/network/admin/listener.oraListener Log File /opt/oracle/diag/tnslsnr/666d4b0868ff/listener/alert/log.xmlListening 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
控制台选取云数据库GaussDB
在“实例管理”页面,单击“购买数据库实例”
在创建实例页面,选择计费模式,填写并选择实例相关信息后,单击“立即购买”。
提交
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)
UGO整个对象迁移流程如下:
创建评估项目
填数据库连接信息
预检查
选择评估范围
任务确认,创建
确认目标库评估
源数据库分析
目标数据库评
总结报告
创建迁移项目
转换计划
SQL前后对比及修改建议
语法转换
对象校正
新功能展望 据了解,未来还将计划支持如下功能:
报告展示
RDS数据同步流程如下:
创建同步任务
填写连接信息,创建SMN
填写源库和目标库信息
编辑同步任务
高级设置
数据加工
预检查
任务确认
控制台截图
源端
目标端
四、测试总结
传统的Oracle异构迁移需要大量的人工参与调研评估、测试验证,项目实施的周期也非常长,整个人力成本平均大约在50万左右。在目前“去O”+上云的趋势下,借助华为云的UGO和DRS工具能够快速迁移到华为云GaussDB(for openGauss)以及RDS等异构数据库,工具完全覆盖了整个异构对象迁移、数据同步、数据校验整个项目周期,其中最复杂的对象迁移只需根据改写提示和评估人天对部分对象进行整改即可,这大大降低了“去O”的成本,降低了国产数据库在替换传统数据库的门槛,期待工具未来支持更多的数据库并支持云下迁移。
墨天轮原文链接:https://www.modb.pro/db/172953?sjhy
关于作者
李宏达,openGauss开源社区commiter,目前主要从事Oracle,openGauss,云服务相关工作。现拥有Oracle OCP,OceanBase OBCA,openGauss OGCA,PostgreSQL PGCA,华为云HCIP(Solutions Architect)认证。