Oracle到PostgreSQL的不停机数据库迁移

news2024/9/28 17:33:10

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

时间到了 1989 年,Oracle 进军中国市场,场面几乎也是 Oracle 一家独大,大部分大型企业都被 Oracle 占领。Oracle 功能强大,运行稳定的背后,是其高额的授权费用。尽管如此,由于 Oracle 的黏性实在太强,在没有替代方案的情况下,接下来的相当长一段年月里,企业也都只能乖乖掏钱。

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

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

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

业务的可用性:迁移必须在不影响业务的前提下进行,换句话说,迁移时不能停机,那需要考虑的事情就非常多了:存量和增量数据如何完整迁移?如何处理迁移时的性能波动?如何实现应用程序的平滑切换?等等。

表的初始化:在同步数据之前,需要手动在 PostgreSQL 端创建和源端一致的表结构,然后才能从源端接收数据。当源端有大量表且表结构很复杂的情况下,工作量非常大。

数据结构的映射:两者数据结构不同,怎么确保数据从源端同步过来后的完整性?除非你对两者的数据模型的理解非常极致,且保证绝对不出错,才能达到理想的结果。

源端 DDL 语句的联动:如何保证源端的数据结构发生变化时,同步链路不中断?那就需要实时捕获源端 Oracle 的 DDL 变更,并及时在目标端的 PostgreSQL 中同步执行。

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

迁移过程不停机:在不影响源端业务的情况下,进行全量和增量数据的迁移,保证源和目标的一致性,并在迁移完成后实施无缝切换。

结构复制:基于目标端数据源的特性,自动高效地完成表的创建、数据结构的映射等工作。

复制性能:基于动态攒批、并行复制、Stream Load 等技术,复制性能轻松达到 200 MB/S。

DDL 捕获与执行:实时检测源端中的 DDL 操作,并同步在目标端中执行,保证其他业务变更能够稳定地进行。

轻松解决且非常愉快,下面来看看怎么操作。

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

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

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

步骤二:配置同步链路

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

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

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

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

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

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

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

提示

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

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

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

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

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

单击右上角的配置告警。

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

最后

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1663110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开放式耳机哪个品牌好?性能超强的五款耳机推荐!速来码住!

运动已经融入了我们的日常生活,组团徒步、爬山、跑步、骑行等项目都收到了很人的喜爱。运动加耳机的组合也成了年轻人热爱的方式,在激烈运动的过程中往往会照成颠簸,在佩戴耳机上稳固性和舒适性就变得很重要了,因此开放式蓝牙耳机…

408算法题专项-2019年

题目: 分析:要求空间复杂度为O(1),我们可以逆向假设可以开空间,得出一种思路,然后对这种思路优化空间即可得到O(1) 思路一:假设开空间 思考:再开…

【初阶数据结构】单链表之环形链表

目录标题 前言环形链表的约瑟夫问题环形链表环形链表|| 前言 前面我们已经学习了关于单链表的一些基本东西,今天我们来学习单链表的一个拓展——环形链表,我们将用力扣和牛客网上的三道题目来分析讲解环形链表问题。 环形链表的约瑟夫问题 我们首先来看…

iOS性能指标和性能测试工具

一: iOS性能测试指标 作为一名软件测试工程师,在测试 iOS 应用的性能时,需要关注以下几个方面: 1. 响应时间:应用的启动时间、页面加载速度、接口响应时间等。 2. CPU 使用率:应用在各种操作下的 CPU 占…

python中如何把list变成字符串

python中如何把list变成字符串?方法如下: python中list可以直接转字符串,例如: data ["hello", "world"] print(data1:,str(data)) 得到结果: (data1:, "[hello, world]") 这里将整个…

C脚本实现WIncc模拟量趋势窗口弹出

文章目录 前言一、步骤及解析二、运行画面演示三、总结 前言 本文给出了一种基于C脚本实现点击输入输出域对象,弹出对应模拟量趋势窗口的方法。 一、步骤及解析 在Wincc变量管理中,添加两个变量; 示例如下: 将以上两个变量添加到…

C++学习第二十九课:C++ 输入输出流详解:从基础到高级应用

在 C 中,流(stream)是一种用于实现输入输出操作的抽象概念。流可以看作是字节的流动,这些字节可以从一个地方流向另一个地方,例如从键盘输入到程序中,或者从程序输出到屏幕。C 提供了一套完整的流库来处理各…

头歌实践教学平台:CG1-v1.0-点和直线的绘制

第1关:OpenGL点的绘制 一. 任务描述 根据下面要求,在右侧修改代码,绘制出预期输出的图片。平台会对你编写的代码进行测试。 1.本关任务 熟悉编程环境; 了解光栅图形显示器的特点; 了解计算机绘图的特点&#xff1b…

zblog中用户中心-邀请码注册插件的导出功能补充

自己加了一个导出未使用的邀请码功能,可惜我不是入驻作者,没有权限发布,之前被一条大河拒了,他说我抄他代码,不给我过审还冷嘲热讽,我一气之下,就没继续申请了,话说我是专业搞java开…

element-plus表单上传,唯一替换文件校验,封装方法统一管理

<el-formref"ruleFormRef":model"ruleForm":rules"rules"label-width"110px" ><el-form-item label"语言成绩材料" prop"languageList"><div class"dis-flex w100"><el-uploadref…

探索Python字典的迭代之旅:使用‘for‘循环的技巧与实践

在Python中&#xff0c;字典&#xff08;dictionary&#xff09;是一种非常强大的数据结构&#xff0c;它允许我们以键值对&#xff08;key-value pairs&#xff09;的形式存储数据。字典的遍历是日常工作中常见的操作之一&#xff0c;而’for’循环则是实现这一操作的常用方法…

HTTP 1.1 与 HTTP 1.0

什么是HTTP HTTP 就是一个 超文本传输协议 协议 : 双方 约定 发送的 域名 数据长度 连接(长连接还是短连接) 格式(UTF-8那些) 传输 :数据虽然是在 A 和 B 之间传输&#xff0c;但允许中间有中转或接力。 超文本:图片、视频、压缩包,在HTTP里都是文本 HTTP 常见状态码 比如 20…

一篇文章帮你搞定微软云计算证书Renew

IT证书都有过期的时间&#xff0c;像AWS是3年有效期&#xff0c;谷歌是2年&#xff0c;微软是1年&#xff0c;那这些证书到期该怎么Renew更新呢&#xff1f; 小李哥最近的微软AZ-204证书要到期了&#xff0c;到期前半年就会收到Microsoft发来提醒邮件。大家在这半年内任何时间都…

Redis 实战之命令请求的执行过程

命令请求的执行过程 发送命令请求读取命令请求命令执行器&#xff08;1&#xff09;&#xff1a;查找命令实现命令执行器&#xff08;2&#xff09;&#xff1a;执行预备操作命令执行器&#xff08;3&#xff09;&#xff1a;调用命令的实现函数命令执行器&#xff08;4&#x…

【MySQL】——课程平台的创建设计

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

mybatis 跨库查询 mysql

跨库&#xff0c;表关联的查询&#xff0c;实现起来很简单&#xff1a; select a.uid from ucenter.user a , database user_profile b where a.uid b.uid;只要在表的前边加上库名即可。 这个是我项目中xml 中的一个例子&#xff0c;项目采用的是springmvc,持久层框架就是my…

矩阵和空间变换理解

矩阵和空间变换 把向量和矩阵相乘看作是空间变换&#xff0c;是其中一种看法 代数角度&#xff1a;向量的一行和矩阵的一列逐项相乘再相加等于新向量的一项 w代表原来坐标轴和新坐标轴之间的变换关系&#xff0c;而a和b体现的是原来向量的关系 矩阵代表的是旧坐标和新坐标之间…

AI代理和AgentOps生态系统的剖析

1、AI代理的构成&#xff1a;AI代理能够根据用户的一般性指令自行做出决策和采取行动。 主要包含四个部分&#xff1a; &#xff08;1&#xff09;大模型&#xff08;LLM&#xff09; &#xff08;2&#xff09;工具&#xff1a;如网络搜索、代码执行等 &#xff08;3&#x…

H3C DHCP快速配置指南

1 配置DHCP服务器动态分配IPv4地址 1.1 简介 本案例介绍配置接口工作在DHCP服务器模式&#xff0c;实现动态分配IPv4地址的方法。 1.2 组网需求 如1.2 图1所示&#xff0c;公司将交换机做为核心交换机&#xff0c;现在需要在核心交换机上划分3个VLAN网段&#xff0c;Ho…

uniapp开发微信小程序,选择地理位置uni.chooseLocation

<view click"toCommunity">点击选择位置</view>toCommunity() {const that thisuni.getSetting({success: (res) > {const status res.authSetting// 如果当前设置是&#xff1a;不允许&#xff0c;则需要弹框提醒客户&#xff0c;需要前往设置页面…