首页 >云数据库 OceanBase >数据迁移方案 >Oracle数据库迁移 >新建通过数据库网关接入的自建 Oracle 数据库至OceanBase 数据库 Oracle 租户的数据迁移项目

新建通过数据库网关接入的自建 Oracle 数据库至OceanBase 数据库 Oracle 租户的数据迁移项目

本文为您介绍如何迁移通过数据库网关接入的自建 Oracle 数据库的数据至 OceanBase 数据库 Oracle 租户。

前提条件

  • 源端 Oracle 数据库已通过数据库网关接入阿里云,详情请参见 快速入门

  • 已为源端自建 Oracle 数据库和目标端 OceanBase 数据库 Oracle 租户创建专用于数据迁移的数据库用户,并赋予其相关权限。

  • 已在目标端 OceanBase 数据库 Oracle 租户创建对应的数据库。OceanBase 数据迁移功能支持迁移表和列,不支持迁移库,您需要提前在目标端创建对应的数据库。

  • 已创建源端和目标端的数据源。

使用限制

数据迁移仅支持复制一份源库的数据(结构)至目标数据库,并不会对源库的数据(结构)造成影响。启动迁移项目前,OMS 会自动对源端数据库和目标端数据库执行数据迁移的预检查。为确保预检查顺利执行,请先确认以下信息:

  • OMS 支持的 Oracle 数据库版本为 10G/11G/12C/18C/19C,12C 及以上版本包含数据库容器(Container Database,CDB)和可插拔数据库(Pluggable Database,PDB)。

  • 请确保源端和目标端数据库的时钟同步。

  • 源端为 Oracle 数据库,字符集必须是 UTF16、UTF8 或 GBK。

  • 源端表的数据类型目前支持 BIGINT、VARCHAR、TINYINT、TEXT、INT、TIMESTAMP、BLOB、DATATIME、DECIMAL、MEDIUMBLOB、DATE、TIME、BIT、CHAR 和 BINARY。

数据类型映射

通常迁移 Oracle 数据库的数据至 OceanBase 数据库 Oracle 租户时,OMS 支持大部分数据类型的数据迁移和增量同步。如果 OceanBase 数据库为 V2.2.30 以下的版本,OMS 会在数据迁移时,将其转换为 FLOAT(n)NUMBER(n*0.30103) ,V2.2.30 及以上版本支持 FLOAT 类型的数据原样迁移。

注意

  • CLOB 和 BLOB 类型的数据必须小于 48 MB。

  • 不支持迁移 LONG、ROWID、BFILE、LONG RAW、XMLType 和 UDT 类型的数据。

Oracle 数据库

OceanBase 数据库 Oracle 租户

CHAR

CHAR

NCHAR

NCHAR

VARCHAR2

VARCHAR2

NVARCHAR2

NVARCHAR2

NUMBER

NUMBER

NUMBER (p, s)

NUMBER(p,s)

LONG

支持全量迁移和校检,暂不支持增量同步

RAW

RAW

CLOB

CLOB

NCLOB

NCLOB

BLOB

BLOB

FLOAT(n)

  • OceanBase V2.2.30 以下版本:NUMBER(n*0.30103)

  • OceanBase V2.2.30 及以上版本:FLOAT

BINARY_FLOAT

BINARY_FLOAT

BINARY_DOUBLE

BINARY_DOUBLE

DATE

DATE

TIMESTAMP

TIMESTAMP

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE

INTERVAL YEAR(p) TO MONTH

INTERVAL YEAR(p) TO MONTH

INTERVAL DAY(p) TO SECOND

INTERVAL DAY(p) TO SECOND

ROWID

不支持

BFILE

不支持

LONG RAW

支持全量迁移和校检,暂不支持增量同步

XMLType

不支持

UDT

不支持

创建数据迁移项目

  1. 新建迁移项目。

    1. 登录 OceanBase 控制台

    2. 在左侧导航栏,单击 数据传输>数据迁移

    3. 数据迁移 页面,单击右上角的 新建迁移项目

  2. 选择源和目标 页面,配置各项参数。

    参数

    描述

    迁移项目名称

    支持中文、数字和字母的组合,不得超过 64 个字符。

    传输实例

    从下拉列表中选择已购买的传输实例。如果您未购买,请单击右侧的 购买 进行操作。详情请参见 购买传输实例

    源节点

    源端节点设置为已创建的通过数据库网关接入的自建 Oracle 数据源。如果未创建,请单击下拉列表中的 添加数据源,在右侧对话框进行添加。参数详情请参见 创建数据源(Oracle)

    目标节点

    目标节点设置为已创建的 OceanBase 数据库 Oracle 租户数据源。如果未创建,请单击下拉列表中的 添加数据源,在右侧对话框进行添加。参数详情请参见 创建数据源(OceanBase)

  3. 单击 下一步

  4. 选择迁移类型及对象 页面,选择当前迁移项目的 迁移类型

    迁移类型 包括 结构迁移全量迁移增量迁移全量校验

    • 如果选择 全量迁移,建议您在迁移数据前,使用 GATHER_SCHEMA_STATSGATHER_TABLE_STATS 语句收集 Oracle 数据库的统计信息。

    • 如果选择 全量校验,建议您在全量校验开始前,分别收集 Oracle 数据库和 OceanBase 数据库 Oracle 租户的统计信息。

    • 增量迁移数据变更 DML 包括 InsertDeleteUpdate,您可以根据需求进行选择。如果您选择了 增量迁移,且数据变更 DML 选项中未选择所有的 DML,则无法选择 全量校验

  5. 选择迁移类型及对象 页面,选择迁移对象。

    您可以通过 指定对象匹配规则 两个入口选择迁移对象。

    注意

    • 待迁移的表名和其中的列名不能包含中文字符。

    • 当数据库的库名或表名存在“$$”字符时,会影响数据迁移项目的创建。

    • 选择 指定对象,在左侧选中需要迁移的对象,单击 >,将其添加至右侧列表中。您可以选择一个或多个库的表、视图作为迁移对象。

      迁移通过数据库网关接入的自建 Oracle 数据库的数据至 OceanBase 数据库 Oracle 租户时,OMS 支持通过文本导入对象、重命名对象名称、设置行过滤、查看列信息,以及移除单个或全部迁移对象。

      操作

      步骤

      导入对象

      1. 在选择区域的右侧列表中,单击右上角的 导入对象

      2. 在对话框中,单击 确定

        注意

        导入会覆盖之前的操作选择,请谨慎操作。

      3. 导入迁移对象 对话框中,输入需要迁移的对象。例如,SCHEMA.TB1 | SCHEMA.TB2 | SCHEMA.TB3=SCHEMA_RENAME.TB3_RENAME,库、表名映射使用等号(=)连接。

        建议迁移对象不超过 2000 个。如果超过该数量,则推荐使用 匹配规则 模式。

      4. 单击 检验合法性

      5. 通过合法性的检验后,单击 确定

      重命名

      OMS 支持重命名库名和表名。

      1. 在选择区域的右侧列表中,鼠标悬停至目标对象。

      2. 单击显示的 重命名

      3. 输入修改后的名称,单击 确定

      设置

      OMS 支持 WHERE 条件实现行过滤,以及查看列信息。

      1. 在选择区域的右侧列表中,鼠标悬停至目标对象。

      2. 单击显示的 设置

      3. 设置 对话框中,输入标准的 SQL 语句中的 WHERE 子句,来配置行过滤。

        只有满足 WHERE 条件的数据才会被同步至目标数据源,以实现数据的行过滤。如果语句中包含 SQL 保留关键字,请添加转义符(`)。

      4. 单击 确定

        您也可以在 查看列 区域,查看迁移对象的列信息。

      移除/全部移除

      OMS 支持移除单个或全部迁移对象。

      • 移除单个迁移对象

        在选择区域的右侧列表中,鼠标悬停至目标对象,单击显示的 移除,即可移除该迁移对象。

      • 移除全部迁移对象

        在选择区域的右侧列表中,单击右上角的 全部移除。在对话框中,单击 确定,即可移除全部迁移对象。

    • 选择 匹配规则,详情请参见 配置迁移对象的匹配规则

  6. 单击 下一步,在 迁移选项 页面,配置各项参数。

    分类

    参数

    描述

    基本配置

    展示所选传输实例的规格,不支持修改。

    高级配置

    全量迁移是否允许目标表非空

    全量迁移允许目标表非空时,全量校验采用的是 in 判断,无需移除全量校验。
    注意

    选择迁移类型及对象 页面选中 全量迁移,才支持设置该选项。

    全量迁移是否允许索引不一致

    根据业务需求,设置全量迁移是否允许索引不一致。

    是否允许索引后置

    您可以设置是否允许全量数据迁移完成后再创建索引,索引后置能够减少全量迁移的时间。

    注意

    • 选择迁移类型及对象 页面同时选中 结构迁移全量迁移,才支持设置该选项。

    • 仅非唯一键索引支持后置创建。

  7. 单击 预检查,系统对数据迁移项目进行预检查。

    预检查 环节,OMS 会检查数据库用户的读写权限、数据库的网络连接等是否符合要求。全部检查项目均通过后才能启动数据迁移项目。如果预检查报错,请排查并处理问题后,重新执行预检查,直至预检查成功。

  8. 单击 启动任务,启动该项目的结构迁移、全量迁移等各项任务。

    如果您暂时无需启动项目,请单击 保存,跳转至数据迁移项目的详情页面,您可以根据需要进行手动启动。如果您需要查看详情,请参见 查看数据迁移项目的详情

启动数据迁移项目

全部检查项目检查完成后,当且仅当全部成功可以进入启动项目。有失败的检查项目需要手动修复后,在当前界面复检。数据迁移项目启动后,依次执行选择的迁移类型:

  1. 结构迁移

    负责迁移源库中的数据对象定义(表、索引、约束、注释和视图等)至 OceanBase 目标库中,会自动过滤临时表。

    当源端数据库非 OceanBase 数据库时,会依据目标 OceanBase 租户类型的语法定义标准进行数据类型和 SQL 语法的自动转换和拼装,然后复制至 OceanBase 目标库中。

    您可以对目标对象进行以下操作:

    • 查看创建语法:单击后,您可以 查看表创建语法修改索引创建语法

      如果表创建语法完全兼容,为您展示在 OBServer 执行的 DDL 语法。不完全兼容,则展示转换后的创建语法。

    • 修改创建语法并重试:运行失败的 DDL 和报错,您可以检查并修改该条 DDL 转换结果的定义,再次迁移至目标端。

    • 查看数据库返回码:失败的结构迁移任务,展示 DDL 语句和 OBServer 上执行的错误信息。

    • 重试/重试全部失败对象:失败的结构迁移任务,您可以依次进行重试,也可以 重试全部失败对象

    • 跳过/批量跳过:失败的结构迁移任务,您可以依次跳过。您也可以批量选择需要移除的对象,单击右上角的 批量跳过。跳过对象时,索引会一并跳过。

    • 移除/批量移除:失败的结构迁移任务,您可以依次进行移除。您也可以批量选择需要移除的对象,单击右上角的 批量移除。移除对象时,索引会一并移除。

  2. 全量迁移

    迁移源库表的存量数据至 OceanBase 库对应的表中。您可以在 全量迁移 页面,查看 表对象表索引。只有表对象和表索引均迁移完成,全量迁移的状态才会显示已完成。在 表索引 页面,单击目标表对象后的 查看创建语法,即可查看索引创建语法。

    全量迁移加上增量迁移,可以确保目标端数据库与源端数据库的最终一致性。如果全量迁移过程中有失败的对象,会为您展示具体的失败原因。

    注意

    如果您在选择 迁移类型 时未配置 结构迁移,则全量迁移时,OMS 会以源端和目标端匹配的字段进行迁移,不会检查表结构是否一致。

  3. 增量迁移

    增量迁移任务开始后,会同步源库发生变化的数据(新增、修改或删除)至 OceanBase 数据库对应的表中。

    当源库不断有业务写入时,OMS 会在全量数据迁移启动前,启动增量拉取模块,以拉取源实例中的增量更新数据,对其进行解析、封装,并存储至 OMS 中。

    当全量数据迁移完成后,OMS 会启动增量数据回放模块,从增量数据拉取模块中获取增量数据。增量数据经过过滤、映射和转换后,再同步至目标实例中。

    您可以在增量迁移区域查看延迟时间、当前位点时间,以及迁移流量等增量迁移性能。

  4. 全量校验

    在全量数据迁移完成,增量数据迁移至目标端并与源端基本追平后,OMS 会自动发起一轮针对源库配置的数据表和目标表的全量数据校验任务。

    注意

    如果您在选择 迁移类型 时未配置 结构迁移,则全量校验时,OMS 会以源端和目标端匹配的字段进行校验,不会检查表结构是否一致。

    增量数据同步过程中,您也可以发起自定义的数据校验,OMS 会提供相应的接口。

    针对校验出不一致的数据,您可以查看具体的列信息。并且 OMS 会提供以源端为基准,在目标端进行订正操作的 SQL 脚本。

    OMS 支持 执行中 的迁移项目跳过全量校验。在 全量校验 页面,单击 跳过全量校验,并在弹出对话框中,单击 确定

    全量校验完成后,您可以单击 进入下一阶段,启动正向切换。进入切换流程后,您将无法复检当前校验任务进行数据比对和数据订正。

  5. 正向切换

    1. 启动正向切换

      该步骤不会停止链路,仅确认即将开始执行的切换流程。用户进入至正向切换任务流时,需要手动单击 启动正向切换

      注意

      启动正向切换前,请确保源端数据源为即将停写或者已经停写状态。
    2. 切换预检查

      用于检查当前项目状态是否具备切换条件,会进行同步延迟检查。如果启动增量同步后,延迟在 15 秒内,则预检查通过。如果未启动增量同步,则预检查自动通过。

      如果预检查通过,会自动执行下一步操作。如果预检查未通过,会提示报错详情。

      如果预检查未通过,您可以进行 重试跳过 操作。

      如果单击 跳过,需要在弹出的对话框中,再次单击 跳过

    3. 确认源端停写

      确认源端停写 区域,单击 确定,确认源端无增量数据产生。

    4. 确认同步追平停写位点

      OMS 自动检查源端和目标端处于一致位点。检查完成后,展示当前增量同步延迟时间和增量同步位点。

    5. 停止正向同步

      停止源端到目标端的增量迁移。如果停止失败,您可以进行 重试跳过 操作。

    6. 执行数据库对象处理

      该步骤会完成数据库对象的迁移,删除 OMS 附加列和索引,补充结构迁移自动忽略的约束,确认 Trigger 或 Sequence 等对象已经手工迁移完成,以及确认源端 Trigger 或 FK 已关闭。

      您需要手动单击 运行,来执行数据库对象。对于运行中的项目,您可以执行 查看日志跳过 操作。自行处理的项目需要手动单击 标记完成

阿里云首页 云数据库 OceanBase 相关技术圈