数据库迁移 | Oracle数据迁移方案之技术两三点

news2024/11/24 15:43:38

今年Oracle似乎又火了,火得要下掉,目前中国大概有240+数据库企业,在国产信创的大趋势下,一片欣欣向荣,国库之春已然来临。到今天为止,Oracle依旧是市场份额最大的数据库,天下苦秦久矣,Oracle在国内的这份市场,未来2-3年内注定会被瓜分得必须剩点渣,数据库市场格局也会基本定型。当年如火如荼的上,现在吹枯拉朽的下,小编君有种半夜从被窝里抓起来去扛炸药包的感觉,这么多年下来,去O才刚刚开始。

去O中数据迁移肯定是无法避免的,Oracle数据迁移的复杂度,在小编君接触的所有数据库里,应该算是最高的,庞大的功能对象和数据类型先不说,单就增量/全量数据同步上,就可以出一部专辑。我司的DBMotion数据传输迁移平台已经支持Oracle/MySQL/Mongo/openGauss/PostgreSQL的全系列,就目前中国的市场而言,Oracle和MySQL的需求量还是最大的,我们在支持这两款数据库的过程中也明显感觉,只要深入到细节,真是隔库如隔山。小编在这里列一些具体的技术点,各自体会。

1 增量数据获取

Oracle增量数据获取方式有很多,但实在不能忍受搞一堆的trigger,或者logminer那种蹩脚的dump+查表的方式,我们是直接解析的redo和归档文件,这是一件枯燥的逆向工程,自己组合数据类型,设计各种事务场景, dump分析日志输出,猜测验证日志格式,最终的效果就是速度快,实时性高, 50M/秒的redo量轻松应对,MySQL这块,我们是基于binlog的数据转换,这个文件的结构内容要清晰,精简太多。

2 事务边界

Oracle的redo日志一般是每隔3秒,或者用户commit时候刷到redo文件的,哪怕你不commit,也是有可能写到redo的,所以解析redo文件时,这个事务到底是回滚还是提交,你是不知道的,你得维护事务状态来应对即将到来的提交或回滚,包括大事务的回滚,而MySQL的binlog里面,就只有commit的事务,回滚事务是不记录binlog的,所以你只管往前解就可以,不用处理中间数据,不用考虑回滚。

3 事务的穿插混合

Oracle在10G开始就有了group commit,多个应用会话的事务在redo文件里是相互揉杂在一起的,你去解析的时候会发现,事务A开始了,操作了,下一条数据居然是事务B的,然后又是事务A的,而MySQL的binlog里面,每个事务一定是连成片的,绝对不交叉,排列得干净整齐,所以在事务的处理逻辑上Oracle需要更多的if else和结构设计。

4 列模式还是行模式

在数据库日志里面是存入行还是列?什么意思?就是你更新一行数据的A字段,日志里面是仅仅记录key+A字段的前后映像,还是将整行都记录进去?好像行业惯例里面,MySQL是全rows模式,Oracle基本是列模式,你很难扭转,这样在拼数据的完整映像时,Oracle就特别费劲,有时可能要反查源库。

5 神奇的RAC多日志流顺序

Oracle有种架构,叫RAC,多个节点,每个节点都能读写数据,现在MySQL界的Auroa架构只能实现一写多读,那么问题来了,你需要将多个Oracle RAC节点的日志流进行全局排序,保证数据更新的顺序,这个排序分批进行,不断前推,也要考虑部分节点事务未到达的等待窗口,想一想是不是和Flink多通道的CheckPoint barrier高水位有点相似了?

6 redo日志切换

Oracle的redo文件是固定的,循环覆盖使用,历史日志归档成archive文件,为了增量实时性,我们是直接解析online redo的,但当业务压力激增时,redo会击穿,你正在解析的数据可能会被抹掉,这是需要很精巧的机制去处理归档和redo的文件解析衔接,包括跨redo边界的事务处理,也有很多细节,MySQL的binlog是连续追加的,不存在这些问题。

7 基于rowid的全量抽取分片

在全量数据的抽取上,由于Oracle单表体量较大,需要考虑一些地方特色的加速方式,比如说同样是多线程抽取表数据,充分发挥并行IO的能力,每个线程获取独立的segment数据,自然是最快的,但是Oracle是堆表,根据Primary Key出来的范围数据,物理上不一定是连续的,也就是说IO层面在多线程上会交织影响的,这里有种方法,就是根据伪列rowid来计算分片边界,至少从OS角度,这个分片在物理上是连续且无交集的,pkrange和rowidrange的跑分结果如下,同样的环境,差距还是挺明显:


--fetch数据,并load加载到目标数据库,8并发,fetch size 40000笔
Bigoracle,81920000 rows,35480MBytes,pkrange parallel 8 process, ETL take 812 seconds!!!
Bigoracle,81920000 rows,35480MBytes,rowidrange parallel 8 process, ETL take 602 seconds!!!

--仅仅fetch数据,没有load操作,8并发,fetch size 40000笔

Bigoracle,81920000 rows,35480MBytes,pkrange parallel 8 process, ETL take 333 seconds!!!
Bigoracle,81920000 rows,35480MBytes,rowidrange parallel 8 process, ETL take 167 seconds!!!

rowid伪列的另外一个意义就是你可以认为Oracle所有的表都是有唯一性的,当我们处理MySQL的无主键/唯一键表时,困难就不止多了一点点。

以上只是Oracle迁移的冰山一角,可以看出,要高效处理Oracle的数据迁移,工程复杂度是挺高的。我们当初是先做的Oracle,大概花了1年多的时间,后面才做的MySQL,感觉如进了天堂一般,增量日志对接三个星期就拿下了,没任何悬念。当然解析出来的数据如何应用到目标端,同构异构,又是另外回事了。目前,我们会支持两种模式,一种是支持主流数据库的端到端;另一种是对接Kafka,设定好标准的数据格式,供下游系统订阅消费。

Oracle的历史包袱是很重的,很多业务开发重度依赖了O的各种特性,如dblink,存过包,分析函数,全局临时表,还有透明加密等等。这些功能不是在下一任里实现,就是到应用开发侧实现。在小编接触的去O中,大致分为3种,1是开发新系统,直接不用O,这是最开心的。2是借着系统重构和升级,将以前一些O系功能改造优化掉。3就是硬替,这种只发生在SQL写的很标准,基本把数据库当存储用的场景,否则没法执行。去O肯定是个持久战,也衷心希望,DBMotion能为去O贡献点绵薄之力!

本文作者:罗春,沃趣科技联合创始人&产品总架构师

Squids(squids.cn)是多云时代的数据库云服务提供商,基于公有云基础资源,提供云上RDS,云备份,云迁移,SQL窗口等企业级数据库服务功能,帮助企业快速构建云上数据库融合生态。

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

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

相关文章

关于使用keil瑞萨RA4M2踩过的坑

一、之前在rasc添加的组件不能删除。 下面在rasc添加ThreadX,不只是RTOS,其他组件也出现这种情况。 当去掉组件不使用,重新配置。但是组件还是显示在软件包,导致编译出错。 解决方式,自己琢磨发现: 找到工…

腾讯视频技术团队偷懒了?!

👉腾小云导读 PC Web 端、手机 H5 端、小程序端、App 安卓端、App iOS 端......在多端时代,一个应用往往需要支持多端。若每个端都独立开发一套系统来支持,将消耗巨大的人力和经费!腾讯视频团队想到一个“偷懒”的方法——能不能只…

共建智慧工厂物联网平台方案 | 6.10 IoTDB X EMQ 主题 Meetup 回顾

6 月 10 日,IoTDB X EMQ 智慧工厂主题 Meetup 在深圳成功举办。工业物联网时序数据库研发商天谋科技、物联网数据基础设施软件供应商 EMQ 的两位技术大牛,针对多行业制造流程中数据传输、故障感知、决策执行等常见难题,通过数据基础设施平台的…

更智能、更强大:OpenAI发布升级版gpt-3.5-turbo-0613/16k速度提升,长度飙升4倍

OpenAI开发者平台最近推出了两个引人注目的GPT升级版本:gpt-3.5-turbo-0613和gpt-3.5-turbo-16k。这些新版本带来了一系列令人兴奋的功能和增强,为开发者提供了更加灵活和强大的自然语言处理工具。本文将为您介绍这两个版本的主要特点和优势。 gpt-3.5-t…

vue使用外部字体自定义LCD字体(晶管体)

大屏监控中常用到液晶字体效果,如下图所示: 一、下载字体格式 1、下载地址【Techno > LCD fonts | dafont.com】 二、解压字体 1、下载后,解压后都是.ttf文件,在Font Squirrel (这个地址打开,直接可以…

Multi-headed Self-attention(多头自注意力)机制介绍

对于输入的序列 来说,与RNN/LSTM的处理过程不同,Self-attention机制能够并行对进行计算,这大大提高了对特征进行提取(即获得)的速度。结合上述Self-attention的计算过程,并行计算的原理如下图所示&#xff…

储存卡格式化,分享3个正确方法!

Dam是个摄影师,经常使用储存卡存储各种照片、视频。正好他明天又要出外景,但害怕内存不够,想把储存卡格式化,又担心自己操作失误。因此求助如何正确格式化储存卡。 储存卡为我们存储文件等带来了诸多便利。有时候,我们…

无人机上仅使用CPU实时运行Yolov5(OpenVINO实现)(下篇)

​上期中我们讲了Yolov5的前两节环境配置及简单运行,在本期中我们带来后面两节在不同处理器下的实验数据及如何训练自己的模型。​ 三、在不同处理器上的延迟与效果 为了查看Yolov5在不同设备上的延迟与效果,下面我们对Inter的i3、i5、i7三种处理器在同…

「深度学习之优化算法」笔记(三)之粒子群算法

1. 粒子群算法简介 粒子群算法(Particle Swarm Optimization,PSO)是一种模仿鸟群、鱼群觅食行为发展起来的一种进化算法。其概念简单易于编程实现且运行效率高、参数相对较少,应用非常广泛。粒子群算法于1995年提出,距今&#xff…

新世界-旧世界

以下内容是这两天朋友问答形成的一些观点,堆成一篇文章。看似没有关联性,但你仔细品味,你会感觉到它们其实讲的是一个事。至于是一个啥事,我不说,你们自己猜。 (1) 今年年初看见篇文章&#xff…

前端vue仿京东天猫简单好用的瀑布流瀑布流式布局列表组件waterfall

前端vue仿京东天猫简单好用的瀑布流瀑布流式布局列表组件waterfall&#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13046 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- proList: 条目数组数据 goProDetail:条目点击事…

vue路由的两种模式 hash与history

文章目录 vue路由是什么&#xff1f;Hash 模式Hash具体的原理如下&#xff1a;Hash 模式的好处缺点 History 模式实现 History 模式的原理如下&#xff1a;History 模式的好处缺点 vue路由是什么&#xff1f; Vue 路由是 Vue.js 框架提供的一种机制&#xff0c;用于实现单页面…

驱动开发:内核解锁与强删文件

在某些时候我们的系统中会出现一些无法被正常删除的文件&#xff0c;如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉&#xff0c;而所谓的解锁其实就是释放掉文件描述符&#xff08;句柄表&#xff09;占用&#xff0c;文件解锁的核心原理是通过调用ObSetHandleAttri…

【科学文献计量】关于使用metaknowledge读取文献后转化字典结构报错PD问题的解决方式

关于使用metaknowledge读取文献后转化字典结构报错PD问题的解决方式 1 问题说明2 问题探索3 问题解决4 数据核实1 问题说明 在进行文献下载完毕后,使用metaknowledge读入文献时候是正常的,但是要通过RC.makeDict()方法转化为字典结构,却发生了PD报错问题(KeyError: PD),如…

基于SpringBoot+vue的在线考试系统设计和实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

阿里云新人专享是什么意思?是新注册用户还是新用户或者老用户?

阿里云2023年促销活动中云服务器购买条件大多都指定为新人专享&#xff0c;有的用户购买提示“不满足购买条件”&#xff0c;有的虽然能买&#xff0c;但是点击购买之后的价格却跟活动显示价格有很大的出入&#xff0c;活动中的云服务器会提示“新人专享”&#xff0c;那么什么…

Python爬取城市天气数据,并作数据可视化

1.爬取广惠河深2022-2024年的天气数据 import requests # 发送请求要用的模块 需要额外安装的 import parsel import csvf open(广-惠-河-深天气.csv, modea, encodingutf-8, newline) csv_writer csv.writer(f) csv_writer.writerow([日期, 最高温度, 最低温度, 天气,…

EEPROM 磨损管理算法

这里写目录标题 前言需求结构局限性代码示例 前言 …最近工作上有用到EEPROM&#xff0c;在我的应用中需要一分钟一次的擦写频率&#xff0c;按照设备一天工作16h&#xff0c;十年的设备设计寿命来计算&#xff0c;大概要擦写300万次。超出了一般的EEPROM擦写循环次数100万。 …

【前端 - CSS】第 17 课 - CSS 特性

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、CSS 三大特性 2.1、继承性 2.2、层叠性 2.3、优先级 3、总结 1、缘起 CSS 是一种用于样式化网页的语言&#xf…

无代码开发smardaten与Power Platform详细对比

文章目录 前言&#xff1a;亟待转型的软开创业者什么是低/无代码居高不下的企业级软件搭建成本1. 开发周期较长2. 在需求明确、软件修改、系统集成等方面存在多种卡点3. 数据管理混乱 无代码/低代码开发&#xff0c;时代的潮流无代码平台 smardaten1. smardaten 简介2. smardat…