跳到主要内容

如何实现 Oracle 到 PostgreSQL 的不停机数据库迁移

1970 年,数据库之父 Edgar Frank Codd 发表了“数据的关系模型”论文,该论文为往后的关系型数据库的发展奠定了基础。1979 年,基于关系模型理论的数据库产品 Oracle 2 首次亮相,并在过去的三四十年时间里,横扫全球数据库市场。

时间到了 1989 年,Oracle 进军中国市场,场面几乎也是 Oracle 一家独大,大部分大型企业都被 Oracle 占领。然而,虽然 Oracle 功能强大,运行稳定,但其居高临下的授权费用占据了企业支出的大头,甚至有企业表示,Oracle 的授权费用比企业某个大项目的总支出还要高。尽管如此,由于 Oracle 的黏性实在太强,在没有替代方案的情况下,接下来的相当长一段年月里,企业也都只能乖乖掏钱。

时至今日,情况已经发生了翻天覆地的变化,替代方案层出不穷,PostgreSQL 作为其中的一员,除了兼具多样功能和强大性能之外,还具备非常优秀的可扩展性,可以较好地兼容 Oracle,企业也可以从长期活跃的开源社区中得到丰富的资源和技术支持,最重要的是,PostgreSQL 是开源软件,无需支付高昂的授权费用,这可以为企业省下不小的支出。因此,Oracle 到 PostgreSQL 的迁移成了众多企业的首选。

然而,Oracle 到 PostgreSQL 的迁移并不是说迁就能迁的,有很多不得不解决的问题。

Oracle 迁移到 PostgreSQL 不得不解决的问题

  • 业务的可用性:迁移必须在不影响业务的前提下进行,换句话说,迁移时不能停机,那需要考虑的事情就非常多了:存量和增量数据如何完整迁移?如何处理迁移时的性能波动?如何实现应用程序的平滑切换?等等。
  • 表结构初始化及变更联动:当待迁移表数量巨大,且迁移过程中源Oracle发生DDL情况下,如何实现高效且稳定的数据库迁移无疑是一大挑战。
  • 迁移数据质量:大规模数据搬迁过程中,如何保障数据一致性;当业务迁移切换异常情况下,如何有效回滚保障业务的可用性。
  • 迁移失败如何止损: PostgreSQL 与 Oracle 在功能与性能上表现迥异,迁移复杂度较高,当业务出现迁移失败情况下,如何有效保障业务的可用性也是业务需要考虑的重点问题。

这些问题如果可以顺利解决,迁移工作将会相当丝滑。那么如何解决呢?方法自然是有的。对于上述 4 个问题,NineData 有绝对的发言权,我们先来看看它是如何解决这些问题的:

  • 迁移过程业务不停机:NineData 提供结构迁移、全量数据迁移及基于 redo log 的 CDC 增量数据迁移能力。在数据库迁移过程中,源端 oracle 可正常提供服务。NineData 可自动完成结构迁移、全量数据迁移,并自动启动 redo log 的实时监听、采集、解析及复制能力,源端 Oracle 的增量更新数据会被实时复制到目标 PostgreSQL 中。当 NineData 进入到增量数据迁移阶段且复制无延迟时,业务可以在 PostgreSQL 中进行只读验证,并借助 NineData 数据对比工具进行数据一致性验证。业务验证通过后,可进行业务停机切换。由此可见,整个迁移过程业务停机时间非常短。
  • 强劲的复制性能:在数据库迁移过程中,迁移速度无疑是影响业务能否成功切换割接的重要因素。在此过程中,NineData 针对 Oracle > PG 数据复制进行深度性能优化,基于日志分析、智能分片、动态攒批、数据合并、特有数据格式等技术,有效保障全量数据复制、增量数据复制的性能。当前 NineData 全量复制性能高达 200 GB/小时,增量数据复制性能高达 2 万记录/秒。
  • 完善的迁移回滚方案:Oracle > PostgreSQL 的迁移复杂度极高,Oracle 与 PostgreSQL 在功能、性能上相差较多,涉及大量的业务改造及性能调优,迁移割接的难度极高。为降低 Oracle 到 PostgreSQL 割接失败的风险,通常业务都需要做好割接失败的回滚预案。NineData 提供了基于 PostgreSQL wal log 的 CDC 增量复制能力,支持从 PostgreSQL 实时采集、解析并同步增量至 Oracle。当业务从 Oracle 切换至 PostgreSQL 之前,可以在 NineData 搭建一条从 PostgreSQL 实时回流增量数据至 Oracle 的复制任务。基于此复制任务,可以将业务切换到 PostgreSQL 产生的新数据同步至 Oracle,Oracle 中保存了完整的业务数据。一旦出现因 PostgreSQL 的功能或性能导致的业务运行问题,可随时将业务回切回 Oracle,有效规避业务迁移故障。
  • 完善的数据质量保障方案:NineData 提供了多种数据一致性校验方案,包括全量精准校验、快速验及增量校验,可以对 Oracle > PostgreSQL 迁移数据进行数据一致性强验证。同时,当出现数据不一致时,能够提供一键修复能力。基于 NineData 数据一致性校验能力,可以有效规避因数据质量导致的业务迁移故障。

基于上述能力,NineData 可轻松解决 Oracle 到 PostgreSQL 的迁移问题,下面来看看怎么操作。

步骤一:录入源和目标数据源

  1. 登录 NineData 控制台,单击数据源管理>数据源,然后在页面中单击创建数据源,选择需要录入的数据源。

    image-20240321112625958

  2. 根据页面提示进行配置,然后单击创建数据源完成创建。

    image-20240319150009255

步骤二:配置同步链路

  1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击创建复制

    image-20240319150313727

  2. 根据页面提示配置复制任务,由于我们需要不停机迁移,需要在复制类型处勾选增量复制

    image-20240321180547340

  3. 配置完成后启动任务,针对您配置的所有迁移对象,NineData 会先对所有的存量数据进行全量迁移,接下来就是实时同步 Oracle 中新增的增量数据,所有新写入的数据都将一条不漏地同步到 PostgreSQL,每当目标端的增量数据追平源端时,任务面板中会显示延迟 0 秒,如下图所示。

    image-20240320100557992

步骤三(可选):校验目标端同步数据的完整性

除了同步功能以外,NineData 还提供了同步后源端和目标端同步数据的对比功能,以确保目标端数据的完整性。

  1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

    image-20240321180811204

  2. 单击数据对比页签,并单击开启数据对比(如果步骤二的任务配置中已勾选开启数据一致性对比,则此处直接展示对比结果)。

    image-20240321181451423

    提示

    开启后,系统将自动对比源端和目标端的同步对象,并给出对比结果。

    image-20240321181600028

  3. 您可以在一段时间后,单击页面中的重新对比,校验最新增量数据的结果。

    image-20240321181629396

步骤四(可选):配置任务异常告警

由于是增量迁移任务,您可能需要系统实时监控任务状态,在任务有异常时即刻通知您。

  1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

    image-20240321180811204

  2. 单击右上角的配置告警

    image-20240321181730559

  3. 输入策略名称,单击保存配置即可。您可以直接使用内置的默认规则,在任务运行失败,或复制延迟大于等于 10 分钟的时候,发送短信提醒您。您也可以自定义创建规则,根据您的需求来进行通知。

    image-20240320105025913

最后

在 NineData 将所有数据迁移到 PostgreSQL 之后(延迟为 0),最后一步是在业务低峰期,将业务流量切换至 PostgreSQL,即可完成整个 Oracle 到 PostgreSQL 的迁移。这个切换过程是非常关键,需要谨慎规划执行。