当前位置: 首页 > 科技观察

实操:数据从Oracle迁移到GaussDB

时间:2023-03-20 22:02:17 科技观察

一、背景最近某省运营商O域核心业务系统的数据库打算从Oracle迁移到GaussDB,数据库服务器也是从某SUN迁移过来的小型机到华为泰山ARM服务器。有幸参与其中,主要负责Oracle到GaussDB的数据迁移。数据迁移初期,使用Datasync工具进行衍生测试。但由于衍生效率无法满足生产系统的宕机需求,而此时华为又推出了新的迁移工具——SDR,于是利用SDR进行了新一轮的迁移测试。一、环境信息1)硬件配置信息目标数据库泰山服务器硬件配置信息如下:源数据库Sun小型机硬件配置信息如下:2)软件配置信息泰山服务器操作系统和数据库软件版本如下:源数据库Sun小型机操作系统和数据库软件版本如下:由于本文的重点不在环境搭建上,所以操作系统和GaussDB的安装过程就不详细介绍了。二、SDR产品描述GaussDBSDR(SwiftDataReplicator)是一款基于日志的实时CDC软件,支持对各种关系型数据库事务数据的实时抓取、转换和加载。主要用于数据迁移、数据复制、远程存储等。灾难、应急备份、双业务中心、实时数仓/数据湖、查询卸载等场景。主要特点是:实时、高效的数据同步、丰富的异构同步能力、无插件、非侵入、安全无干扰、全流程可视化运维管理。2、SDR环境准备源端支持Oracle9i及以上版本(测试中使用的SDR版本仅支持11R2)目标端支持GaussDB100V300R100,支持可选的schema和表进行全量数据同步,支持可配置的conditional导出源库数据,将符合条件的数据导入目标库支持多表并发同步,可配置并发数支持单表数据并发导出,可配置并发数,不支持单表并发导入支持表结构自动同步,自动进行数据类型映射,类型映射见下表1)硬件要求SDR目前只支持x8664位操作系统,对硬件资源的要求主要取决于源数据库的数据变化量。表2-1资源需求2)软件需求注:本次迁移测试中,SDR部署在独立的x86服务器上,通过数据库服务端口访问两侧数据库。由于大部分的迁移操作都是在平台网页上进行的,所以也建议准备一个可以直接访问这个x86服务的7007/7008/7009端口的windows服务器。一、SDR工具准备1)创建安装用户和目录(在x86服务器上操作)为SDR软件创建新用户,创建安装目录/home/sdr:su-rootgroupaddsdruseradd-gsdr-d/home/sdr-s/bin/shsdrchown-Rsdr:sdr/home/sdr/2)切换到安装用户,上传安装包su-sdrls-l/home/sdr/depend.tgzGaussDB_SDR_8.0.RC1_RHEL_x86_64.tar.gzlicence.dat.tar.gz3)解压所有压缩包tar-xfdepend.tgztar-xfGaussDB_SDR_8.0.RC1_RHEL_x86_64.tar.gztar-xflicence.dat.tar.gz2,SDR工具安装1)设置SDR_HOME环境变量su-sdrexportDIP_HOME=/opt/sdr2)执行安装cd/home/sdr./GaussDB_SDR_8.0.RC1_INSTALLCreatingdirectorySDR.packVerifyingarchiveintegrity...Allgood.Uncompressingswiftdatareplicator100%SwiftDataReplicatorinstallation!?2019HuaweiTechnologiesCo.,Ltd.SwiftDataReplicatorsoftwarewillinstallintodirectory[/home/sdr]PleaseinputSwiftDataReplicatorwebserverIPaddress:[127.0.0.1]PleaseinputSwiftDataReplicatorwebserverport:[7008]PleaseinputSwiftDataReplicatormanagerserverIPaddress:[127.0.0.1]PleaseinputSwiftDataReplicatorManagerServerPort:[7009]PleaseinputSwiftDataReplicatorQueueTransferServerPort:[7007]PleaseinputSwiftDataReplicatoradminserverport:[7006]PleaseinputSwiftDataReplicatorkafkacomponentport:[7005]PleaseinputSwiftDataReplicatordatabaseIPaddress:[127.0.0.1]PleaseinputSwiftDataReplicatordatabaseport:[1888]PleasesetdefaultSwiftDataReplicatorShareMemorySize:[1]-1GB[2]-4GB[3]-input[5]-input[5]GB)pleasechoose1,2,3,4:[1]4Inputvalueandchoicelistbelow,pleaseconfirm:httpIPaddress:127.0.0.1httpport:7008ManagerIPaddress:127.0.0.1ManagerPort:7009TransferPort:7007AdminServerPort:7006KafkacomponentPort:7005SDRDatabaseIP:127.0.0.1SDRDatabasePort:1888Sharememorysize:16GKafkaServerPort:7005Pressanykeytobegininstall.(Ctrl-ctointerrupt)Uncompressingbin.tgz...Uncompressingdbpkg.tgz...Uncompressingetc.tgz...Uncompressinglib.tgz...Uncompressingweb.tgz...等待几分钟,正在安装数据库...正在检查参数...正在检查用户...正在检查旧安装...正在检查内核参数...正在检查目录...正在检查运行文件的完整性...解压缩运行文件...警告:Dia找不到lectScripts!ButstillproceedinstallationSettinguserenv...CheckingdatadirandconfigfileInitiatedbinstance...Creatingdatabase...Changingfilepermissionduetosecurityaudit...Installsuccessfully,formoredetailinformationsee/home/sdr/zengineinstall.log.Refreshingconfig...Creatingdbuser...Initializeddata...alldonedepend进入依赖目录cd/home/sdr/depend/shenable.shEnablesuccess4)加载许可文件cd/home/sdrcplience.dateetc/lsetc/dip_config.xmllicence.datodbcinst.iniversionxlog.ini5)启动SDR组件,在启动组件前加载环境变量su-sdrcd/home/sdr/../env(1)启动后台数据库cd/home/sdr/db/app/binpythonzctl.py-tstart(2)启动其他组件cd/home/sdr/start_all(3)启动Webservicecd/home/sdrstart_web至此,安装SDR的所有准备工作就完成了。3、SDR配置SDR管理界面需要通过浏览器访问,浏览器可以选择chrome或者IE9.0以上版本。URL为x86服务器的IP,端口为安装时指定的端口,必须为HTTPS,如https://IP:port。初始账号密码为admin/admin。图-1-登录SDR控制台登录后需要先新建一个项目。图-2-创建项目输入项目名称并保存。点击进入项目后,会进入配置管理主界面。点击左上角的“新建”按钮,创建任务组。图-3-新建任务组输入组名和该组下进程运行日志的保留时间,点击“保存组”。本次迁移测试是从Oracle到GaussDB,属于异构数据库迁移。可以直接使用模板库中的异构链接进行配置,点击“异构链接”即可,如下图:图-4-异构链接配置链接生成后,双击源库组件链接,在弹出的对话框中配置源库。(第一次配置后,可以选择保存为模板,方便后续使用)。图-5-源数据库配置注意:当源数据库类型为Oracle时,需要在导出的对象中添加额外的日志。添加附加日志的SQL可以在“必备环境配置”中一键生成,并在源数据库中执行。配置好源库信息后,接下来就是配置抓包过程了。抓取进程主要用于从源库中提取数据。您可以配置需要迁移的架构和对象类型,以及采样时间间隔、内存分配等参数。配置如下:图6-CaptureConfiguration图7-Advancedoptions配置capture进程注意:当源数据库为OracleRAC时,需要输入所有节点的信息,选择“ENABLE”进行配置抓包过程,则需要配置队列信息。整个链路需要配置两个队列,一个是导出队列,一个是导入队列。您可以先按顺序配置导出队列。具体配置如下:图-8-配置导出队列队列配置完成后,需要配置ETL转换链路。配置源库信息后,ETL的大部分内容会自动填充,直接使用默认配置。具体配置如下:图-9-先配置ETL再配置导入队列,这里不再赘述。配置如下:图-10-按照链接顺序配置导入队列,然后配置转载流程,但是配置前会提示先配置目标库信息,只能跳转最后目标库信息先配置,完成后返回配置转载进程信息。所以下面是配置目标GaussDB库的信息(同理,第一次配置时可以选择另存为GaussDB库的模板,方便后续使用)图-11-配置目标库信息接下来终于可以愉快的配置转载进程信息了。转载过程中有很多可配置的内容,主要分为:包含条件、排除条件和高级选项。include条件可以配置导入的schema和object类型,是否替换目标库中的schema_name。(本次测试已经转换了schema_name,测试结果很顺利。)图-12-先配置加载包含条件再配置排除条件。本次测试不增加排除条件,有需要的同学可以增加测试。图-13-配置加载排除条件以下为高级选项的配置,下图为所有默认设置,可根据需要进行调整。图-14-确认并保存配置加载的高级选项后,迁移所需的各个组件的配置就完成了。4.SDR全量迁移SDR工具自带数据初始化功能。点击工具栏上的“工具>股票数据同步”,弹出配置界面。可以配置导出任务的并发度和单表的并发度。注意控制并发。在极端情况下,导出进程的总数可能等于任务的并发数*表的并发数。另外,必须勾选“Exportdataasstring”选项,否则虽然速度会大大加快,但导出和导入的失败率也会大大增加。图-15-配置全量数据同步-导出条件配置(注意:启用初始化前,需要在目标环境中手动创建用户/权限/表空间等,创建命令与Oracle基本相同。)导出条件配置好并保存,继续下一步,配置导入条件配置。由于目标库没有业务压力,可以选择更大的并发数,也可以根据需要选择是否“重建目标表”、“清除目标表”和“重建索引”。图-16-配置全量数据同步-导入条件配置配置完成并保存后,点击“开始全量同步”开始股票数据同步。图-17-查看全量同步的实时信息,等待导出导入完成股票数据的迁移。迁移过程中的错误信息可以直接在“导出错误信息”和“导入错误信息”中查看。如果错误信息缺失或不足,可以进入x86服务器中安装目录的log目录查看更详细的信息。5.SDR增量迁移(正式迁移使用的步骤)是重点!!前面的全量迁移和后面的增量迁移是两个不同的东西。如果按照前面的步骤进行全量数据迁移,则需要进行增量迁移。删除目标数据库中的所有数据,然后重新开始!使用备份前,需要从源数据库获取最新的scn号。从源头的Oracle库中获取最新的SCN号:selectcurrent_scnfromv$database;CURRENT_SCN----------------164936540407831。启动捕获过程需要根据《SDR全量迁移》结构链一文提前配置差异,这里不再赘述。配置完成后,单独启动抓包流程。在工作区中选择捕获进程后,单击“开始”启动它。图-18-启动抓包流程2.启动库存备份本次库存备份需要输入最新获得的scn号,以便将这个scn号的所有数据同步到目标数据库。图-19-配置库存数据同步3.开始备份并等待库存备份完成,然后分别开始转换和加载过程。通过指定SCN开始转换过程,输入的scn为一开始获取的最新SCN号。图-20-指定scn启动转换流程ETL启动完成后,如下图:图-21-启动转换流程后,通过指定SCN启动加载流程。输入的scn是一开始得到的最新的SCN号。图-22-指定scn启动加载过程转载过程启动后,状态如图:图-23-启动加载过程,启动完成后,选择“列表”方式在工作区查看各个进程的状态,如果在运行,则为正常。图-24-列表模式查看状态至此,备份启动完成。启动备份后,会将源库中操作表的DML和DDL实时同步到目标,直到手动终止或报错。(部分DDL不支持,例如:添加数据库、添加数据文件、角色相关操作等)4、迁移过程中出现的问题1)选择自动建表时,分区信息(间隔等)分区表的分区表无法自动同步,导致导入GaussDB后分区表变回普通表解决方法:在开始衍生之前,在目标环境中手动创建所有分区表,不要选择“rebuildtable”"optionwhenimportingstockdata2)导出时,一个表同时有long和clob类型字段的字段会报错:table[dcpp.aqua_explain_1483468080]includeLOBandLONGcolumn,unsupport解决思路:开始前衍生品,在目标环境中手动创建所有错误表,并且在导入股票数据时不要选择“重建表”选项3)开始股票数据同步时,即使是相同的confguration选项,点击“开始全同步”后,经常会出现同步过程无法正常启动的问题。查询完全表信息的SQL后,不再继续执行具体表的导出SQL,而是直接终止session导出/导入报错信息。没有信息。解决办法:多试几次,或者降低并发度。6.总结使用过程感觉SDR更类似于Oracle的OGG工具。工作流程可以简化为:在导入该SCN之前指定SCN初始化所有数据,初始化完成后根据该SCN开始自动增量同步,直到手动终止同步。整个迁移过程只需要前期配置好同步过程,后期人工干预的时间很少(定期检查同步过程状态和日志状态还是很有必要的),而且由于数据已经准实时同步,生产系统上的迁移时间非常短。可以压缩的很短,可以留出更多的时间用于数据校验等操作。