写点什么

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

  • 2020 年 2 月 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 年 2 月 21 日 14:001768

评论

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

一年增加 1.2w 星,Dapr 能否引领云原生中间件的未来?

阿里巴巴云原生

容器 微服务 云原生 k8s 中间件

oktoken跟单社区系统开发|oktoken跟单社区APP软件开发

系统开发

怎样从零开始设计一个数据库

学Java的猪猪侠

操作系统--虚拟存储器概述

学Java的猪猪侠

Apache Iceberg学习日志

InfoQ_Springup

数据湖

中国唯一入选 Forrester 领导者象限,阿里云 Serverless 全球领先

阿里巴巴云原生

阿里云 Serverless 容器 开发者 云原生

2021面试跳槽宝典:BATJ大厂核心面试解析600题

比伯

Java 架构 面试 程序人生 计算机

MapReduce的运行机制详解

五分钟学大数据

hadoop 3月日更

源码解读:KubeVela 是如何将 appfile 转换为 K8s 特定资源对象的

阿里巴巴云原生

容器 云原生 k8s API 应用服务中间件

户口?大厂?高薪?生活?聊聊应届程序员的职业选择

流沙

职业发展

oktoken对冲合约软件APP开发|oktoken对冲合约系统开发

系统开发

技术中台之DevOps动态表单体系构建

EAWorld

【操作系统】存储器管理

学Java的猪猪侠

「产品经理训练营」第八章作业

Sòrγy_じò ぴé

硬件测试的思考和改进:有道词典笔的高效测试探索

有道技术团队

大前端

2021版金三银四Java面试突击手册开源(涵盖p5-p8技术栈),“吊打”面试官的“葵花宝典”

Java 编程 程序员 架构 面试

缓存为什么会被污染?

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

浅论指针(二)

Integer

c 指针

又是一些小细节!3面成功入职字节跳动:算法+数据库+中间件+JVM

Java架构之路

Java 程序员 架构 面试 编程语言

爆肝一周总结了一份Java学习/面试自测指南!200+道Java最常见面试题。

Java架构之路

Java 程序员 架构 面试 编程语言

浅论指针(一)

Integer

c c++ 指针

K8s 原生 Serverless 实践:ASK 与 Knative

阿里巴巴云原生

Serverless 容器 云原生 k8s 存储

设计模式--享元模式

学Java的猪猪侠

后端服务器网络编程之 IO 模型

Linux服务器开发

后端 网络编程 web服务器 Linux服务器开发 网络io

Flink程序优化及反压机制

大数据技术指南

flink 3月日更

会声会影最新版:会声会影2021中文版它来啦!

奈奈的杂社

视频剪辑 视频后期 自媒体 视频处理 会声会影

引入单点登录,需要考虑哪些问题?

龙归科技

SSO 单点登录

关系数据理论是个什么牛马

学Java的猪猪侠

字节跳动5面喜提offer!分享给朋友们面试感受

Java架构之路

Java 程序员 架构 面试 编程语言

通俗地理解面向服务的架构(SOA)以及微服务之间的关系

守护石

微服务 软件架构 ESB SOA BPM

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