a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 93|回复: 1

[考试辅导] Oracle技术:从mysql到oracle你要了解几件事

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
我其实是同一天看到Robert Treat几人整理的”Mysql 迁移到Oracle前需要了解的50件事“与Baron Schwartz的”Oracle迁移到Mysql之前需要了解的50件事“的,只是Baron Schwartz的这个列表可能对大家更加有用处,也就先将其整出来了. 另外他们列出的这些区别有些是蛮有意义的,有些可能由于他们本人的MySQL DBA的身份,对Oracle的理解有些偏差,有些则有凑数的嫌疑. 但是总体上结合Baron Schwartz的列表可以让大家大概地了解到Oracle与MySQL的共同之处与差别分别体现在哪些方面..   Robert Treat
( [. B, W" u; e* U  1. 有些人说Oracle没有限制,实际上他们说得可能是Oracle不支持LIMIT语法.不过可以rownum虚列来实现,不过会更加麻烦.
7 M( C/ `  x  C/ v% A1 ^0 L6 I  2. Oracle不支持偏移(offset)语法.
3 |7 u  b, g4 S3 N  3. Oracle的复制功能可能比MySQL更加健壮,不过也更加难以配置.8 W. q" [: C( H& I
  4. 对于多个Master类型的系统,大部分用户都希望你使用更加复杂也更加昂贵的Oracle RAC(虽然可能NDB更加健壮)./ `  w$ \8 F0 V6 p2 E
  5. Oracle的分区功能非常健壮,但是它不是内置的,并需要专门为此付费(分区功能是在Enterprise Edition里面是内置的).( |( t9 H3 [5 U  o
  6. 在Linux/Unix上,Oracle并不象Mysql那么方便,很多Linux/Unix发行版默认就会自带Mysql.(我对这一点的理解与翻译可能都有偏差)  T. j3 Y! }$ Y4 J2 t; i0 T% ^4 A
  7. INSERT … ON DUPLICATE KEY UPDATE语法将不再可用,不过你需要学习更加复杂(但是符合SQL标准)的MERGE语法.* s% v: D$ L) R9 u3 S4 {
  8. Oracle的ROLE架构与MySQL有很大差异,无法再使用root角色来完整所有工作.(不过Sys用户的权限仍然与root相差无几,只是为了安全着想,不建议这么使用了).! m! [7 U. B) e1 v
  9. Role 帐户与特定的Schema联系在一起(反之也一样),类似于MySQL数据库中的Database概念.(Role并不完全与Schema联系在一起,系统有一些固定的role,这些Role包含部分已经定义好的权限集(privilege set),也可以再自定义部分新的role).
2 y  b. D6 d1 g' }! E' }  10. 事实上,丢弃一切已知的关于连接访问的设置吧,Oracle使用一套全新的系统来处理连接访问.3 E  y( |& ~! F4 m) s
  11. 支持全文搜索,不过语法完全不同.
0 z4 ^1 ^! ?; X+ w5 c, L& o  12. Oracle的文档非常丰富,不过,如果需要Oracle的专业服务,你需要拥有Metalink的访问权限., v3 `& {7 R* j) n
  13. 在非数据库社区很难找到相关的支持信息(例如,PHP论坛或者网站开发者的网志)
' ]! o! f* c2 |9 e  14. 自增功能可以通过Trigger与sequence对象来实现.+ f: y) t# Z  @" j1 ~) |, C/ O: W" d
  15. 大量日常熟悉的SHOW命令将不再可用,想要获取系统信息,需要你学习Oracle的数据字典(或信息Schema),深入一点的还需要学习Oracle动态性能.8 @* l( p" a. c' Y4 u" m
  16. MySQL为信息Schema添加了多个非标准的扩展,在Oracle中将很难找到这些信息., J0 K4 e; D# ^( A. j4 N
  17. 为了管理好生产系统与非生产系统的的转入转出,需要你深入理解Oracle的授权规则.* R6 n. \5 y3 J% t# f! ^* ]
  18. 大体上讲,Oracle的数值类型更加简单,如果你确实需要类似于MySQL的多粒度的数值类型,就需要你自己来实现它,或者通过制定不同的精度(Number(n,x))来实现.
) j  O. _/ z. I! L3 \  19. 在Oracle中,表可以做到无限制的增长,但是大部分情况下,都建议通过表空间(tablespace)来对此作细粒度的管理.2 v, a7 I! g0 N  d" l! O
  20. Oracle不支持ALTER TABLE ADD COLUMN BEFORE|AFTER,也就是不支持自己制定字段的位置.(我们这边之前有部分应用对字段顺序有严格地要求,不过,从理论上讲,这是业务设计的问题,主要是其大部分情况下都是使用select *或者insert table values来处理数据,而不是在select,insert中指定具体需要处理的字段名列表).3 L& F# _+ a. H
  21. 如果你习惯于通过图形界面(GUI)来管理数据库,你一定会喜欢上Oracle,但是如果你倾向于使用类似与Mysql 命令行的客户端,你可能会对sql*plus这个客户端工具感到失望(需要一个习惯的过程,sql*plus还是蛮好用的).  ]7 l. K' s! Z. ?/ J. m
  22. Oracle的数据校验比Mysql更加严格,依赖于MySQL的模糊规则可能会导致应用无法运行.MySQL接受”0000-00-00″来作为日期类型的值就是个典型的例子.
2 |5 Z2 c9 |. A2 `- n  23. 虽然Oracle的PL/SQL功能更强,但是它不支持标准的PSM语言来编写存储过程,因此你可能不得不学习它的非标准的语法." Z3 {/ x; S) ]# Z8 Y1 u$ V( e( X* W
  24. Oracle不支持ENUM数据类型,只能通过使用基于文本的check约束或者创建外键关联表来实现.
) M& }/ x  j: Y  s1 J  25. Mysql的一些更加神秘的表类型(例如,blackhole,csv),在Oracle中找不到相对应的功能. (不清楚blockhole是何种类型,不过Oracle的外部表(external table)确实是支持csv格式的,在11g版本中还支持对此文件的压缩/加密以及其他处理).$ o3 B, C2 n5 q4 E6 Q

: s% M9 c- k8 J0 P2 e  26. Oracle中的Group By语句必须是确定的,它需要select list中出现的所有列都必须包含在group by从句中.
回复

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:20 | 显示全部楼层

Oracle技术:从mysql到oracle你要了解几件事

</p>  27. Oracle的exp命令输出的dmp文件无法象Mysql的转储文件一样可以手工修改.
  L( o( c. N) y6 `: Y  I  28. Oracle的底层实现有较大变化,需要你学习UNDO与REDO segment,归档,以及DBWR进程. (个人认为Oracle相对于其他数据库的主要的优势可能就是其UNDO/REDO的设计了.)" _% Z5 @  F: X7 J# e4 L6 [/ E: {! [
  29. Oracle不是开源软件,因此你无法在上面进行修补/优化/修复/实现你自己的东西.
% ]) {* `* \, @/ d2 T' h  Robert Hodges9 \; ^. h1 ^/ Y$ ~( q4 i+ ~( W
  30. Oracle的查询优化是一件需要专家介入的工作.它的优化器比MySQL的要成熟的多,这意味着查询计划也相应的更加难以解释.如果你有一个大的应用,请准备好聘用一位了解如何有效进行此项工作的伙计.; {% A6 M+ D0 m8 q& R% Q  G! U
  31. Oracle的基于成本的优化器的有效运行需要精确的统计信息.对于发生变化的表,需要定期的为其收集统计信息.批量数据加载进程也需要在处理过程中不时的执行estimate/compute statistics命令来收集统计信息以取得满意的性能.
1 ^' z" X6 s/ n! v* U  32. 在Oracle中,创建连接是个代价高昂的操作.性能良好的Oracle应用都倾向于使用连接池来最小化登陆的开销.
6 ]  q$ {, d) h' D! C# U* _5 [  33. Oracle应用需要应用prepared statement以获取可观的性能.如果你的应用不使用prepared statement的话,需要对应用进行调整.这是应用Oracle数据库的标准编程实践.(此处的prepared statement应该更多的是指使用绑定变量).
5 O& E: u. h/ q6 ~; `- ~  34. 应用需要关闭结果集游标,否则很快就会遇到着名的”ORA-01000 Too many open cursors”错误.在Oracle中,这被认为是一个用户错误,需要你去调整你的代码.
2 N/ L: V2 M8 P' R* }  35. 繁忙系统上的长查询可能会遭遇到” ORA-01555 Snapshot too old”错误.可以通过调整redo 段的大小(有时通过调整应用)来消除此错误,但是还是需要你关注这一点.(此处的redo segments的表述是有点问题,此处应该是Undo tablespace以及对应的Undo Retention,Oracle没有所谓的redo segment的说法).
$ h; {3 H/ J+ P3 v# M( y  36. Oracle没有类似于非事务表的概念.大部分Oracle用户都认可这一点., A3 R" E# R0 W5 g) B# k" }
  37. Oracle的临时表定义是持久的SQL对象,并且对所有用户都可见(此处应该理解成以此用户登陆的会话,Session).这一点与MySQL中使用的轻量级表有区别,在MySQL中,临时表是在单个会话内创建并销毁的.% ^% A  `6 h& H4 {
  Denish Patel
2 ~4 z- h/ j( u1 s" S* k; ~, ~3 G  38. 在Oracle中,多个Alter Table操作不能在同一个SQL语句中执行,例如alter table emp modify name varchar(64) not null, add gender char(1) not null;
: T4 w, ?- B7 Y  39. 默认情况下,Oracle不会自动提交.7 M) N& Y+ D2 ]
  40. KILL命令在Oracle中无效,它使用alter system kill命令.(不清楚第一个kill是什么概念,操作系统级别的kill,Oracle还是支持的,我经常使用).; g' M. ?0 i# I( [0 ^
  41. Oracle在Order by语句中不支持使用减号(-).(不清楚这个具体的减号是什么东西)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-6 00:31 , Processed in 0.179875 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表