`
vipshichg
  • 浏览: 261682 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

从Mysql转到Oracle前需了解的50件事

阅读更多

原文:zillablog

Robert Treat

  • 1、有些人说Oracle没有限制,实际上他们说得可能是Oracle不支持LIMIT语法。不过可以rownum虚列来实现,不过会更加麻烦。
  • 2、 Oracle不支持偏移(offset)语法。
  • 3、 Oracle的复制功能可能比MySQL更加健壮,不过也更加难以配置。
  • 4、 对于多个Master类型的系统,大部分用户都希望你使用更加复杂也更加昂贵的Oracle RAC(虽然可能NDB更加健壮)。
  • 5、 Oracle的分区功能非常健壮,但是它不是内置的,并需要专门为此付费(分区功能是在Enterprise Edition里面是内置的)。
  • 6、 在Linux/Unix上,Oracle并不象Mysql那么方便,很多Linux/Unix发行版默认就会自带Mysql。(我对这一点的理解与翻译可能都有偏差)
  • 7、 INSERT … ON DUPLICATE KEY UPDATE语法将不再可用,不过你需要学习更加复杂(但是符合SQL标准)的MERGE语法。
  • 8、 Oracle的ROLE架构与MySQL有很大差异,无法再使用root角色来完整所有工作。(不过Sys用户的权限仍然与root相差无几,只是为了安全着想,不建议这么使用了)。
  • 9、Role 帐户与特定的Schema联系在一起(反之也一样),类似于MySQL数据库中的Database概念。(Role并不完全与Schema联系在一起,系统有一些固定的role,这些Role包含部分已经定义好的权限集(privilege set),也可以再自定义部分新的role)。
  • 10、 事实上,丢弃一切已知的关于连接访问的设置吧,Oracle使用一套全新的系统来处理连接访问。
  • 11、 支持全文搜索,不过语法完全不同。
  • 12、 Oracle的文档非常丰富,不过,如果需要Oracle的专业服务,你需要拥有Metalink的访问权限。
  • 13、在非数据库社区很难找到相关的支持信息(例如,PHP论坛或者网站开发者的网志)
  • 14、自增功能可以通过Trigger与sequence对象来实现。
  • 15、 大量日常熟悉的SHOW命令将不再可用,想要获取系统信息,需要你学习Oracle的数据字典(或信息Schema),深入一点的还需要学习Oracle动态性能。
  • 16、 MySQL为信息Schema添加了多个非标准的扩展,在Oracle中将很难找到这些信息。
  • 17、为了管理好生产系统与非生产系统的的转入转出,需要你深入理解Oracle的授权规则。
  • 18、大体上讲,Oracle的数值类型更加简单,如果你确实需要类似于MySQL的多粒度的数值类型,就需要你自己来实现它,或者通过制定不同的精度(Number(n,x))来实现。
  • 19、 在Oracle中,表可以做到无限制的增长,但是大部分情况下,都建议通过表空间(tablespace)来对此作细粒度的管理。
  • 20、 Oracle不支持ALTER TABLE ADD COLUMN BEFORE|AFTER,也就是不支持自己制定字段的位置。(我们这边之前有部分应用对字段顺序有严格地要求,不过,从理论上讲,这是业务设计的问题,主要是其大部分情况下都是使用select *或者insert table values来处理数据,而不是在select,insert中指定具体需要处理的字段名列表)。
  • 21、如果你习惯于通过图形界面(GUI)来管理数据库,你一定会喜欢上Oracle,但是如果你倾向于使用类似与Mysql 命令行的客户端,你可能会对sql*plus这个客户端工具感到失望(需要一个习惯的过程,sql*plus还是蛮好用的)。
  • 22、 Oracle的数据校验比Mysql更加严格,依赖于MySQL的模糊规则可能会导致应用无法运行。MySQL接受”0000-00-00″来作为日期类型的值就是个典型的例子。
  • 23、虽然Oracle的PL/SQL功能更强,但是它不支持标准的PSM语言来编写存储过程,因此你可能不得不学习它的非标准的语法。
  • 24、Oracle不支持ENUM数据类型,只能通过使用基于文本的check约束或者创建外键关联表来实现。
  • 25、Mysql的一些更加神秘的表类型(例如,blackhole,csv),在Oracle中找不到相对应的功能。 (不清楚blockhole是何种类型,不过Oracle的外部表(external table)确实是支持csv格式的,在11g版本中还支持对此文件的压缩/加密以及其他处理)。
  • 26、Oracle中的Group By语句必须是确定的,它需要select list中出现的所有列都必须包含在group by从句中。
  • 27、Oracle的exp命令输出的dmp文件无法象Mysql的转储文件一样可以手工修改。
  • 28、Oracle的底层实现有较大变化,需要你学习UNDO与REDO segment,归档,以及DBWR进程。 (个人认为Oracle相对于其他数据库的主要的优势可能就是其UNDO/REDO的设计了。)
  • 29、 Oracle不是开源软件,因此你无法在上面进行修补/优化/修复/实现你自己的东西。

Robert Hodges

  • 30、 Oracle的查询优化是一件需要专家介入的工作。它的优化器比MySQL的要成熟的多,这意味着查询计划也相应的更加难以解释。如果你有一个大的应用,请准备好聘用一位了解如何有效进行此项工作的伙计。
  • 31、 Oracle的基于成本的优化器的有效运行需要精确的统计信息。对于发生变化的表,需要定期的为其收集统计信息。批量数据加载进程也需要在处理过程中不时的执行estimate/compute statistics命令来收集统计信息以取得满意的性能。
  • 32、 在Oracle中,创建连接是个代价高昂的操作。性能良好的Oracle应用都倾向于使用连接池来最小化登陆的开销。
  • 33、Oracle应用需要应用prepared statement以获取可观的性能。如果你的应用不使用prepared statement的话,需要对应用进行调整。这是应用Oracle数据库的标准编程实践。(此处的prepared statement应该更多的是指使用绑定变量)。
  • 34、 应用需要关闭结果集游标,否则很快就会遇到著名的”ORA-01000 Too many open cursors”错误。在Oracle中,这被认为是一个用户错误,需要你去调整你的代码。
  • 35、 繁忙系统上的长查询可能会遭遇到” ORA-01555 Snapshot too old”错误。可以通过调整redo 段的大小(有时通过调整应用)来消除此错误,但是还是需要你关注这一点。(此处的redo segments的表述是有点问题,此处应该是Undo tablespace以及对应的Undo Retention,Oracle没有所谓的redo segment的说法)。
  • 36、Oracle没有类似于非事务表的概念。大部分Oracle用户都认可这一点。
  • 37、 Oracle的临时表定义是持久的SQL对象,并且对所有用户都可见(此处应该理解成以此用户登陆的会话,Session)。这一点与MySQL中使用的轻量级表有区别,在MySQL中,临时表是在单个会话内创建并销毁的。

Denish Patel

  • 38、 在Oracle中,多个Alter Table操作不能在同一个SQL语句中执行,例如alter table emp modify name varchar(64) not null, add gender char(1) not null;
  • 39、 默认情况下,Oracle不会自动提交。
  • 40、 KILL命令在Oracle中无效,它使用alter system kill命令。(不清楚第一个kill是什么概念,操作系统级别的kill,Oracle还是支持的,我经常使用)。
  • 41、 Oracle在Order by语句中不支持使用减号(-)。(不清楚这个具体的减号是什么东西)。
  • 42、Oracle的sqlplus命令行接口不支持高亮显示。

Roland Bouman

  • 43、 Oracle不支持group_concat或者类似的分组函数。需要你通过循环调取游标来实现,或者通过组合XMLAGG与XMLQUERY来实现你需要的查询。(在Oracle 9R2之后,可以使用自定义聚合函数来实现这个功能,到Oracle 11gR1之后,Oracle自己还提供了一个新的listagg分组函数来实现这个功能)。
  • 44、 对于count(distinct expression)函数,Oracle只支持一个表达式(要么一个列名,要么*),而Mysql支持一组表达式。 (在Oracle中要实现一组表达式,可以通过使用子查询来实现)。
  • 45、 Oracle对子查询的支持非常好。不要因为Mysql中的习惯而不去使用它。
  • 46、 Oracle不支持用户变量(@num)。如果你需要利用它来计算运行时总和,可以利用分析函数(窗口函数)来实现。如果用用户变量来实现特定的汇总函数功能,你将发现Oracle已经有内置得功能支持这些功能。(另外在Oracle中,可以通过在package中应用dbms_session来设置context以实现用户变量)。
  • 47、 Oracle没有区分TIME与DATE类型,Oracle的Date类型实际上就是一个DATETIME类型(但是比MySQL支持一个更大的日期范围)。
  • 48、相对于MySQL来讲,Oracle的存储过程与触发器功能与性能都要好很多。不要习惯性地不去使用它们。
  • 49、 如果需要在Oracle中编写存储过程,记得在开始编码前花点时间了解下Oracle是不是有相应的内置package。你将发现大部分问题已经解决掉了,或者至少大量的基础代码已经在那儿了。
  • 50、如果你在MySQL中有使用BLOB类型或者TEXT类型,你可能会将他们迁移到Oracle地BLOB与CLOB中。然而,与MySQL不同,Oracle并不是透明地实体化这些数据。在大部分情况下,这确实是件好事情,但是它也意味着如果你只是想把BLOB/CLOB当作文本处理,你将需要花费大量琐碎的时间来使用LOB函数,在使用之初,LOB函数还是蛮让人气馁的。(LOB相关函数确实挺烦人,LOB的处理效率也非常差,即使是使用Oracle 11g的SecureFile)。
3
5
分享到:
评论

相关推荐

    将mysql转换到oracle必须了解的50件事

    但是总体上结合Baron Schwartz的列表可以让大家大概地了解到Oracle与MySQL的共同之处与差别分别体现在哪些方面.. Robert Treat 1. 有些人说Oracle没有限制,实际上他们说得可能是Oracle不支持LIMIT语法.不过可以...

    从Oracle转到Mysql前需了解的50件事

    1、 对子查询的优化表现...没有类似于Oracle的内置的加密功能。  7、身份验证功能是完全内置的。不支持LDAP,Active Directory以及其它类似的外部身份验证功能。  8、Mysql Cluster可能与你的想象有较大差异。  9

    三大主流数据库神速上手(MySQL、MSSQL、Oracle)

    本教程从基础的MySQL开始介绍,到SQLServer,然后Oracle,让学员能够从易到难,从Java或PHP语言到.Net,再到Java的数据库的灵活使用。其中分库介绍了,各个数据库的基本独立使用,以及各自的安装和配置。课程中主要...

    mysql与oracle 表字段定义比较

    mysql与oracle 表字段定义比较,了解两个数据库区别

    通用的数据库管理工具Access, MySQL, Oracle...等等

    通用的数据库管理工具, 可管理Access, MySQL, Oracle...等等, 免费版

    oracle数据库面试题目汇总

    看此文档,可以让正在寻找Oracle DBA工作的同仁快速突击并找到一分属于自己的工作,对已工作同仁,此文档是对oracle知识的巩固、提炼、提升,也是部分跳槽加薪者的私房定典。。。。 Oracle: Oracle instance与...

    《深入理解MySQL主从原理32讲》推荐篇

    2008年开始至今一直从事Oracle/MySQL相关工作,现任易极付高级DBA,Oracle Ocm。有丰富的数据库性能调优,故障诊断经验,并且对MySQL源码有一定的研究。 《深入理解MySQL主从原理32讲》专栏包含GTID部分、Event部分...

    mysql lunix的安装

    随着淘宝去IOE(去除IBM小型机、Oracle数据库及EMC存储设备)化的推进,MySQL 数据库在当前的互联网应用中变得越来越重要,本教程主要讲授针对 Java 开发所需的 MySQL 高级知识,课程中会让大家快速掌握索引,如何避免...

    MySQL 集群基准测试 Oracle 和 Intel 测试:每分钟执行10亿次写操作

    Oracle 和 Intel 公司完成了MySQL集群运行在装配有最新一代 Intel® Xeon® E5 系列处理器的服务器上有关性能和扩展性的一系列基准测试。 通过测试,MySQL 集群功能实现了: 每分钟不低于43 亿次的一致读(SELECT)...

    2018最新Mysql高级视频教程

    随着淘宝去IOE(去除IBM小型机、Oracle数据库及EMC存储设备)化的推进,MySQL 数据库在当前的互联网应用中变得越来越重要,本教程主要讲授针对 Java 开发所需的 MySQL 高级知识,课程中会让大家快速掌握索引,如何避免...

    MySQL索引 聚集索引

    MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。

    MySQL 5.7中的关键字与保留字详解

    MySQL和Oracle的关键字还是不尽相同的,在Oracle数据库中,我们的数据表中定义了大量的code字段用来表示主键,但是在MySQL中code是关键字,使用以前的处理方法就有些“水土不服”。 下面我们来了解一下MySQL中的...

    MYSQL基础命令了解与应用

    存储管理数据的仓库,各种软件,购物网站,视频网站,核心是数据,商品信息,订单信息等等都是数据,数据存储在数据库,从数据库拿到数据显示到页面。企业用人要求对于数据库都有要求, 熟练掌握mysql、oracle数据库...

    Mysql和Oracle飞机订票系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全).7z

    通过这套资料,用户可以详细了解如何从需求分析到系统实现的整个过程,以及如何在两个流行的数据库管理系统上实施该订票系统。无论是数据库开发者、学生还是对飞机订票系统感兴趣的专业人士,都可以从这份资料中获得...

    《MySQL数据库入门》教学设计.docx

    教学目标及基本要求 1、了解数据库的基础知识,可以描述数据库的存储结构和常见的数据库产品 2、了解MySQL的安装与配置,学会在Window和Linux平台安装MySQL 3、掌握MySQL的启动、登录以及配置方式 重点及措施 1、...

    Java swing mysql(Oracle)实现的飞机订票系统项目毕业设计源码

    我们学习了ORACLE应用程序的使用。并应用了SQL语言。对数据库的创建、修改、删除方法有了一定的了解。通过导入表和删除表、更改表学会了对于表的一些操作。为了建立一个关系数据库信息管理系统,必须得经过系统调研...

    Effective MySQL之深入解析复制技术

    《Effective MySQL之深入解析复制技术》由Oracle ACE Director、资深My SQL专家Ronald Bradford和Chris Schneider共同撰写,介绍了在使用MySQL数据复制技术构建具有可扩展性解决方案的过程中需要了解和实现的技术。...

    panda-qry:Oracle、MySql、MsSql、PostGreSql 的数据提供程序-开源

    Oracle、MySql、MsSql 的数据提供程序。... 您可以在不了解 SQL 语言的情况下直观地编辑您的查询,开发复杂的条件,然后将结果行导出到 Excel、Word 或其他桌面工具中,从而完成分析、布局或编辑。

Global site tag (gtag.js) - Google Analytics