【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

实操:从 Oracle 到 GaussDB 的数据迁移

  • 2020-02-21
  • 本文字数:5385 字

    阅读完需:约 18 分钟

实操:从Oracle到GaussDB的数据迁移

本文由 dbaplus 社群授权转载。

一、背景

最近某省运营商 O 域核心业务系统的数据库计划从 Oracle 迁移至 GaussDB,数据库服务器也从 SUN 小型机转到华为 TaishanARM 服务器。本人有幸参与其中,主要负责 Oracle 到 GaussDB 的数据迁移环节。数据迁移前期使用 Datasync 工具进行导数测试,但由于导数效率无法满足生产系统的停机要求,而华为这个时候正好推出新的迁移工具—SDR,于是利用 SDR 进行了一轮新的迁移测试。

1、环境信息

1)硬件配置信息


目标库 Taishan 服务器硬件配置信息如下所示:



源库 Sun 小机硬件配置如下所示:



2)软件配置信息


Taishan 服务器操作系统及数据库软件版本如下所示:



源库 Sun 小机操作系统及数据库软件版本如下所示:



由于本次文章的重点不在于环境的搭建,所以操作系统及 GaussDB 的安装过程就不细述。

2、SDR 产品描述

GaussDB SDR(Swift Data Replicator)是一款基于日志的实时 CDC 软件,支持对多种关系型数据库交易数据的实时捕获、转换与加载,主要应用于数据迁移、数据复制、异地容灾、应急备份、双业务中心、实时数仓/数据湖、查询卸载等场景。主要特点有:实时、高效的数据同步、丰富的异构同步能力、无插件、非侵入、安全无干扰和全程可视化运维管理等。

二、SDR 的环境准备

  • 支持源端为 Oracle 9i 及以上版本(测试使用的 SDR 版本只支持到 11R2)

  • 支持目标端为 GaussDB 100 V300R100

  • 持可选 schema、可选表进行全量数据同步

  • 支持可配条件导出源库数据,将满足条件的数据导入目标库

  • 支持多表并发同步,可配置并发个数

  • 支持单表数据的并发导出,可配置并发个数,不支持单表的并发导入

  • 支持自动同步表结构,自动进行数据类型映射,类型映射见下表


1)硬件要求


SDR 目前只支持 x86 的 64 位操作系统,对硬件资源的要求主要取决于源端数据库的数据变化量。



表 2-1 资源要求


2)软件要求



注:本次迁移测试将 SDR 部署在一台独立的 x86 服务器上,通过数据库业务端口访问两边数据库,由于大部分迁移操作都是平台网页进行,因此还建议准备一台能直接访问这台 x86 服务 7007/7008/7009 端口的 windows 服务器。

1、SDR 工具准备

1)创建安装用户和目录(x86 服务器上操作)


为 SDR 软件创建一个新用户,并创建一个安装目录/home/sdr:


su - rootgroupaddsdruseradd -g sdr -d /home/sdr -s /bin/shsdrchown -R sdr:sdr /home/sdr/
复制代码


2)切换到安装用户下,上传安装包


su - sdrls -l  / home /sdr/depend.tgzGaussDB_SDR_8.0.RC1_RHEL_x86_64.tar.gzlicence.dat.tar.gz
复制代码


3)解压所有压缩包


tar -xf depend.tgztar -xf GaussDB_SDR_8.0.RC1_RHEL_x86_64.tar.gztar -xf licence.dat.tar.gz
复制代码

2、SDR 工具安装

1)设置 SDR_HOME 环境变量


su - sdrexport DIP_HOME=/opt/sdr
复制代码


2)执行安装


cd /home/sdr./GaussDB_SDR_8.0.RC1_INSTALLCreating directory SDR.packVerifying archive integrity... All good.Uncompressing swift data replicator 100%Swift Data Replicator installation!©2019 Huawei Technologies Co., Ltd.Swift Data Replicator software will install into directory [/home/sdr]Please input Swift Data Replicator web server IP address: [127.0.0.1]Please input Swift Data Replicator web server port: [7008]Please input Swift Data Replicator manager server IP address: [127.0.0.1]Please input Swift Data Replicator manager server port: [7009]Please input Swift Data Replicator queue transfer server port: [7007]Please input Swift Data Replicator admin server port: [7006]Please input Swift Data Replicator kafka component port: [7005]Please input Swift Data Replicator database IP address: [127.0.0.1]Please input Swift Data Replicator database port: [1888]Please set default Swift Data Replicator Share Memory Size:[1]- 1GB[2]- 4GB[3]- 8GB[4]-16GB[5]-input other value(GB)please choose 1,2,3,4: [1]4Input value and choice list below, please confirm:http IP address : 127.0.0.1http port : 7008Manager IP address : 127.0.0.1Manager Port : 7009Transfer Port : 7007AdminServerPort : 7006Kafka component Port : 7005SDR Database IP : 127.0.0.1SDR Database Port : 1888Share memory size : 16GKafka Server Port : 7005Press any key to begin install. ( Ctrl-c to interrupt )Uncompressing bin.tgz...Uncompressing dbpkg.tgz...Uncompressing etc.tgz...Uncompressing lib.tgz...Uncompressing web.tgz...Wait a few of minutes, installing database...Checking parameters...Checking user...Checking old install...Checking kernel parameters...Checking dir...Checking integrality of run file...Decompressing run file...Warning: Dialect Scripts not found! But still proceed installationSetting user env...Checking data dir and config fileInitiate db instance...Creating database...Changing file permission due to security audit...Install successfully, for more detail information see /home/sdr/zengineinstall.log.Refreshing config...Creating db user...Initialize data...all done  →顺利安装完成
复制代码


3)配置 depend


进入 depend 目录。


cd /home/sdr/depend/sh enable.shEnable success
复制代码


4)加载 licence 文件


cd /home/sdrcp licence.dat etc/ls etc/dip_config.xml licence.dat odbcinst.ini version xlog.ini
复制代码


5)启动 SDR 组件


启动组件前需要先加载环境变量


su - sdrcd /home/sdr/../env(1)启动后台数据库cd /home/sdr/db/app/binpython zctl.py -t start(2)启动其他组件cd /home/sdr/start_all(3)启动web服务cd /home/sdrstart_web
复制代码


至此,SDR 所有安装准备工作完成。

三、SDR 配置

SDR 管理界面需要通过浏览器进入,浏览器可选择 chrome 或 IE 9.0 以上。网址为 x86 服务器的 IP,端口为安装时指定的端口,必须是 HTTPS,如 https://IP:port。初始帐号密码 admin/admin。



图-1-登录 SDR 控制台


登录后,需要先新建一个项目。



图-2-创建项目


输入项目名称,并保存。


点击进入项目后,会进入配置管理主界面。点击左上角的“新建”按钮,创建任务组。



图 -3-新建任务组


输入组名,和该组下进程的运行日志保留时间,点击“保存组”。


本次迁移测试是从 Oracle 到 GaussDB,属于异构数据库迁移,可以直接使用模板库中的异构链路进行配置,直接点击“异构链路”即可,如下图所示:



图 -4-异构链路配置


生成链路后,双击链路中的源库组件,在弹出的对话框中进行源库配置。(第一次配置后,可以选择作为模板保存,以便后续使用)。



图 -5-源库数据库配置


注:源数据库类型为 Oracle 时需要对导出的对象添加附加日志,添加附加日志的 SQL 可以在“必要环境配置”中一键生成,并拿到源库中执行。


配置完源库信息后,接下来要配置捕获进程,捕获进程主要是用于从源库中抽数,可配置需要迁移的 schema 和对象类型,以及抽数时间间隔,分配内存等参数,配置如下:



图-6-捕获配置



图-7-配置捕获进程的高级选项


注:源库为 Oracle RAC 时,需要把所有节点的信息都输入进去,并且选择“ENABLE”


配置好捕获进程之后,接下来需要配置队列信息。整个链路需要配置两个队列,一个是导出队列,一个是导入队列,可以先按顺序配置导出队列。具体配置如下:



图 -8-配置导出队列


队列配置完成后,需要配置 ETL 转换环节。在配置好源库信息后,ETL 的大部分内容都会自动填充,直接使用默认配置就完事了。具体配置如下:



图 -9- 配置 ETL


接着是配置导入队列,这里不多叙述。配置如下:



图 -10- 配置导入队列


按链路顺序,接下来是配置转载进程,但在配置之前,会提示需要先配置好目标库信息,所以只能先跳到最后的目标库信息配置,完成后再返回来配置转载进程信息。所以下面是配置目标 GaussDB 库的信息(同样,第一次配置时可以选择保存为 GaussDB 库的模板,方便后续使用。)



图 -11- 配置目标库信息


接下来终于可以愉快地配置转载进程信息了。转载进程可配置的内容比较多,主要分为:包含条件,排除条件和高级选项。


包含条件中可配置要导入的 schema 和对象类型,以及是否在目标库替换 schema_name。(本次测试进行了 schema_name 的转换,测试结果顺利。)



图 -12- 配置装载包含条件


接下来是配置排除条件,本次测试没有添加排除条件,有需要的同学可添加测试。



图 -13- 配置装载排除条件


下面是配置高级选项,下面截图是所有默认设置,可按需进行调整。



图 -14- 配置装载高级选项


确认保存后,迁移所需的各项组件配置完成。

四、SDR 全量迁移

SDR 工具自带数据初始化的功能,点击工具栏的“工具集 >存量数据同步”,弹出配置界面。可配置导出任务的并发数以及单表的并发数,需注意控制并发数大小,极端情况可能会出现导出进程总数等于任务并发数 * 表内并发数。另外,“将数据导出为字符串”的选项必须勾选,不然速度虽然会极大加快,但是导出导入失败率也会大大提高。



图 -15- 配置全量数据同步-导出条件配置


(注:开启初始化之前,需要在目标环境手动创建用户/权限/表空间等,创建命令跟 Oracle 基本一致。)


导出条件配置完并保存后,接下来配置导入条件配置。由于目标库没有业务压力,并发数可选择大些,也可根据需求选择是否“重建目标表”,“清空目标表”和“重建索引”等选项。



图-16- 配置全量数据同步-导入条件配置


配置完成兵保存后,点击“开始全同步”后即开始存量数据同步。



图 -17-查看全量同步实时信息


等待导出导入完成后即存量数据的迁移工作。迁移过程存在的报错信息可以在“导出错误信息”和“导入错误信息”中直接查阅。如果报错信息缺失或不足,可以进入到 x86 服务器中安装目录的 log 目录查看更详细信息。

五、SDR 增量迁移(正式迁移使用的步骤)

划重点!!前面的全量迁移和下面要说的增量迁移是两回事,如果按照前面步骤做完全量数据迁移,要做增量迁移也需要把目标库的数据全删掉重新再来!


在使用增备前,需要先从源库中获取最新的 scn 号。在源端 Oracle 库获取最新的 SCN 号:


select current_scn from v$database;CURRENT_SCN------------------16493654040783
复制代码

1、开启捕捉进程

需要提前按文“SDR 全量迁移”配置异构链路,这里不复述。配置完成后单独开启捕捉进程。在工作区选择捕获进程后,点击“启动”即可开启。



图-18- 开启捕捉进程

2、启动存量备份

这次存量备份需要把拿到的最新 scn 号输入进去,以便把这个 scn 号的所有数据都同步到目标库。



图-19- 配置存量数据同步

3、启动增备

等待存量备份完成后,单独开启转换和装载进程。以指定 SCN 方式启动转换进程,输入的 scn 就是在一开始获取到的最新 SCN 号。



图-20- 指定 scn 启动转换进程


ETL 启动完成后如图:



图-21- 开启转换进程后


以指定 SCN 方式启动装载进程,输入的 scn 就是在一开始获取到的最新 SCN 号。



图-22- 指定 scn 启动装载进程


转载进程启动完成后,状态如图:



图-23- 开启装载进程后


都启动完成后,在工作区选择“列表”方式查看各进程状态,都为 running 则正常。



图-24- 列表方式查看状态


至此,增备启动完成。


增备发起后,源库对操作表的 DML 和 DDL 都会准实时同步到目标端,直到手动终止或报错为止。(部分 DDL 不支持,例如:add database,add datafile,role 相关操作等等)

4、迁移过程问题

1)选择自动创建表的时候,分区表的分区信息(interval 等)无法自动同步,导致导入 GaussDB 后分区表变回普通表


解决思路:在开始导数前,手动在目标环境创建所有分区表,在存量数据导入时不选择“重建表”选项


2)导出时,一个表上同时有 long 和 clob 类型的字段会报错


报错信息:table[dcpp.aqua_explain_1483468080]include LOB and LONG column,unsupport


解决思路:在开始导数前,手动在目标环境创建所有报错表,在存量数据导入时不选择“重建表”选项


3)启动存量数据同步时,即使是同样的配置选项,点击“开始全同步“后,经常出现同步进程无法正常启动的问题


具体现象是:


  • 耗时:00H00M00S ,不开始计时

  • 源库 Oracle 中,发起一个查询全量表信息的 SQL 后,没有继续执行具体表的导出 SQL,而是直接终结会话

  • 导出/导入报错信息中,没有任何信息


解决思路:多尝试几次,或者降低并发量。

六、小结

使用过程感觉 SDR 比较类似 Oracle 的 OGG 工具。工作流程可简化为:指定 scn 导入此 scn 前所有数据进行初始化,初始化完成后根据此 scn 开始自动增量同步,直至手动结束同步。整个迁移过程只需要前期配置好同步进程,后期人工介入的时间就非常少(定期检查同步进程状态和日志状态还是必须的),而且因为数据一直在准实时同步,因此生产系统上的迁移时间就可以压缩的非常短,可以预留更多的时间做数据校验和其他操作。


作者介绍


莫熙钟,新炬网络数据库运维专家。精通 Oracle、MySQL、PostgreSQL 等数据库运维技术,拥有 Oracle OCP、MySQL OCP、GaussDB HCIP 等认证,拥有丰富的数据库系统架构转型、分布式改造、数据迁移经验,擅长开源数据库转型技术支持,参与多个行业核心系统的 Oracle 到 MySQL 转型项目。2019 年开始学习和研究华为 GaussDB 数据库运维技术,目前正在积极参与国产数据库转型改造项目和国产数据库通用型自动化运维工具的研发等工作。


原文链接


https://mp.weixin.qq.com/s/DAa6xnNvlCR46CG_NI4bVg


2020-02-21 14:002230

评论

发布
暂无评论
发现更多内容

极客时间 - 架构师训练营 - week1 - 课堂笔记

毛聪

极客大学架构师训练营

深圳各大知名办公园区引进 GoWork 智能楼宇管理系统,开启商业地产行业的春天

Geek_116789

架构师训练营第一周学习总结

烟雨濛濛

推荐几款基于 Markdown 语法在线制作简历的平台

JackTian

GitHub 网站 markdown 简历 工具软件

架构师训练营第一周总结

Linuxer

极客大学架构师训练营

如何使用UML做需求分析与系统架构

JefferLiu

UML 架构文档

食堂就餐卡系统设计

TiK

分布式账本简介

程序那些事

区块链 分布式系统 区块链技术 hyperledger fabric

数据结构与算法之数组链表

shirley

数组 链表

作业一:食堂就餐卡系统设计

LN

第一周练习1 食堂就餐卡系统设计

王鑫龙

极客大学架构师训练营

Hyperledger Fabric基础知识

程序那些事

区块链 以太坊 超级账本 hyperledger fabric

【架构师训练营】第 1 周作业1—食堂就餐卡系统设计

花生无翼

极客大学架构师训练营

怎样才能像月「睡后收入」 20 万的独立开发者一样挣钱?

非著名程序员

程序员 独立开发者 程序人生 提升认知

IT自由职业者是怎么样的感受和体验

奈学教育

IT

开启“观察者模式”,跳出灵魂看自己

小天同学

日常思考 个人感悟

【架构师训练营】第1周作业2—学习总结

花生无翼

Fabric的6大特性

程序那些事

区块链 blockchain 区块链技术 hyperledger fabric

架构师训练营第一周命题作业

兔狲

就餐卡系统设计

烟雨濛濛

极客大学架构师训练营

架构师训练营 - 第一周 - 学习总结

韩挺

架构师训练营 - 第一周 - 食堂就餐卡系统设计

韩挺

作业二:根据当周学习情况,完成一篇学习总结

LN

IT自由职业者是怎么样的感受和体验

古月木易

IT职场

S型曲线 - 第二曲线

石云升

创新 增长 S型理论 第二曲线 破坏式创新

PostgreSQL权限控制

唯爱

读笔 | 听说你也想辞职去摆摊?何不先收下这份秘籍

张鸱鸺

读书笔记 摆地摊 社会话题

食堂就餐卡系统架构设计文档

竹森先生

极客大学 架构设计 极客大学架构师训练营

食堂就餐卡系统设计

戴维斯

标题

lai

架构师训练营第一周总结

极客大学架构师训练营

实操:从Oracle到GaussDB的数据迁移_数据库_dbaplus社群_InfoQ精选文章