一、数据库国产化背景
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. 架构图
测试架构图如上,源端为安装在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
在“实例管理”页面,单击“购买数据库实例”
在创建实例页面,选择计费模式,填写并选择实例相关信息后,单击“立即购买”。
提交