Oracle迁移到MySQL
Oracle迁移到MySQL业务需要全面改造适配,数据库对象和业务SQL语法需要一对一映射分析如何改写,根据业务使用实际情况评估改造适配成本较高。
目前,已有数据库产品能力缺少自动化迁移工具,需要依赖生态产品能力,比如云和恩墨数据迁移能力。
- 数据转换工具【自动将源端Oracle对象转换为MySQL数据类型,完成映射关系】
- 数据迁移工具【存量数据和增量数据迁移】
- 数据校验工具【校验数据一致性,包括行数,主键、具体数据内容校验等】
适配项和流程
1、业务分析与兼容性评估
前期需要评估的内容主要包括数据类型、各种数据库对象、SQL语法、账号权限、第三方依赖以及生态工具兼容性。
- 数据类型兼容性:
Oracle和MySQL之间的数据类型差异,确保数据类型能够准确映射。如:
NUMBER(p, s) (Oracle)->DECIMAL(p, s) (MySQL)
VARCHAR2(n) (Oracle)->VARCHAR(n) (MySQL)
CLOB (Oracle)->TEXT (MySQL)
DATE (Oracle)->DATETIME (MySQL)
BLOB (Oracle)->BLOB (MySQL)
BOOLEAN (Oracle)->TINYINT(1) (MySQL)
注:除了数据类型本身,还需要考虑数据的精度、长度、默认值和约束等方面的差异
- SQL语法差异:
评估业务应用SQL语法差异,特别是复杂查询(多表关联查询)、存储过程、触发器等。
- 存储过程和函数:
迁移Oracle的PL/SQL存储过程和函数到MySQL的存储过程和函数,需要修改或者重写。
- 触发器:
评估并迁移触发器的实现方式,确保在MySQL中能够实现相同的业务逻辑。
- 视图:
检查视图定义的兼容性,确保视图在MySQL中能够正确创建和使用。
- 索引和约束:
迁移验证索引、主键、外键、唯一约束等,确保数据完整性和性能。
- 性能优化:
查询性能优化,评估索引设计或优化查询以适应MySQL的性能。
- 权限和安全:
用户权限管理和安全机制差异,MySQL中需要重新设置相应的权限。
- 事务管理:
检查事务管理和隔离级别的差异,确保在MySQL中能够正确处理事务。
2、应用程序语法改造,工具和三方依赖替换
根据第一部分业务使用Oracle的情况评估改造的内容项,确保每一项内容可以准确通过MySQL方案实现承接映射;另外,评估业务中使用到的工具和第三方依赖是否支持MySQL语法,如果不满足需要替换。修改应用程序代码中的数据库连接、查询和其他数据库相关操作,以适应MySQL语法。
3、数据迁移、数据校验
实现数据类型、数据结构转换后,即可进行数据的迁移,数据迁移步骤分为存量和增量两个阶段。
存量数据即可验证对象兼容性、数据格式兼容性等基本内容。增量数据迁移基本是在验证切换上线流程中得到验证。存量和增量数据一致性校验逻辑需要验证。
4、兼容性/性能测试验证
业务应用适配改造后,通过读写目标端数据对象内容进行全面的测试,包括兼容性测试、功能测试(业务校验逻辑)、性能测试(结合参数调优、优化索引等)和回归测试,确保迁移后的系统能够正常运行。
5、上线切换过程和回滚方案
完成以上功能、性能以及业务逻辑验证后,准备迁移切换上线方案。如果迁移过程顺利,可以实现一次性完成迁移并切量,如果过程中遇到数据不一致问题,需要用回滚回切方案。
6、生产运营运维、文档与培训
- 备份和恢复
备份和恢复策略配置管理,MySQL能够实现可靠的备份和恢复机制。
- 高可用
自动容灾切换管理和自愈能力
- 监控告警
日常巡检、监控告警处理
- 文档和培训
数据库开发指南和运维文档,并对运维和开发人员进行培训,确保迁移后平稳高效运行。
迁移工具的选择
1、商业工具
Oracle SQL Developer
功能:Oracle官方提供的免费工具,支持将Oracle数据库迁移到MySQL。
特点:易于使用,提供图形化界面,适用于小型和中型数据库迁移。
MySQL Workbench
功能:MySQL官方提供的工具,支持数据库设计和迁移。
特点:提供迁移向导,可以从Oracle迁移到MySQL,适用于中小型项目
AWS Database Migration Service (DMS)
功能:亚马逊云服务提供的数据库迁移服务,支持多种数据库之间的迁移,包括Oracle到MySQL。
特点:支持实时数据迁移和数据同步,适用于大型数据库和云迁移项目。
云和恩墨MKT(Migration Kit Tool)
云和恩墨的MKT(Migration Kit Tool)是一款专门设计用于数据库迁移的工具,旨在帮助企业实现高效、可靠的数据库迁移。
1、多数据库支持
2、自动化迁移
3、数据校验和一致性检查
4、零停机迁移
5、性能优化
6、可视化界面
2、开源工具
Ora2Pg【GPL3协议】
功能:开源的Oracle到PostgreSQL迁移工具,但也支持迁移到MySQL。
特点:支持数据、表结构、索引、视图、触发器等的迁移,适用于技术熟练的用户。
Apache Sqoop
功能:开源工具,用于在Hadoop和关系数据库之间传输数据。
特点:支持从Oracle导出数据到MySQL,适用于大数据环境中的数据迁移。
Oracle是商业数据库,事务日志格式对外是黑盒,增量数据迁移依赖事务日志解析过程,实现难度较大。
相关文章:
Oracle迁移到MySQL
Oracle迁移到MySQL业务需要全面改造适配,数据库对象和业务SQL语法需要一对一映射分析如何改写,根据业务使用实际情况评估改造适配成本较高。 目前,已有数据库产品能力缺少自动化迁移工具,需要依赖生态产品能力,比如云和…...
.Net Core笔记知识点(跨域、缓存)
设置前端跨域配置示例: builder.Services.AddCors(option > {option.AddDefaultPolicy(policy > {policy.WithOrigins(originUrls).AllowAnyMethod().AllowAnyHeader().AllowCredentials();});});var app builder.Build();app.UseCors(); 【客户端缓存】接…...
【Vue】在Vue3中使用Echarts的示例 两种方法
文章目录 方法一template渲染部分js部分方法一实现效果 方法二template部分js or ts部分方法二实现效果 贴个地址~ Apache ECharts官网地址 Apache ECharts示例地址 官网有的时候示例显示不出来,属于正常现象,多进几次就行 开始使用前,记得先…...
每日Attention学习18——Grouped Attention Gate
模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Grouped Attention Gate (GAG) 模块作用 轻量特征融合 模块结构 模块特点 特征融合前使用Group…...
Qt —— 加载百度离线地图、及简单绘图(附源码)
效果 说明 软件代码已下载了某区域的离线瓦片地图,通过百度离线api进行调用的地图效果。 源码 void PointMapTEST...
124,【8】buuctf web [极客大挑战 2019] Http
进入靶场 查看源码 点击 与url有关,抓包 over...
源路由 | 源路由网桥 / 生成树网桥
注:本文为 “源路由” 相关文章合辑。 未整理去重。 什么是源路由(source routing)? yzx99 于 2021-02-23 09:45:51 发布 考虑到一个网络节点 A 从路由器 R1 出发,可以经过两台路由器 R2、R3,到达相同的…...
c#中lock的经典示例
lock 是 C# 中的一种用于同步线程执行的机制,它帮助确保多个线程在访问共享资源时不会发生冲突或数据损坏。其作用是通过给临界区(即多线程访问共享资源的代码段)加锁,使得在同一时刻只能有一个线程进入执行该代码段。 1、lock 的…...
python编程-集合内置函数和filter(),集合常见操作
在Python中,列表、集合、字典是三种常用的数据结构,它们各自拥有一些内置函数,用于执行各种操作。 一、列表的常用内置函数 #1、append(obj): 在列表末尾添加新的对象。list_a [1, 2, 3] list_a.append(4) print(list_a) # 输出: [1,…...
蓝桥杯Java之输入输出练习题
题目 1:多组AB(基础版) 题目描述: 输入多组数据,每组数据包含两个整数 A 和 B,计算它们的和。输入以 文件结尾(EOF) 结束。 输入格式: 每行包含两个整数 A 和 B&#x…...
FPGA的IP核接口引脚含义-快解
疑问 手册繁琐,怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌,手册确实比较详细但繁琐,如何快速知晓该部分信息,涛tao道长给你们说,简单得很,一般新入门的道友有所不知,往往后面…...
Linux的循环,bash的循环
Linux的循环,bash的循环 在 Linux 系统中,Bash 循环是最常用的循环实现方式(Bash 是 Linux 默认的 Shell),但广义上“Linux 的循环”可能涉及其他 Shell 或编程语言的循环结构。以下是 Bash 循环的详细解析及其在 Linux 环境中的…...
Qwen2-VL-2B-Instruct 模型 RK3576 板端部署过程
需要先在电脑上运行 RKLLM-Toolkit 工具,将训练好的模型转换为 RKLLM 格式的模型,然后使用 RKLLM C API 在开发板上进行推理。 在安装前先查看板端的内存容量,和自己模型占用大小比较一下,别安装编译好了不能用。 这里我就是先尝试…...
如何设计光耦电路
光耦长这样,相信小伙伴们都见过,下图是最为常用的型号PC817 怎么用?我们先看图,如下图1: Vin为输入信号,一般接MCU的GPIO口,由于这里的VCC1为3.3V,故MCU这边的供电电源不能超过3.3V…...
ADC模数转换器概念函数及应用
ADC模数转换器概念函数及应用 文章目录 ADC模数转换器概念函数及应用1.ADC简介2.逐次逼近型ADC2.1逐次逼近型ADC2.2stm32逐次逼近型2.3ADC基本结构2.4十六个通道 3.规则组的4种转换模式3.1单次转换,非扫描模式3.2连续转换,非扫描模式3.3单次转换…...
DFX(Design for eXcellence)架构设计全解析:理论、实战、案例与面试指南*
一、什么是 DFX ?为什么重要? DFX(Design for eXcellence,卓越设计)是一种面向产品全生命周期的设计理念,旨在确保产品在设计阶段就具备**良好的制造性(DFM)、可测试性(…...
【LeetCode】152、乘积最大子数组
【LeetCode】152、乘积最大子数组 文章目录 一、dp1.1 dp1.2 简化代码 二、多语言解法 一、dp 1.1 dp 从前向后遍历, 当遍历到 nums[i] 时, 有如下三种情况 能得到最大值: 只使用 nums[i], 例如 [0.1, 0.3, 0.2, 100] 则 [100] 是最大值使用 max(nums[0…i-1]) * nums[i], 例…...
Doris更新某一列数据完整教程
在Doris,要更新数据,并不像mysql等关系型数据库那样方便,可以用update set来直接更新某个列。在Doris只能进行有限的更新,官方文档如下: UPDATE - Apache Doris 1、使用Doris自带的Update功能 描述 该语句是为进行对数据进行更新的操作,UPDATE 语句目前仅支持 UNIQUE…...
《云夹:让书签管理变得轻松又高效》
在当今数字化的生活与工作场景中,我们畅游于网络的浩瀚海洋,每天都会邂逅各式各样有价值的网页内容。而如何妥善管理这些如繁星般的书签,使其能在我们需要时迅速被找到,已然成为众多网络使用者关注的焦点。云夹,作为一…...
Microsoft Fabric - 尝试一下在pipeline中发送请求给web api(获取数据和更新数据)
1.简单介绍 Microsoft Fabric中的Pipeline支持很多种activity,分成数据转换和控制流两种类型的activitly。 这边将尝试一下发送web请求的activity,要做成的pipeline大概如下图所示, 上图中有4个Activity,作用如下 Web - 从一个…...
Ruby:从宝石到编程语言的奇妙联系(中英双语)
Ruby:从宝石到编程语言的奇妙联系 在珠宝世界中,红宝石(Ruby)是一种象征热情、力量和高贵的珍贵宝石;而在编程世界中,Ruby则是一门灵活、优雅且富有创造力的编程语言。那么,这两者究竟有何联系…...
如何对java 源码进行分析, 统计出每个方法被引用的次数
使用 JavaParser 统计源码中每个方法的引用次数是一个可行且有效的方法。JavaParser 是一个用于解析 Java 源代码并生成抽象语法树(AST)的库,它提供了丰富的 API 来遍历和操作 AST。下面是一个详细的指南,说明如何使用 JavaParser…...
数据完整性与约束的分类
一、引言 为什么需要约束?为了保证数据的完整性。 (1)数据完整性 数据完整性指的是数据的精确性和可靠性。 为了保证数据的完整性,SQL对表数据进行额外的条件限制,从以下四方面考虑: ①实体完整性&…...
docker安装nacos2.x
本文为单机模式,非集群教程,埋坑 nacos2.x官方强制条件 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。 64 bit JDK 1.8 Maven 3.2.x 环境介绍 centos 7 maven 3.9.9 jdk 17 nacos 2.3.1 1. 拉取docker镜像 d…...
git代理设置
在 Git 中,可以通过以下命令查看当前设置的代理配置: 查看 HTTP 代理 git config --get http.proxy查看 HTTPS 代理 git config --get https.proxy查看全局代理设置 如果你设置了全局代理,可以通过以下命令查看: git config …...
python编程-内置函数bin(),bool(),abs() ,all(),any(),ascii(),max(),min() 详解
1、bin()函数用于将整数转换为其二进制字符串表示。并返回一个以0b开头的字符串,表示该整数的二进制形式。 # 十进制数转换为二进制字符串 decimal_number 42 binary_string bin(decimal_number) print(f"Decimal {decimal_number} is {binary_string} in b…...
GB/T28181 开源日记[8]:国标开发速知速会
服务端源代码 github.com/gowvp/gb28181 前端源代码 github.com/gowvp/gb28181_web 介绍 go wvp 是 Go 语言实现的开源 GB28181 解决方案,基于GB28181-2022标准实现的网络视频平台,支持 rtmp/rtsp,客户端支持网页版本和安卓 App。支持rts…...
6 maven工具的使用、maven项目中使用日志
文章目录 前言一、maven:一款管理和构建java项目的工具1 基本概念2 maven的安装与配置(1)maven的安装(2)IDEA集成Maven配置当前项目工程设置 maven全局设置 (3)创建一个maven项目 3 pom.xml文件…...
js滚动到页面最底部
setTimeout(()> { //延后执行,等页面渲染结束let container document.querySelector(.raise-flag-content); //找到当前divif (container) {container.scrollTop container.scrollHeight - (container.clientHeight - 400 );}})container.scrollTop container…...
Node.js包管理工具npm
目录 什么是 npm npm 主要功能 安装配置 npm 环境 package.json 版本范围规则 使用 npm npm 版本和帮助命令 npm 包相关命令 安装包 卸载包 升级第三方包 升级自己开发的包 查看已安装的包 清除缓存和修复 package.json 相关 运行命令脚本 全局配置 npm 包发布…...
