设为首页 收藏本站
查看: 1049|回复: 0

[经验分享] Oracle和mysql的区别

[复制链接]

尚未签到

发表于 2018-9-6 11:47:13 | 显示全部楼层 |阅读模式
  一、数据库的主要类型
  数据库类型主要可分为:网状数据库、关系数据库、树状数据库、面向对象数据库。在商业中最主要的是关系型数据库,例如:Oracle、DB2、Sybase、My SQL Server、Informax、Redis、MySQL等。
  Oracle和mysql的区别
  Oralce是大型数据而mysql是中小型关系型数据库。Oralce占市场的40%而mysql占市场的20%。
  一、并发性
  Oracle支持大并发量和访问量,是oltp最好的工具
  并发性是oltp数据库的最重要的特性,但并发涉及到资源的获取、共享与锁定。
  mysql安装后占152M而orcale占3G多,在使用和操作的时候占用机器资源性能特别多。
  mysql:以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新比表中的数据。虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。
  Oracle:使用行级锁,对资源锁定的粒度小很多,知识锁定sql需要的资源,并且加锁实在数据库中数据行上,不依赖索引,所以oracle对并发性的支持要好很多。
  二、一致性
  oracle:oracle支持serializable的隔离级别,可以实现最高级别的读写一致性,每个 session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造版多本数据库来实现读写一致性,每个session查询时,如果对应的数据块发生变化,oracle会在undo表空间中为欸这个session构造它查询时的旧的数据块。
  mysql:mysql没有类似oracle的构造多版本的数据块的机制,支持read commietd的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。
  session更新数据时,要加上排它锁,其他session无法访问数据。
  三、事务
  oracle:事务便是是使数据库从一种状态换成位另一种状态,这不同于文件系统,它是数据所特用的。
  它的特性主要分为四个
  原子性:语句级原子性,过程级原子性,事务级原子性。
  一致性:状态一致,同一事务中不会有两种状态
  隔离性:事务键是互相分离互不影响(也有可能有自治事物)
  持久性:事务提交了,那么状态就是用过就的
  分布式事务:在oralce中会在一个事务中控制多个数据库来保证数据库中的数据的完整性,主要通过dblink。
  自治事务:是独立于务的一个子事务,它的提交与回滚不影响主事务的操作。
  自治事务提供了一种用PL/SQL控制事务的新方法,可以用于:
  1、顶层匿名块
  2、本地,独立或打包的函数和过程
  3、对象类型的方法
  4、数据库触发器
  mysql:事务的实现就是基于数据的引擎,不同的储存引擎对事务的支持程度不一样。mysql中支持事务的存储引擎有innoDB和NDB。innoDB是mysql默认的存储引擎,默认的隔离界别是RR,并且在RR的隔离级别下更近一步,通过多版本并发控制,解决不可重复都的问题,加上间隙锁(并发控制)解决 幻读问题,因此innoDB的RR隔离界别其实实现了串行化级别的效果,而且保留了比较好的并发性能。
  事务的隔离性是通过锁实现,而事务的原子性、一致性和持久性则是通过事务的日志实现。事务就是redo和undo
  分布式事务:分布式事务的实现方式有很多,既可以采用innoDB提供的原生的事务支持,也可以采用消息队列来实现分布式事务的最终一致性。
  模型分三块:应用程序,资源管理器,事物管理器
  应用程序定义了事务的边界,指定需要做哪些事务;
  资源管理器提供了访问事务的方法,通畅一个数据库就是一个资源管理器;
  事务管理器协调 参与了全局事务中的各个事务。
  分布式事务采用了两段式提交的方式,第以阶段所有的事务节点开始准备,告诉事务管理器ready。第二阶段事务管理器告诉每个节点是commit还是rollback。如果有一个节点失败,就要全局的节点全部是rollback,从此保障事务的原子性。
  原子性:一个事务的执行视为一个不可分割的最小单元,事务里面的操作,要么全部成功执行,要么全部失败回滚,不可以执行其中的一部分。
  一致性:一个事务的执行 不应该破坏数据的完整性。
  隔离性:通常来说,事务之间的行为不应该互相影响,然而实际情况中,事务相互影响的程度收到了隔离级别的影响 。
  持久性:事务提交后,需要将提交的事务持久化到磁盘,即使系统崩溃,提交的数据也不应该丢失。
  事务的四种隔离级别:
  1.READ UNCOMMITTED(未提交读)。在RU的隔离级别下,事务A对数据做的修改,即使没有提交,对于事务B来说也是可见的,这种问题叫脏读。这是隔离程度较低的一种隔离级别,在实际运用中会引起很多问题,因此一般不常用。
  2.READ COMMITTED(提交读)。在RC的隔离级别下,不会出现脏读的问题。事务A对数据做的修改,提交之后会对事务B可见,举例,事务B开启时读到数据1,接下来事务A开启,把这个数据改成2,提交,B再次读取这个数据,会读到最新的数据2。在RC的隔离级别下,会出现不可重复读的问题。这个隔离级别是许多数据库的默认隔离级别。
  3.REPEATABLE READ(可重复读)。在RR的隔离级别下,不会出现不可重复读的问题。事务A对数据做的修改,提交之后,对于先于事务A开启的事务是不可见的。举例,事务B开启时读到数据1,接下来事务A开启,把这个数据改成2,提交,B再次读取这个数据,仍然只能读到1。在RR的隔离级别下,会出现幻读的问题。幻读的意思是,当某个事务在读取某个范围内的值的时候,另外一个事务在这个范围内插入了新记录,那么之前的事务再次读取这个范围的值,会读取到新插入的数据。Mysql默认的隔离级别是RR,然而mysql的innoDB引擎间隙锁成功解决了幻读的问题。
  4.SERIALIZABLE(可串行化)。可串行化是最高的隔离级别。这种隔离级别强制要求所有事物串行执行,在这种隔离级别下,读取的每行数据都加锁,会导致大量的锁征用问题,性能最差。
  mysql在innodb存储的 引擎的行级锁的情况才支持事务。
  四、数据持久化
  oracle
  保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机的日志文件中,保持到了磁盘上。如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。
  mysql
  默认提交sql语句,但如果更新过程中出现db或主机重启的问题也许会丢失数据。
  五、提交方式
  oracle默认不自动提交,需要用户手动提交。
  mysql默认是自动提交的。
  六、逻辑备份
  oracle逻辑备份时不锁定数据,且备份的数据是一致的。
  mysql逻辑备份时要锁定数据,才能保证备份数据是一致的,影响业务正常的dml使用。
  七、热备份
  oracle有成熟的热备份工具rman,热备时,不影响用户使用数据库,即使备份数据库不一致,也可以恢复时通过归档日志,和联机重做体制进一致恢复。
  mysql:myisam的引擎,用myslq自带的myslqhostcopy热备时i,需要给表加读锁,影响dml操作。
  innodb的引擎,它会备份innodb的表和索引,但是不会备份,frm文件用ibbackup备份文件时,会有一个日志文件记录备份期间的数据变化,因此可以不用锁表,不影响其他用户使用数据库,但此工具是收费的。
  innobackup是结合ibbackup使用的一个脚本,他会协助对,frm文件的备份
  八、sql语句的扩展性和灵活性
  mysql对sql语句有很多非常实用的方便扩展,比如limit功能,insert可以一次插入多行数据,select某些数据管理可以不加from
  oracle在这方面感觉更加稳重传统一些。
  九、复制
  oracle:既有推或拉式的传统数据的复制,也有datagurad的双机或多 机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理叫复杂。
  mysql:复制服务器的配置简单,但主库问题时,从库有可能丢失一定的数据,且需要手工切换到从数据库
  十、性能诊断
  oracle有各种成熟的性能诊断调优工具,能实现很多自动的分析,诊断功能,比如awr,addm、sqltrace、tkproof等。
  myslq的诊断调优方法较少,主要有慢查询日志。
  十一、权限与安全
  mysql的用户与主机有关,没有什么意义,另外更容易被仿冒者主机及ip有可乘之机。
  oracle的权限与安全概念比较传统,中规中矩。
  十二、分区表的分区索引
  oracle的分区表和分区索引功能很成熟,可以提高用户的访问db的体验。
  mysql的分区表还不太成熟稳定。
  十三、管理工具
  oracle有很多成熟的命令行,图形界面、web管理工具、还有很多第三方的管理工具、管理极其方便高效。
  mysql管理工具较少 ,在linux下的管理工具的安装有时要安装 额外的包,有一定的复杂性。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-564031-1-1.html 上篇帖子: Oracle12.2 RAC集群管理之IP地址修改_Oracle12cR2视频教程(项目实战之七) 下篇帖子: Oracle data type number-90SirDB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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