使用DRS将Oracle数据库迁移至GaussDB
操作场景
本章主要介绍如何使用DRS的实时同步功能将本地Oracle数据库实时迁移至华为云GaussDB。通过全量+增量同步,实现源数据库Oracle与目标数据库GaussDB的数据长期同步。全量同步可以实现数据迁移;增量同步可以实现实时同步源端和目标端两个库之间的数据。
解决问题
- 企业业务高速发展,传统数据库扩容性差,迫切需要分布式化改造。
- 传统数据库需要自购并安装服务器、系统、数据库等软件,运维成本高、难度大。
- 传统数据库性能瓶颈问题,复杂查询性能较差。
- 如何不中断业务并且平滑地实现数据迁移。
前提条件
- 拥有华为云实名认证账号。
- 账户余额大于等于0元。
- 如果测试使用,需要自行在本地搭建Oracle数据库。
- 已知待迁移Oracle数据库的IP地址,端口,账户和密码。
业务架构图

迁移原理
本次迁移使用全量+增量同步功能,原理如下:
- 全量同步阶段,先进行结构迁移,例如表、主键、唯一键的迁移。
- 结构迁移完成后,启动增量数据抽取,以确保全量数据同步期间的增量数据完整地抽取到DRS实例。
- 启动全量迁移任务。
- 全量迁移完成后自动进入增量同步,从全量迁移开始抽取的位点开始回放。
- 当增量回放全部完成后,启动比对任务进行一致性检查,支持实时比对。
- 实时比对数据一致时,可以启动业务割接。

资源规划
本章中的资源规划仅作为演示,实际业务场景资源以用户实际需求为准。
类别 | 子类 | 规划 | 备注 |
|---|---|---|---|
VPC | VPC名称 | vpc-src-172 | 自定义,易理解可识别。 |
所属Region | 测试Region | 现网实际选择时建议选择和自己业务区最近的Region,减少网络时延。 | |
可用区 | 可用区1 | - | |
子网网段 | 172.16.0.0/16 | 子网选择时建议预留足够的网络资源。 | |
子网名称 | subnet-src-172 | 自定义,易理解可识别。 | |
本地Oracle数据库 | 名称 | orcl | 自定义,易理解可识别。 |
规格 | 16vCPUs | 32GB | - | |
数据库版本 | 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 V2.0-8.218企业版 | - | |
实例类型 | 分布式版,3CN,3DN,3副本 | 本示例中为分布式实例。 | |
部署形态 | 独立部署 | - | |
事务一致性 | 强一致性 | - | |
分片数量 | 3 | - | |
协调节点数量 | 3 | - | |
存储类型 | 超高IO | - | |
可用区 | 可用区1 | 本示例中选择了单可用区,实际建议选择多可用区,以提高实例的高可用性。 | |
性能规格 | 独享型(1:8) 8 vCPUs | 64GB | 本示例中为测试实例,选择较小的测试规格,实际选择规格以业务诉求为准。 | |
存储空间 | 480GB | 本示例中为测试实例,选择较小的存储空间,实际选择存储空间大小以业务诉求为准。 | |
磁盘加密 | 不加密 | 本示例中选择磁盘不加密,选择加密后会提高数据安全性,但对数据库读写性能有少量影响,实际请按照业务使用策略进行选择。 | |
透明加密 | 不加密 | 本示例中选择不加密,选择加密后会提高数据安全性,但对性能有一定影响,实际请按照业务使用策略进行选择。 | |
DAS登录数据库 | 数据库引擎 | GaussDB | - |
数据库来源 | GaussDB | 勾选本示例中创建的GaussDB实例 | |
数据库名称 | postgres | - | |
登录用户名 | root | - | |
密码 | - | 本示例中创建的GaussDB实例root用户密码 | |
DRS迁移任务 | 迁移任务名 | DRS-test-info | 自定义。 |
目标库名称 | test_database_info | 自定义,易理解可识别,但是需要确保兼容模式为Oracle模式。 | |
源数据库引擎 | Oracle | - | |
目标数据库引擎 | GaussDB | - | |
网络类型 | 公网网络 | 本示例中采用公网网络。 |
步骤二:创建GaussDB实例
创建GaussDB实例,作为迁移任务目标库。
- 进入购买云数据库GaussDB实例页面。
- 在购买实例页面,选择“自定义购买”。参考图6,选择计费模式、产品类型、数据库引擎版本、实例类型、事务一致性、分片数量、协调节点数量和可用区。 图7 实例选配

- 选择实例规格、存储空间大小。 图8 实例规格

- 配置实例名称和密码信息。 图9 配置实例名称和密码

- 选择实例所属的VPC(创建VPC)和安全组(创建安全组),配置数据库端口、参数模板等信息。 图10 选择VPC和安全组

- 单击“立即购买”,确认信息并提交。
- 返回实例列表。
步骤三:迁移前构造数据
迁移前需要在源库构造一些数据类型,供迁移完成后验证数据。本章中端到端的数据为测试数据,仅供参考。
DRS支持的数据类型如下所示:
源库数据类型 | 目标库数据类型 | 源库数据类型做主键,同步能力 | 源库数据类型做非主键,同步能力 | 源库数据类型做主键,对比能力 | 源库数据类型做非主键,对比能力 | 备注 |
|---|---|---|---|---|---|---|
CHAR | character | 支持 | 支持 | 支持,忽略字符前后的空格 | 支持,忽略字符前后的空格 | - |
VARCHAR | character varying | 支持 | 支持 | 支持 | 支持 | 源目标库数据表示范围不同,存在精度损失。 |
VARCHAR2 | character varying | 支持 | 支持 | 支持 | 支持 | - |
NCHAR | character | 支持 | 支持 | 支持,忽略字符前后的空格 | 支持,忽略字符前后的空格 | - |
NVARCHAR2 | nvarchar2 | 支持 | 支持 | 支持 | 支持 | - |
NUMBER | numeric | 支持 | 支持 | 支持 | 支持 | - |
NUMBER (6,3) | numeric(6,3) | 支持 | 支持 | 支持 | 支持 | - |
NUMBER (6,0) | Integer | 支持 | 支持 | 支持 | 支持 | - |
NUMBER (3) | smallint | 支持 | 支持 | 支持 | 支持 | - |
NUMBER (6,-2) | integer | 支持 | 支持 | 支持 | 支持 | - |
BINARY_FLOAT | real | 不支持(目标库不支持做主键建表) | 支持 | 不支持 | 支持 | 源目标库数据表示范围不同,存在精度损失。 |
BINARY_DOUBLE | double precision | 不支持(目标库不支持做主键建表) | 支持 | 不支持 | 支持 | - |
FLOAT | real | 不支持(目标库不支持做主键建表) | 支持 | 不支持 | 支持 | 源目标库数据表示范围不同,存在精度损失。 |
INT | numeric | 支持 | 支持 | 支持 | 支持 | - |
INTEGER | numeric | 支持 | 支持 | 支持 | 支持 | - |
DATE | date | 支持 | 支持 | 不支持 | 支持 | DRS在目标库建表时类型为date,此时源目标库数据表示范围不同,存在精度损失,不支持对比。 |
TIMESTAMP | timestamp(6) without time zone | 支持 | 支持 | 不支持 | 校验到小数点后6位 | 源库使用限制:支持的最大精度是6。 |
TIMESTAMP_TZ | timestamp(6) with time zone | 不支持(源库不支持做主键建表) | 支持 | 不支持 | 过滤该列 | - |
TIMESTAMP_LTZ | timestamp(6) with time zone | 不支持(目标库不支持做主键建表) | 支持 | 不支持 | 过滤该列 | - |
INTERVAL_YM | interval year to month | 支持 | 支持 | 不支持 | 不支持 | 增量同步不支持该类型。 |
INTERVAL_DS | interval day to second | 支持 | 支持 | 不支持 | 不支持 | 增量同步不支持该类型。源库使用限制:支持的最大精度是6。 |
BLOB | bytea | 不支持(源库不支持做主键建表) | 支持 | 不支持 | 过滤该列 | - |
CLOB | text | 不支持(源库不支持做主键建表) | 支持 | 不支持 | 过滤该列 | - |
NCLOB | text | 不支持(源库不支持做主键建表) | 支持 | 不支持 | 过滤该列 | - |
LONG | text | 不支持(源库不支持做主键建表) | 支持 | 不支持 | 过滤该列 | - |
LONG_RAW | bytea | 不支持(源库不支持做主键建表) | 支持 | 不支持 | 过滤该列 | - |
RAW | bytea | 不支持(目标库不支持做主键建表) | 支持 | 不支持 | 支持 | - |
RowID | character varying(18) | 支持 | 支持 | 支持 | 支持 | - |
BFILE | - | 不支持 | 不支持 | 不支持 | 不支持 | 源库使用限制:不支持bfile类型。 |
XMLTYPE | - | 不支持 | 不支持 | 不支持 | 不支持 | 源库使用限制:不支持xmltype类型。 |
UROWID | - | 不支持 | 不支持 | 不支持 | 不支持 | 全量增量都不支持同步。 |
sdo_geometry | - | 不支持 | 不支持 | 不支持 | 不支持 | 源库使用限制:不支持sdo_geometry类型。 |
NUMBER(*,0) | numeric | 支持 | 支持 | 支持 | 支持 | - |
执行如下步骤在源库构造数据:
- 根据本地的Oracle数据库的IP地址,通过数据库连接工具连接数据库。
- 根据DRS支持的数据类型,在源库执行语句构造数据。
- 创建一个测试用的用户。
create user test_info identified by xxx;
test_info为本次迁移创建的用户,xxx为用户的密码,请根据实际情况替换。
- 给用户赋权。
- 在当前用户下创建一个数据表。
CREATE TABLEtest_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)
);
- 插入两行数据。
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');
- 使语句生效。
- 创建一个测试用的用户。
- 在目标端创建库。
- 登录华为云控制台。
- 单击管理控制台左上角的
,选择区域。 - 单击左侧的服务列表图标,选择。
- 在数据管理服务DAS左侧导航栏,单击“开发工具”,进入开发工具数据库登录列表页面。
- 单击“新增数据库实例登录”,打开新增数据库实例登录窗口。
- 选择“数据库引擎”、“数据库来源”、目标实例,填写登录用户名、密码以及描述(非必填项)信息,开启SQL执行记录功能。
步骤五:迁移后进行数据校验
当任务状态变为“增量同步”,说明全量同步已经完成,全量同步完成后,登录GaussDB查看数据迁移结果。
- 等待迁移任务状态变为“增量同步”。
- 单击任务名称,进入任务详情页。
- 在“同步进度”页签查看全量同步结果。
如图所示,本次迁移将TEST_INFO库中DATATYPELIST表迁移至shard_0,共迁移了两条数据。

- 验证数据一致性。
- 通过DAS连接GaussDB的目标库“test_database_info ”。
DAS连接实例的方法请参考新增数据库登录。
- 执行如下语句,查询全量同步结果。
SELECT * FROM test_info.datatypelist_after;
Oracle数据库中的模式迁移完成后,会在GaussDB库中作为Schema,所以查询语句中添加Schema精确查询。
如图所示,查询表中的各个数据类型都迁移成功,并且数据正确无误。

- 验证增量同步。
- 结束迁移任务。
- 迁移完成后,进行性能测试。
测试云数据库GaussDB性能的方法请参见性能白皮书。













































