SQL与Oracle对数据库事务处理的差异性_第1页
SQL与Oracle对数据库事务处理的差异性_第2页
SQL与Oracle对数据库事务处理的差异性_第3页
SQL与Oracle对数据库事务处理的差异性_第4页
SQL与Oracle对数据库事务处理的差异性_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SQL 和Oracle对数据库事务处理的差异性作者: Jake, 出处:IT专家网论坛,责任编辑: 陈子琪, 2009-100-11 113:00在吉日嘎拉拉的软件编程程走火入魔之之:数据库事事务处理入门门(适合初学学者阅读)文文章中关于MMS SQLL Servver和Orracle对对数据库事务务处理的差异异性引起一些些争论,因此此记录我对数数据库事务处处理的想法。背景在吉日嘎拉拉的软件编程程走火入魔之之:数据库事事务处理入门门(适合初学学者阅读)文文章中关于MMS SQLL HYPERLINK /searchwhatis/497/5948997.shtml Servver和Orracle

2、对对数据库事务务处理的差异异性引起一些些争论,因此此记录我对数数据库事务处处理的想法。简介本文讲述MMS SQLL Servver和Orracle对对数据库事务务处理的差异异性,以及OOraclee如何对事务务处理的实现现。什么是事务务数据库事务务( HYPERLINK /searchwhatis/132/5947632.shtml Dataabase Transsactioon)是一组组数据库操作作的处理单元元。事务符合合ACID的的特性: HYPERLINK /searchwhatis/470/6092470.shtml Atomiic:原子性性,要么全部部要么一无所所有。Alll or

3、NNone.Consiistentt:一致性,所所有依赖关系系以及约束一一致。Isolaated:分分离性,不同同事务不互相相影响。Durabble:持久久性,提交事事务的数据需需要持久化。为什么要使使用事务实现事务主主要有两大功功能:1.保证数数据库的coonsisttent(一一致性状态),保持所有有依赖关系以以及约束一致致)。哪怕数数据库管理系系统出现故障障时(例如断断电),也能能恢复到一致致性状态。例例如一个银行行转帐系统,张张三给李四转转 HYPERLINK /searchwhatis/273/5949273.shtml 3000圆RRMB,张三三帐号上减33000和李李四帐号上加加

4、3000需需要同时完成成,否则系统统的帐就不平平了。也例如如有些销售系系统的汇总表表和明细表,是是一个主表和和一个从表,需需要同步更新新。2.并发时时分离不同事事务操作。例例如编辑过程程中的数据不不给其他事务务查询到。这这也是相对的的,在特效需需求下可能要要支持dirrty reead(脏读读),但不是是这里讨论的的范围了。SQL SServerr 20088 的事务类类型1.自动提提交事务 AAutocoommit Transsactioons这是SQLL Servver默认的的事务类型,每每一条单独的的SQL语句句(SQL stateement)都是单独的的一个事务,语语句执行完毕毕后自动

5、提交交。调用方不不需要手工控控制事务流程程。2.显示事事务 Expplicitt Trannsactiions调用方需要要调用APII或者使用TT-SQL的的BEGINN HYPERLINK /searchwhatis/297/6092797.shtml TRANNSACTIION 语句句来打开事务务。需要调用用 HYPERLINK /searchwhatis/318/5947318.shtml COMMIIT 或者 HYPERLINK /searchwhatis/218/6093718.shtml ROLLBBACK TTRANSAACTIONN 来提交或或者回滚。3.隐式事事务 Imppl

6、icitt Trannsactiions使用 HYPERLINK /searchwhatis/23/5949023.shtml SETT IMPLLICIT_TRANSSACTIOONS ONN把事务模式式变成隐式模模式。调用方方不需要执行行BEGINN TRANNSACTIION 语句句来打开事务务。数据库引引擎执行到SSQL语句的的时候自动打打开事务。调调用方需要调调用COMMMIT 或者者 ROLLLBACK TRANSSACTIOON 来提交交或者回滚。当当数据库引擎擎执行下一个个SQL语句句时又自动打打开一个新事事务。参考:Coontrollling Transsactioons (

7、DDatabaase Enngine)Oraclee的事务类型型Oraclle的事务处处理类型有点点像SQL HYPERLINK /searchwhatis/497/5948997.shtml Serveer的隐式事事务。当执行行到第一个可可执行的SQQL语句时自自动打开事务务,然后需要要调用方执行行 HYPERLINK /searchwhatis/318/5947318.shtml commiit或者 HYPERLINK /searchwhatis/218/6093718.shtml rolllback来来提交或者回回滚事务,如如果有DDLL语句,Orracle也也会自动提交交事务的。参考:

8、 HYPERLINK /searchwhatis/297/6092797.shtml Trransacction ManaggementtOraclle的事务的的实现Oraclle的结构分分逻辑上和物物理上的区别别。逻辑上的的结构是表空空间,而物理理上的结构是是数据文件。逻辑实现Oraclle下实现事事务在逻辑上上是由Unddo HYPERLINK /searchwhatis/458/6028458.shtml Tabblespaace来实现现的。Unddo Tabblespaace包含UUndo SSegemeents(段段),而Unndo Seegemennts包含UUndo HYPERL

9、INK /searchwhatis/99/5947599.shtml DData。UUndo DData是支支持事务的逻逻辑单元。图源自于OOraclee HYPERLINK /searchwhatis/132/5947632.shtml Dataabase 10g: Adminnistraation Worksshop IIUndo Data用用于保存修改改前后的数据据,以支持回回滚,长时间间查询,和fflashbback查询询,以及失败败事务恢复的的功能。由于有了UUndo DData,回回滚事务变得得容易了,因因为Undoo Dataa保存了修改改前后的数据据,保证了事事务的原子性性。失

10、败事务务恢复和事务务回滚类似,当当网络 HYPERLINK /searchwhatis/404/7420404.shtml 中断或者其他他原因导致事事务异常停止止,数据库引引擎可以恢复复到一致性状状态。同时Unddo Datta也支持长长时间查询(Read-consiistentt),例如有有表格T,主主键为 HYPERLINK /searchwhatis/25/5948525.shtml keyy,有字段为为f1,数据据如下,尽管管只有4条数数据,假设需需要很长时间间进行查询。事务一开始始查询,一直直没结束,而而事务二开始始修改 HYPERLINK /searchwhatis/25/5948

11、525.shtml keyy为1的数据据为Z,事务务二进行提交交,数据变成成下面的表格格。但是事务务一查询结束束的时候还是是读出A,BB,C,D,因因为查询是从从Undo中中读出快照。Flashhback查查询是Oraacle 110g引进的的功能,可以以查询出提交交之后修改之之前的数据,例例如上面例子子事务三在事事务二提交后后想查询出AA,B,C,D可以通过过Flashhback查查询来完成。这这也是有Unndo HYPERLINK /searchwhatis/99/5947599.shtml Daata来支持持的。物理实现从上面的逻逻辑实现看,只只是知道了事事务以及Unndo Daata的

12、作用用,还不清楚楚Oraclle对事务的的支持到底怎怎么实现的。下下面从物理结结构上讲述OOraclee怎么对事务务进行支持。请请先看一个物物理结构图。图源自于OOraclee HYPERLINK /searchwhatis/132/5947632.shtml Dataabase 10g: Adminnistraation Worksshop II为了简化,我我只是用个人人的语言讲述述和事务有关关的部件。SSGA可以理理解为全局内内存。其中 HYPERLINK /searchwhatis/132/5947632.shtml DDatabaase Buuffer HYPERLINK /searc

13、hwhatis/459/5946959.shtml Cachee存放的是从从数据文件中中读取的数据据缓存。紫色色的圆柱体为为数据文件。RRedo LLog Buuffer为为重做日志缓缓存,也就是是保存日志的的内存块,一一切的数据的的修改都会记记录在Reddo Logg Bufffer里面。例例如用回事务务二更新 HYPERLINK /searchwhatis/25/5948525.shtml keey为1数据据的例子。当当事务二更新新key为11数据从A到到Z。Oraacle数据据库引擎会把把key为11的数据的 rowidd,修改前数数据A以及修修改后数据ZZ都记录在RRedo LLog

14、Buuffer里里面。如果事事务二继续更更新key为为2的数据为为Y,那么kkey为2的的数据的roowid,修修改前数据BB以及修改后后数据Y也记记录到Reddo Logg Bufffer里面。每每一笔数据都都记录,而且且是流水线性性记录。一旦旦事务二进行行提交,LGGWR HYPERLINK /searchwhatis/292/7333792.shtml 进程(Logg Writter,日志志写进程)就就会把Reddo Logg Bufffer的数据据按顺序写到到Log DDatafiile里面,也也就是日志数数据文件里面面,当写日志志文件完成,OOraclee数据库引擎擎会生成一个个SC

15、N( HYPERLINK /searchwhatis/494/6026494.shtml ssystemm channge nuumber,系系统更新号),到这时候候Oraclle数据库引引擎会通知调调用方提交完完成了。这里里可以看到OOraclee在提交的时时候不必要把把更新数据写写回数据文件件,而是写到到日志文件里里面。因为顺顺序写线性的的日志文件速速度快很多,而而写数据文件件是需要随机机读写。由于于线性记录和和SCN号控控制,数据库库引擎可以通通过redoo log(重做日志文文件)的操作作得到最新的的数据。当然然在Checckpoinnt的时候数数据文件是最最终还是会更更新的,只是是说

16、事务提交交的时候更新新数据文件不不是必须步骤骤,这样能很很大的提高性性能。由于这个机机制,回滚变变得很简单,要要读没提交前前之前的SCCN是很容易易的事情。对于初学者者关于数据库库事务处理的的建议我自己也是是从新手一步步步走过来,现现在也不是老老鸟,算是有有点经验,如如果是刚入门门的同学,你你觉得有用就就看一下,没没用就过了。对于数据库库事务的处理理,开始的时时候不需要很很深入了解数数据库的原理理,当然以后后还是需要了了解的,优先先级排后而已已。高优先级级如下:首先,事务务不是什么高高深神秘的东东西,我从入入行开始所做做的所有系统统,包括现在在的嵌入式系系统,都用到到事务。我并并不觉得大部部分

17、系统事务务有什么问题题,只是一些些约束和同步步机制,真的的有问题从自自身系统设计计角度看,不不一定说从数数据库技术角角度去找解决决方法。例如如Oraclle的长时间间查询如果UUndo HYPERLINK /searchwhatis/99/5947599.shtml DData(历历史数据)给给覆盖了,OOraclee会抛出异常常ORA-015555: snaapshott too old”,如如果出现这种种问题,我会会从自身系统统设计角度入入手,为什么么有那么大的的查询,为什什么在这个查查询中其他事事务会更新数数据,这些查查询是否只是是查一次就够够了,查的过过程是否需要要锁住表等等等。然而这个个问题可以通通过数据库调调优解决,但但是我想问题题的角度首先先是从自身系系统设计出发发。第二,要知知道的是不同同数据库的事事务类型的区区别,例如MMS SQLL Seveer是默认是是自动提交事事务,用的时时候需要知道道每个语句都都有单独的事事务在操作。而而Oraclle是类似于于隐式事务,必必须手工 HYPERLINK /searchwhatis/318/5947318.shtml coommit或或者 HYPERLINK /searchw

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论