这是学习笔记的第 1857篇文章

从Oracle迁移到MySQL需要考虑的事情其实远比我们要理清数据类型转换这些技术细节要多,也更重要。

有两个问题需要前置考虑:

  1. 为什么要从Oracle迁移出去?
  2. 为什么要迁移到MySQL

如果解答了上述的两个问题,也就基本理顺了整个事情的脉络,我会本着基本客观的态度来说明。

问题1:为什么要从Oracle迁移出去?

这件事情从行业的实践来看(主要是说互联网行业),绝对不是先从技术可行性触发,而是从业务可行性来入手,归根结底,主要的出发点就两个字:成本

MySQL开源免费,更重要的是行业实践验证充分,所以它具有得天独厚的优势。阿里多年前的去IOE风风火火,俨然成为了行业的标杆。

成本的事情很微妙,三言两语说不清。举例来说,你可以使用Office来办公,当然你可能考虑买授权或者绿色版激活,但是如果使用WPS就是名正言顺的事情,当然功能上是和Office有一些差距,但是不会存在一些模糊的边界。

从业务的另一个维度来看,试想我们所接触的互联网行业,很多业务除了充值和钱相关的业务,其实对于数据完整性一致性的要求就会降低一个维度,很多时候钱能解决的问题都不是问题,比钱更重要的是什么,我觉得应该是安全,安全包括生命安全,行业安全,系统安全,这些绝对不允许出一些重大问题的,这些影响面太大,比如医院医生给患者开药的数据,这些影响面是很大的,一旦出问题很容易成为公众事件。而以金融级业务作为一个分界点,之上的是安全领域,之下的领域其实就是一些可选择的空间了,这些空间很大。选择商业的一个原因也在此,有技术兜底,这些成本对企业来说也是需要和厂商的绑定关系。稀里糊涂硬上,出了问题找不到专业的快速支持,那就悲剧了。

然后是开源定制,其实很多开源技术的开源协议是有差别的,我们采用开源技术也需要考虑这些协议的边界和适用范围。

所以到此需要明确的是:

1.成本因素需要权衡,绝对不是非黑即白的事情

2.迁移到MySQL其实不是终极解决方案,只是一种可选的方案

3.对开源技术积累足够,技术把控能力要强

4.迁移的本质是找到最适合的业务场景,而不是为了技术实现而实现

对于第4点,举个例子,Oracle从性能上是毫无疑问的,但是如果有海量的读请求,其实就不适合Oracle来扛了,当然也不适合用MySQL,可能Redis的方案会更好一些。

问题2:为什么要迁移到MySQL

要回答这个问题,其实我们的主线就是MySQL可以做什么。

第一还是成本,开源免费,方便定制,MySQL的可选方案可绝对不只有社区版,还有一系列的分支,比如Percona分支,MariaDB分支,存储引擎InnoDB,MyRocks等统统都是免费可选。

第二是MySQL效率高,足够轻量级。MySQL的效率从使用上来说,学习周期会很短,容易上手,而且对于系统的资源要求不高。

第三是水平扩展能力,把Oracle比作地铁,MySQL比作公交车会更容易理解,我们可以很轻松的加开公交专线,但是加开地铁线路那就完全不同了。我觉得这是迁移到MySQL的一个核心点,这也就是为什么很多互联网的MySQL规模动辄几百几千了,爆发式增长的业务,MySQL扩展能力了不是体现在MySQL数据库本身,而是对于架构的扩展性上,而这也就是为什么很多MySQL DBA比较贵的一个原因。

第四是复制,这是MySQL相比Oracle的一个亮点,如果需要做跨数据中心的复制,允许存在一定的延迟,使用MySQL原生的复制方案是一件很容易的事情,MySQL支持很多不同维度的复制方案。

第五是业务轻依赖,这个可以分为两个维度来说。一个是功能限制,一个是性能限制。这本身是MySQL功能和性能上的缺失,但是反而是一个优点因为要支撑分布式需求,需要业务对数据库的依赖要更轻巧一些,原本支持不好的存储过程就可以很自然的弱化了。

第六是开源带来的生态体系,开源红利带给企业的是很多的技术方案选择,让原本需要花钱买的事情变成了我们干我们用。

问题3:从Oracle迁移到MySQL需要考虑的事情

首先是架构的差异,在oracle和MySQL里面的差异还是比较大的,当然Oracle里面也是可以使用同义词的架构来实现类似MySQL的访问模型的。

数据类型的差异其实是比较具体的技术细节,我举一些补充的。

oracle里面的Null和空串都可以按照null来处理,但是MySQL里两者是不同的。

oracle表名,用户名都是有长度限制,在30个字符以内,在MySQL里长度要大得多,尤其是表名就需要注意了。

oracle里会默认统一按照大写来处理,MySQL里面默认是大小写敏感的。

对于MySQL类型在MySQL里需要考虑的细节较多,比如数值型,oracle里面number搞定,MySQL有一系列的数值类型可以选择,不建议大一统的big int适配所有需求。

要更清晰的回答注意事项,可以归类为一个问题:MySQL相比Oracle少了些什么?

性能上肯定有差异,我们主要理一理功能上的。比较的原则不是说oracle有一定要MySQL有,而是从一些使用场景上来说更好的使用特性。

  1. 存储过程支持有限,这是很多企业的技术债,处理好了是坦途,处理不好是大坑。比如存储过程,硬要用存储过程调用来对接,后期后患无穷。
  2. 没有同义词
  3. 没有db link,这个特性MySQL里不支持其实是件好事,杜绝了那种跨库关联的需求。
  4. 没有sequence,这个MySQL的自增列完全可以弥补。
  5. 没有物化视图,难以实现增量刷新的需求。
  6. 分区表有,但是很少用
  7. 优化器薄弱,多表关联,Hash Join在MySQL里还是一个弱项。
  8. 索引的差异,覆盖索引的实现两者差异也很大。
  9. 绑定变量的性能差异不大,Oracle里面敏感的绑定变量问题在MySQL里不是问题。
  10. 性能工具,MySQL里面的性能工具还是比较少的,而且粒度和效果有限。

小结一下:

迁移的本质是找到最适合的业务场景,而不是为了技术实现而实现

oracle 同义词_Oracle迁移到MySQL,必须要搞明白这几个问题相关推荐

  1. 利用NavicatPremium把Oracle迁移到MySQL

    概述 由于工作的需要,需要将原先用的Oracle表数据迁移到MySQL,步骤其实很简单,这里用的是Navicat Premium12 操作步骤 打开Navicat Premium12 分别创建orac ...

  2. Oracle 迁移至 MySQL、PG等分布式数据库,可能遇到的12个典型问题

    近年来,分布式数据库逐渐占据了OLTP领域较大的市场,尤其在互联网领域,MySQL.PG等分布式数据库的应用非常广泛.随着软件国产化.自主可控战略的提出,非互联网企业也开始考虑数据库转型,很多企业原本 ...

  3. oracle迁移到mysql工具_oracle数据库想迁移到mysql上 有什么方法或者工具吗

    Manager进程:需要源端跟目标端同时运行,主要作用是监控管理其它进程,报告错误,分配及清理数据存储空间,发布阈值报告等 Extract进程:运行在数据库源端,主要用于捕获数据的变化,负责全量.增量 ...

  4. oracle迁移mysql验证_ORACLE 迁移MYSQL 随笔

    1.把服务器上的ORALCE 数据库导成DMP,然后导入本机的临时库 2.先把ORACLE 表中的DATE 改为TIMESTAMP; a.先建立个表 create table type_table_i ...

  5. Oracle 迁移至Mysql

    **吴海存,**10g / 11g / 12c OCM,Oracle Exadata / Golden Gate专家,曾于Amazon和Oracle公司担任全球业务资深DBA,目前供职于中国农业银行, ...

  6. navicat premium相关应用(将oracle数据库迁移到mysql等)

    navicat premium navicat premium连接到oracle数据库:http://blog.csdn.net/zjx86320/article/details/49464251: ...

  7. Oracle迁移到MySQL性能下降的注意点

    背景:最近有较多的客户系统由原来由Oracle改造到MySQL后出现了性能问题CPU 100%,或是后台的CRM系统复杂SQL在业务高峰的时候出现堆积导致业务故障.在我的记忆里面淘宝最初从Oracle ...

  8. MySQL与Oracle的数据迁移注意事项,另附转换工具链接

    将数据从MySQL迁移到Oracle的注意事项 1. 自动增长的数据类型处理 MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一 ...

  9. oracle数据迁移到mysql

    Kettle7.0实现oracle到mysql数据库迁移(批量全量导入) https://blog.csdn.net/j1231230/article/details/80525922 Kettle ...

最新文章

  1. java数据结构库函数_Java8 内置函数(api)总结
  2. linux:ubantu中pycharm专业版安装
  3. python做abaqus后处理_python进行abaqus后处理的二次开发,我想提取odb文件中的nodeSet,结果总提示Keyerror,请各位大神指教。...
  4. [机器学习] 模型评价参数,准确率,召回率,F1-score
  5. 飘逸的python - 命令行漂亮的显示json数据
  6. [Python] Marshmallow QuickStart
  7. Android 系统性能优化(23)---绘制性能优化
  8. jQuery补充及Django基本使用_Day18
  9. Latex 资料汇总(持续更新)
  10. 2019118_四个化学数据分析(1)
  11. java treeset 降序,Java TreeSet,Collections使用
  12. 类库从自带的配置文件中获取信息(DLL文件 获取 DLL文件自带的配置信息) z...
  13. 阿里秒挂,疯狂复习半个月,拿下美团offer(后台开发JAVA岗)
  14. 【python教程入门学习】第一个Pygame程序
  15. 微信公众号运营数据分析(二):内容分析讲解
  16. 请问我这段多线程代码为什么会死机?
  17. 用C语言计算手机的九宫格图案解锁总共能绘出多少种图案
  18. 2020年的创业趋势是什么?未来适合什么行业钱赚的多?[附十六大趋势]
  19. 《Deep Modular Co-Attention Networks for Visual Question Answering》论文翻译
  20. android中的评分条(ratingBar)

热门文章

  1. SAP UI5 应用开发教程之七 - JSON 模型初探
  2. SAP Spartacus 如何根据 page layout 获得对应支持的 slots
  3. Angular 应用 bootstrapModule 映射的 app Component 的初始化逻辑
  4. SAP Spartacus 404 Not found页面的显示机制 - canActivateNotFoundPage
  5. Angular如何判断某个DOM节点包含Directive
  6. Could not load JDBC driver class [com.mysql.jdbc.Driver]
  7. SAP UI5 StandardListItem和ObjectListItem的区别
  8. where is SAP CRM One Order event callback registered
  9. Hybris Commerce里的持久层
  10. ABAP开发环境语法高亮的那些事儿