使用DRS将Oracle数据库迁移至GaussDB

109 阅读15分钟

使用DRS将Oracle数据库迁移至GaussDB

操作场景**

本章主要介绍如何使用DRS的实时同步功能将本地Oracle数据库实时迁移至华为云GaussDB。通过全量+增量同步,实现源数据库Oracle与目标数据库GaussDB的数据长期同步。全量同步可以实现数据迁移;增量同步可以实现实时同步源端和目标端两个库之间的数据。

步骤一:创建VPC和安全组

步骤二:创建GaussDB实例

步骤三:迁移前构造数据

步骤四:迁移数据库

步骤五:迁移后进行数据校验

解决问题**
  • 企业业务高速发展,传统数据库扩容性差,迫切需要分布式化改造。
  • 传统数据库需要自购并安装服务器、系统、数据库等软件,运维成本高、难度大。
  • 传统数据库性能瓶颈问题,复杂查询性能较差。
  • 如何不中断业务并且平滑地实现数据迁移。
前提条件**
  • 拥有华为云实名认证账号。
  • 账户余额大于等于0元。
  • 如果测试使用,需要自行在本地搭建Oracle数据库。
  • 已知待迁移Oracle数据库的IP地址,端口,账户和密码。
业务架构图**

迁移原理**

本次迁移使用全量+增量同步功能,原理如下:

  1. 全量同步阶段,先进行结构迁移,例如表、主键、唯一键的迁移。
  2. 结构迁移完成后,启动增量数据抽取,以确保全量数据同步期间的增量数据完整的抽取到DRS实例。
  3. 启动全量迁移任务。
  4. 全量迁移完成后自动进入增量同步,从全量迁移开始抽取的位点开始回放。
  5. 当增量回放全部完成后,启动比对任务进行一致性检查,支持实时比对。
  6. 实时比对数据一致时,可以启动业务割接。

图1 迁移原理图

资源规划**

本章中的资源规划仅作为演示,实际业务场景资源以用户实际需求为准。

类别子类规划备注
VPCVPC名称vpc-src-172自定义,易理解可识别。
所属Region测试Region现网实际选择时建议选择和自己业务区最近的Region,减少网络时延。
可用区可用区3-
子网网段172.16.0.0/16子网选择时建议预留足够的网络资源。
子网名称subnet-src-172自定义,易理解可识别。
本地Oracle数据库名称orcl自定义,易理解可识别。
规格16vCPUs32GB-
数据库版本11.2.0.1-
数据库用户test_info可以自定义用户,但是迁移时最小权限为:CREATE SESSION,SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY, EXECUTE_CATALOG_ROLE
GaussDB实例名Auto-drs-gaussdbv5-tar-1自定义,易理解可识别。
数据库版本GaussDB 8.103企业版-
实例类型分布式版,3CN,3DN,3副本本示例中为分布式实例。
部署形态独立部署-
事务一致性强一致性-
分片数量3-
协调节点数量3-
存储类型超高IO-
可用区可用区2本示例中选择了单可用区,实际建议选择多可用区,以提高实例的高可用性。
性能规格独享型(1:8) 8 vCPUs64GB本示例中为测试实例,选择较小的测试规格,实际选择规格以业务诉求为准。
存储空间480G本示例中为测试实例,选择较小的存储空间,实际选择存储空间大小以业务诉求为准。
加密磁盘不加密本示例中选择磁盘不加密,选择加密后会提高数据安全性,但对数据库读写性能有少量影响,实际请按照业务使用策略进行选择。
DAS登录数据库数据库引擎GaussDB-
数据库来源GaussDB勾选本示例中创建的GaussDB实例
数据库名称postgres-
登录用户名root-
密码-本示例中创建的GaussDB实例root用户密码
DRS迁移任务迁移任务名DRS-test-info自定义。
目标库名称test_database_info自定义,易理解可识别,但是需要确保兼容模式为Oracle模式。
源数据库引擎Oracle-
目标数据库引擎GaussDB-
网络类型公网网络本示例中采用公网网络。

步骤一:创建VPC和安全组**

创建VPC和安全组,为创建GaussDB实例准备网络资源和安全组。

  1. 登录华为云控制台

  2. 单击管理控制台左上角的,选择区域。

  3. 单击左侧的服务列表图标,选择“网络 > 虚拟私有云 VPC”。进入虚拟私有云信息页面。

  4. 单击“创建虚拟私有云”购买VPC。

  5. 单击“立即创建”。

  6. 返回VPC列表,查看创建VPC是否创建完成。

    当VPC列表的VPC状态为“可用”时,表示VPC创建完成。

步骤二:创建GaussDB实例**

创建GaussDB实例,作为迁移任务目标库。

  1. 登录华为云控制台

  2. 单击管理控制台左上角的,选择区域。

  3. 单击左侧的服务列表图标,选择“数据库 > 云数据库 GaussDB”。

  4. 在左侧导航栏选择GaussDB > 实例管理。

  5. 单击“购买数据库实例”。

  6. 参考图2,配置实例名称,选择计费模式、产品类型、数据库引擎版本、实例类型、事务一致性、分片数量、协调节点数量和可用区。

    图2 基本信息

  7. 选择实例规格、存储空间大小。

    图3 实例规格

  8. 选择实例所属的VPC(创建VPC)和安全组(创建安全组),配置数据库端口。

    图4 选择VPC和安全组

  9. 配置实例密码等信息。

    图5 配置实例密码等信息

  10. 单击“立即购买”,确认信息并提交。

  11. 返回实例列表。

    当实例运行状态为“正常”时,表示实例创建完成。

步骤三:迁移前构造数据**

迁移前需要在源库构造一些数据类型,供迁移完成后验证数据。本章中端到端的数据为测试数据,仅供参考。

DRS支持的数据类型如下所示:

源库数据类型目标库数据类型源库数据类型做主键,同步能力源库数据类型做非主键,同步能力源库数据类型做主键,对比能力源库数据类型做非主键,对比能力备注
CHARcharacter支持支持支持,忽略字符前后的空格支持,忽略字符前后的空格-
VARCHARcharacter varying支持支持支持支持源目标库数据表示范围不同,存在精度损失。
VARCHAR2character varying支持支持支持支持-
NCHARcharacter支持支持支持,忽略字符前后的空格支持,忽略字符前后的空格-
NVARCHAR2nvarchar2支持支持支持支持-
NUMBERnumeric支持支持支持支持-
NUMBER (6,3)numeric(6,3)支持支持支持支持-
NUMBER (6,0)Integer支持支持支持支持-
NUMBER (3)smallint支持支持支持支持-
NUMBER (6,-2)integer支持支持支持支持-
BINARY_FLOATreal不支持(目标库不支持做主键建表)支持不支持支持源目标库数据表示范围不同,存在精度损失。
BINARY_DOUBLEdouble precision不支持(目标库不支持做主键建表)支持不支持支持-
FLOATreal不支持(目标库不支持做主键建表)支持不支持支持源目标库数据表示范围不同,存在精度损失。
INTnumeric支持支持支持支持-
INTEGERnumeric支持支持支持支持-
DATEdate支持支持不支持支持DRS在目标库建表时类型为date,此时源目标库数据表示范围不同,存在精度损失,不支持对比。
TIMESTAMPtimestamp(6) without time zone支持支持不支持校验到小数点后6位源库使用限制:支持的最大精度是6。
TIMESTAMP_TZtimestamp(6) with time zone不支持(源库不支持做主键建表)支持不支持过滤该列-
TIMESTAMP_LTZtimestamp(6) with time zone不支持(目标库不支持做主键建表)支持不支持过滤该列-
INTERVAL_YMinterval year to month支持支持不支持不支持增量同步不支持该类型。
INTERVAL_DSinterval day to second支持支持不支持不支持增量同步不支持该类型。源库使用限制:支持的最大精度是6。
BLOBbytea不支持(源库不支持做主键建表)支持不支持过滤该列-
CLOBtext不支持(源库不支持做主键建表)支持不支持过滤该列-
NCLOBtext不支持(源库不支持做主键建表)支持不支持过滤该列-
LONGtext不支持(源库不支持做主键建表)支持不支持过滤该列-
LONG_RAWbytea不支持(源库不支持做主键建表)支持不支持过滤该列-
RAWbytea不支持(目标库不支持做主键建表)支持不支持支持-
RowIDcharacter varying(18)支持支持支持支持-
BFILE-不支持不支持不支持不支持源库使用限制:不支持bfile类型。
XMLTYPE-不支持不支持不支持不支持源库使用限制:不支持xmltype类型。
UROWID-不支持不支持不支持不支持全量增量都不支持同步。
sdo_geometry-不支持不支持不支持不支持源库使用限制:不支持sdo_geometry类型。
NUMBER(*,0)numeric支持支持支持支持-

执行如下步骤在源库构造数据:

  1. 根据本地的Oracle数据库的IP地址,通过数据库连接工具连接数据库。

  2. 根据DRS支持的数据类型,在源库执行语句构造数据。

    1. 创建一个测试用的用户。

      create user test_info identified by xxx ;

      test_info为本次迁移创建的用户,xxx为用户的密码,请根据实际情况替换。

    2. 给用户赋权。

      grant dba to test_info ;

    3. 在当前用户下创建一个数据表。

      CREATE TABLE** test_info . DATATYPELIST (

      ID INT,

      COL_01_CHAR______E CHAR(100),

      COL_02_NCHAR_____E NCHAR(100),

      COL_03_VARCHAR___E VARCHAR(1000),

      COL_04_VARCHAR2__E VARCHAR2(1000),

      COL_05_NVARCHAR2_E NVARCHAR2(1000),

      COL_06_NUMBER____E NUMBER(38,0),

      COL_07_FLOAT_____E FLOAT(126),

      COL_08_BFLOAT____E BINARY_FLOAT,

      COL_09_BDOUBLE___E BINARY_DOUBLE,

      COL_10_DATE______E DATE DEFAULT SYSTIMESTAMP,

      COL_11_TS________E TIMESTAMP(6),

      COL_12_TSTZ______E TIMESTAMP(6) WITH TIME ZONE,

      COL_13_TSLTZ_____E TIMESTAMP(6) WITH LOCAL TIME ZONE,

      COL_14_CLOB______E CLOB DEFAULT EMPTY_CLOB(),

      COL_15_BLOB______E BLOB DEFAULT EMPTY_BLOB(),

      COL_16_NCLOB_____E NCLOB DEFAULT EMPTY_CLOB(),

      COL_17_RAW_______E RAW(1000),

      COL_19_LONGRAW___E LONG RAW,

      COL_24_ROWID_____E ROWID,

      PRIMARY KEY(ID)

      );

    4. 插入两行数据。

      insert into test_info.DATATYPELIST values(4,'huawei','xian','shanxi','zhongguo','shijie', 666,12.321,1.123,2.123,sysdate,sysdate,sysdate,sysdate,'hw','cb','df','FF','FF','AAAYEVAAJAAAACrAAA');

      insert into test_info.DATATYPELIST values(2,'Migrate-test','test1','test2','test3','test4', 666,12.321,1.123,2.123,sysdate,sysdate,sysdate,sysdate,'hw','cb','df','FF','FF','AAAYEVAAJAAAACrAAA');

    5. 使语句生效。

      commit;

  3. 在目标端创建库。

    1. 登录华为云控制台
    2. 单击管理控制台左上角的,选择区域。
    3. 单击左侧的服务列表图标,选择“数据库 > 数据管理服务 DAS”。
    4. 在数据管理服务DAS左侧导航栏,单击“开发工具”,进入开发工具数据库登录列表页面。
    5. 单击“新增数据库实例登录”,打开新增数据库实例登录窗口。
    6. 选择“数据库引擎”、“数据库来源”、目标实例,填写登录用户名、密码以及描述(非必填项)信息,开启SQL执行记录功能。
    1. 单击“测试连接”测试连接是否成功。

      如测试连接成功,将提示“连接成功”,您可继续新增操作。如测试连接失败,将提示连接失败原因,您需根据提示信息进行修改,以便新增数据库登录成功。

    2. 设置完登录信息,单击“立即新增”。

    3. 新增完成后,单击新增登录的“登录”,登录当前数据库。

    4. 选择“SQL操作”> “SQL查询”进入SQL查询页面。

    5. 执行如下语句创建兼容Oracle的数据库。

      此例中为:test_database_info,请根据实际情况选择。

      CREATE DATABASE test_database_info DBCOMPATIBILITY 'ORA'; 
      

步骤四:迁移数据库**

创建DRS实例,将本地Oracle上的test_info数据库迁移到GaussDB实例中test_database_info数据库中。

迁移前检查**

在创建任务前,需要针对迁移条件进行手工自检,以确保您的迁移任务更加顺畅。

在迁移前,您需要参考入云使用须知获取迁移相关说明。

创建迁移任务**
  1. 登录华为云控制台

  2. 单击管理控制台左上角的,选择区域。

    选择目标实例所在的区域。

  3. 单击左侧的服务列表图标,选择“数据库 > 数据复制服务 DRS”。

  4. 左侧导航栏选择“实时同步管理”,单击“创建同步任务”。

  5. 配置同步实例信息。

    1. 选择区域,计费模式,项目,填写任务名称。

    2. 配置同步实例信息,选择“数据流动方向”、“源数据库引擎”、“目标数据库引擎”、“网络类型”、“DRS任务类型”、“目标数据库实例”、“同步实例所在子网”、“同步模式”、“指定公网IP”(网络类型选择公网网络时需要配置该参数)、“规格类型”、“可用区”和“企业项目”,选填“标签”。

    3. 单击“开始创建”。

  6. 配置源库及目标库信息。

    1. 选择“是否配置自建DNS服务”、填写源库的IP、端口、用户、密码等信息。

      填写完成后,需要单击“测试连接”,测试连接信息是否正确。

    2. 填写目标库的账户和密码。

      填写完成后,需要单击“测试连接”,测试连接信息是否正确。

    3. 单击“下一步”,仔细阅读提示内容后,单击“同意,并继续”。

  7. 设置同步。

    1. 在源库选择需要迁移的数据库和表。本次迁移中选择“test_info” 中的 “DATATYPELIST” 表。

    2. 选择完成后,可以设置迁移后是否重新命名库名和表名。

    3. 本次迁移将表名重新命名为“DATATYPELIST _After”。

      注意重新命名时不要使用特殊符号,否则会导致迁移后执行SQL语句报错。

    4. 确认重命名设置内容,单击“下一步”。

  8. 高级设置。

    本页面内容仅做确认,无法修改,确认完成后单击“下一步”。

  9. 数据加工。

    在该页面可以对迁移的表进行加工。包括选择迁移的列,重新命名迁移后的列名,本次迁移将“COL_01_CHAR______E”重新命名为“new-line”。

    1. 选择需要加工的表。

    2. 编辑“COL_01_CHAR______E”列。

    3. 将“COL_01_CHAR______E”重新命名为“new-line”,单击“确定”。

    4. 单击“下一步”。

  10. 预检查。

    1. 所有配置完成后,进行预检查,确保迁移成功。

    2. 对于未通过的项目,根据检查结果中的提示信息修复,修复完成后,单击“重新校验”,直到预检查通过率为100%。

    3. 预检查全部通过后,单击“下一步”。

  11. 任务确定。

    1. 检查所有配置项是否正确。

    2. 单击“启动任务”,仔细阅读提示后,勾选“我已阅读启动前须知”。

    3. 单击“启动任务”,完成任务创建。

  12. 任务创建成功。

    任务创建成功后,返回任务列表查看创建的任务状态。

步骤五:迁移后进行数据校验**

当任务状态变为“增量同步”,说明全量同步已经完成,全量同步完成后,登录GaussDB查看数据迁移结果。

  1. 等待迁移任务状态变为“增量同步”。

  2. 单击任务名称,进入任务详情页。

  3. 在“同步进度”页签查看全量同步结果。

    如图所示,本次迁移将TEST_INFO库中DATATYPELIST表迁移至shard_0,共迁移了两条数据。

  4. 验证数据一致性。

    1. 在“同步对比 > 对象级对比”页面,查看库和表的迁移结果。

    2. 在“同步对比 > 数据级对比”页面,创建对比任务,查看表中行的迁移结果。

  5. 通过DAS连接GaussDB的目标库“test_database_info ”。

    DAS连接实例的方法请参考新增数据库登录

  6. 执行如下语句,查询全量同步结果。

    SELECT * FROM test_info.datatypelist_after;
    

    Oracle数据库中的模式迁移完成后,会在GaussDB库中作为Schema,所以查询语句中添加Schema精确查询。

    如图所示,查询表中的各个数据类型都迁移成功,并且数据正确无误。

  7. 验证增量同步。

    由于本次迁移为“全量+增量”同步模式,全量同步完成后,如果在创建任务后有数据写入,这些写入的数据会一直同步至目标库中,直到任务结束。下面我们模拟写入另外的数据。

    1. 根据本地的Oracle数据库的IP和地址,通过数据库连接工具连接数据库。

    2. 执行如下语句,在源库插入一条数据。

      我们插入一条“id”为1的数据。

      insert into test_info.DATATYPELIST values(1,'Migrate-test','test1','test2','test3','test4', 666,12.321,1.123,2.123,sysdate,sysdate,sysdate,sysdate,'hw','cb','df','FF','FF','AAAYEVAAJAAAACrAAA');
      commit;
      
    3. 在目标库执行如下语句查询结果。

      SELECT * FROM test_info.datatypelist_after;
      

      如图所示,在源库新增的数据,可以实时同步至目标库。

  8. 结束迁移任务。

    根据业务情况,待业务完全迁移至目标库,可以结束当前任务。

    1. 单击“操作”列的“结束”。

    2. 仔细阅读提示后,单击“是”,结束任务。

  9. 迁移完成后,进行性能测试。

    测试云数据库GaussDB性能的方法请参见性能白皮书

父主题: 数据库迁移