NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

实操:从 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:002244

评论

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

和鲸科技CEO范向伟受邀出席港航数据要素流通与生态合作研讨会,谈数据资产入表的战略机会

ModelWhale

数据 数据资产 数据要素 港航

git常用命令之Fetch

百度搜索:蓝易云

git 云计算 Linux 运维 云服务器

WorkPlus搭建高效即时通讯,打造高效协作新标杆

WorkPlus

文心一言 VS 讯飞星火 VS chatgpt (158)-- 算法导论12.3 5题

福大大架构师每日一题

福大大架构师每日一题

带PWM 调光的线性降压 LED 恒流驱动器

智趣匠

OpenSergo & Dubbo 微服务治理最佳实践

阿里巴巴云原生

阿里云 微服务 云原生

亚洲唯一,阿里云入选 Gartner® 容器管理领导者象限!

阿里巴巴云原生

阿里云 云原生

活动 | Mint Blockchain 将于 2024 年 1 月 10 号启动 MintPass 限时铸造活动

NFT Research

blockchain NFT Pass

WorkPlus即时通讯app-私有化部署的最佳解决方案

WorkPlus

WorkPlus高效助力企业沟通的专业级即时通讯软件

WorkPlus

Centos7系统K8S集群安装教程。

百度搜索:蓝易云

Linux centos Kubernetes 运维 云服务器

WorkPlus:保护组织数据安全与提升企业效率的局域网即时通讯软件

WorkPlus

Raw图像处理推荐 Capture One Pro 23中文最新版

胖墩儿不胖y

Mac软件 raw图像 raw图像处理工具

让你的Mac变得更加智能——Bookends for Mac

影影绰绰一往直前

打破多APP困境,WorkPlus统一入口让企业协同更高效

WorkPlus

短信中的短链设计

智慧源点

关于Stable Diffusion模型优化分享

AI Stable Diffustion

从0到1:志愿者小程序开发心得

CC同学

大数据之云平台的使用与总结 主赛道:技术人的 2023 总结

Echo_Wish

大数据 云平台 年度总结 2023 开天平台

简约好用的Markdown文本编辑器:Typora中文激活版

mac大玩家j

文本编辑器 Mac软件 markdown编辑

Adobe Dimension 2023(3D设计工具)v3.4.11.4298 (x64) 直装版

影影绰绰一往直前

Go内存优化与垃圾收集

俞凡

golang

转行程序员4年半,被裁了

程序员晚枫

程序员 裁员

全面指南:技术写作与编辑工具 Markdown、Git 研究工具

小万哥

技术 程序人生 写作 工具 软件开发

阿里云主导《Serverless 计算安全指南》国际标准正式立项!

阿里巴巴云原生

阿里云 Serverless 云原生

极狐GitLab DevSecOps 之容器镜像安全扫描

极狐GitLab

容器 DevOps 镜像 DevSecOps 容器镜像

ON1 Photo RAW MAX 2024:Mac上的高效照片处理解决方案

影影绰绰一往直前

走出自己的道路,活出自己灿烂的一生

少油少糖八分饱

人生选择 巴菲特 人生道路 不被定义 普通人

总结:我在技术写作中踩过的 6 个坑

Java 工程师蔡姬

技术人 21 天技术人写作行动营

WorkPlus即时通讯软件,带来更轻松、高效的沟通体验

WorkPlus

Adobe Photoshop 2024 (PS2024) v25.3.1.241 直装版

影影绰绰一往直前

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