Oracle和mysql的区别

一、数据库的主要类型

        数据库类型主要可分为:网状数据库、关系数据库、树状数据库、面向对象数据库。在商业中最主要的是关系型数据库,例如: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下的管理工具的安装有时要安装 额外的包,有一定的复杂性。

转载于:https://my.oschina.net/architectliuyuanyuan/blog/1631660

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值