一、数据库国产化背景
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来迁移并实时同步数据,并对迁移过程及数据进行评估和校验。
测试架构图如上,源端为安装在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]# 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
- 购买目标端 GaussDB for openGauss
控制台选取云数据库GaussDB
在“实例管理”页面,单击“购买数据库实例”
在创建实例页面,选择计费模式,填写并选择实例相关信息后,单击“立即购买”。
提交
命令行
[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对象迁移
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)有对应的属性进行支持,所以两者等价了。
报告展示
- DRS数据同步
RDS数据同步流程如下:
填写连接信息,创建SMN
填写源库和目标库信息
编辑同步任务
高级设置
数据加工
预检查
预检查的条目非常多,可以避免踩很多坑。
任务确认
控制台截图
源端
目标端
- 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)认证。