新建通过数据库网关接入的自建 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)

    注意

    目标端不支持实例类型为 VPC 内自建数据库的 OceanBase 数据源。

    传输实例

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

  3. 单击 下一步

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

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

    迁移类型

    使用限制

    全量迁移

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

    增量同步

    增量同步 包括 数据变更 DMLInsertDeleteUpdate)和 结构变更 DDL,您可以根据需求进行选择,支持的 DDL 详情请参见 增量 DDL 支持的范围和限制增量同步 的使用限制如下:

    • 多表到单表的汇集场景,均不支持增量 DDL。

    • 目标端为 VPC 内自建数据库类型的 OceanBase 数据库 Oracle 租户数据源时,不支持增量 DDL。

    • 如果您未选择 结构变更 DDL,请进行 DDL 变更前,确保源端无变更,且增量 DML 数据已全部同步至目标端。然后在源端、目标端分别进行相关的 DDL 操作。

    • 如果您未选择 结构变更 DDL,对于迁移链路中表的 DDL 操作,请先在目标端数据源执行,否则存在数据迁移中断的风险。

    • 如果您选择了 结构变更 DDL,当源端数据库发生 OMS 未支持的增量 DDL 操作时,会存在数据迁移中断的风险。

    全量校验

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

    • 如果您选择了 增量同步,且数据变更 DML 选项中未选择所有的 DML,则无法选择 全量校验

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

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

    注意

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

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

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

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

      操作

      步骤

      导入对象

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

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

        注意

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

      3. 导入迁移对象 对话框中,导入需要迁移的对象。

        您可以通过导入 CSV 文件的方式进行库表重命名、设置行过滤条件等操作。详情请参见 下载和导入迁移对象配置

      4. 单击 检验合法性

        完成迁移对象导入后,请先检验合法性。目前暂不支持列字段映射。

      5. 通过检验后,单击 确定

      重命名

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

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

      2. 单击显示的 重命名

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

      设置

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

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

      2. 单击显示的 设置

      3. 设置 对话框中,输入标准的 SQL 语句中的 WHERE 子句,来配置行过滤。其作用范围为 全量迁移 + 增量同步

        注意

        • 请对列名添加转义符(`)。例如,`col`
        • 只有满足 WHERE 条件的数据才会被同步至目标数据源,以实现数据的行过滤。
        • 如果开启 where 条件的行过滤,目前 CHAR 或 VARCHAR 类型会强制右 trim,可能造成 VARCHAR 的比较不准确,请谨慎使用。
      4. 单击 确定

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

      移除/全部移除

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

      • 移除单个迁移对象

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

      • 移除全部迁移对象

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

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

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

    分类

    参数

    描述

    基本配置

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

    高级配置

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

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

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

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

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

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

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

  8. 单击 启动项目

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

启动数据迁移项目

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

  1. 结构迁移

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

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

    您可以查看 视图 的迁移进度,并对目标对象进行以下操作:

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

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

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

    • 查看创建语法:单击后,您可以查看已完成表的创建语法。

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

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

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

  2. 全量迁移

    迁移源库表的存量数据至目标库对应的表中。您可以在 全量迁移 页面,查看 表对象全量迁移性能

    • 表对象 页签,您可以查看对象名称、源库、目标库、预估数据量、已完成数据量和对应的状态。

    • 全量迁移性能 页签,您可以图形化查看 源端 RPS目标端 RPS源端迁移流量目标端迁移流量,以及性能基准等性能数据,帮助您有效识别性能相关问题。

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

      注意

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

      在全量迁移完成之后,且后续步骤已启动的情况下,不允许在 运维监控 > 组件 > Checker 页面,单击目标 Checker 组件后的 重跑

  3. 增量同步

    增量同步任务开始后,会同步源库发生变化的数据(新增、修改或删除)至目标端数据库对应的表中。当源库不断有业务写入时,OMS 会在全量数据迁移启动前,启动增量拉取模块,以拉取源实例中的增量更新数据,对其进行解析、封装,并存储至 OMS 中。

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

    如果您在源端执行 DDL 后,造成 JDBCWriter 异常,从而造成数据迁移项目运行失败,页面会展示造成项目失败的 DDL 语句以及跳过操作按钮。此时,您可以单击弹出框中的 跳过,并进行二次确认。本操作可能造成源端和目标端数据结构不一致,请谨慎操作。

    对于 运行中 状态的数据迁移项目,您可以在增量同步区域查看其延迟时间、当前位点时间,以及增量同步性能信息。延迟时间的显示逻辑为:X 秒(Y 秒前更新),Y 小于 20 秒属于正常情况。

    对于 已暂停失败 状态的数据迁移项目,您可以开启 DDL/DML 统计功能,统计开启该功能时间点之后的数据库操作。包括 DML 变更总和,项目创建成功后在目标端执行成功的 Delete、Insert 和 Update 总次数,已成功执行 DDL 和忽略 DDL 的总次数。同时,您可以查看增量同步对象的具体信息,以及增量同步性能信息。

    • 增量同步对象 页签为您展示表级别的统计 DML 数量,在该页签上方的变更总和、Delete、Insert 和 Update 显示的数据为当前数据迁移项目中所有的 DML 数量,即增量同步对象页签统计的数量之和。

      统计数量

      如果您开启 DDL/DML 统计功能之后又关闭了该功能,则 OMS 会保留历史统计数据。

    • 增量同步性能 页签为您展示以下内容:

      • 延迟:源端增量变更被同步至目标端的滞后时间,单位为秒。

      • 迁移流量:源端增量变更数据被同步到目标端的流量吞吐,单位为 KB/s。

      • 平均执行时间:每条 SQL 执行时间的均值,单位为 ms。

      • 平均提交时间:事务提交时间的均值,单位为 ms。

      • RPS:每秒处理记录数。

    创建数据迁移项目时,建议您开启告警监控,以便随时掌握项目运行状态,详情请参见 设置告警监控。未开启监控告警的情况下,默认增量同步延时小于等于 1 分钟时,增量同步步骤的状态由运行中切换为监控中。开启监控告警的情况下:

    • 如果数据迁移项目的增量同步延时大于配置的告警时间,增量同步步骤始终处于运行中,系统不会触发告警信息。

    • 如果数据迁移项目的增量同步延时小于等于配置的告警时间,增量同步步骤的状态由运行中切换为监控中。增量同步的状态变为监控中后,延时大于配置的告警时间,也不会再切换为运行中状态。

  4. 全量校验

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

    注意

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

    全量校验期间,如果源端对表进行 createdropalterrename 操作,可能导致全量校验退出。

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

    您可以在 全量校验 页面查看全量校验的整体状态、启动时间、结束时间、总计耗时、预估总行数、已完成迁移行数、实时流量和 RPS 等信息。

    全量校验 页面包括 校验对象全量校验性能 页签:

    • 校验对象 页签,您可以查看校验的进度和校验对象列表。

      • 对于全部迁移对象,均可以查看指定对象的名称、对应源库和目标库、全量校验进度、结果和结果摘要。

      • 支持根据源库和目标库进行筛选。

      • 支持勾选 只查看已完成对象,查看当前时间点已完成结构迁移的对象名称等基本信息。

      • 如果您需要对全部迁移对象再次进行全量校验,请单击 再次校验 > 重启全量校验

      • 存在校检结果不一致的表时:

        如果您需要重新校验表中的全部数据,请单击 再次校验 > 重新校验异常的表

        如果您仅需要重新校验表中不一致的数据,请单击 再次校验 > 仅校验不一致的表记录

        注意

        如果源端为空,则不支持订正操作。

    • 全量校验性能 页签,您可以图形化查看 源端 RPS目标端 RPS源端迁移流量目标端迁移流量,以及性能基准等性能数据,帮助您有效识别性能相关问题。

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

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

  5. 正向切换

    正向切换(传统意义上的系统割接流程的抽象化、标准化)不会操作业务应用连接的切换,是 OMS 的数据迁移链路配合应用切换前后需要执行的任务流。您需要保证在应用连接切换至目标端前完成正向切换的全部流程。

    正向切换是选择数据迁移便会编排进来的一个流程,您需要终止正向增量同步,删除迁移依赖的附加列和唯一索引,补充在同步过程中被 OMS 过滤掉 Check 约束,并激活目标端 Trigger/FK (迁移前该类对象需要被禁用,否则将引起数据不一致)等,保证新迁移出来的数据库完整、可用。

    如果您配置了反向增量,切换会多编排进来启动反向增量以及禁用源端 Trigger/FK 的子任务,启动从目标端到源端的实时增量同步,保障业务数据回流至原源端数据库,提供随时切换应用的可能性。

    1. 启动正向切换

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

      注意

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

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

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

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

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

    3. 确认源端停写

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

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

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

    5. 停止正向同步

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

    6. 执行数据库对象处理

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

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

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