电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

SQL与Oracle对数据库事务处理的差异性VIP免费

SQL与Oracle对数据库事务处理的差异性_第1页
SQL与Oracle对数据库事务处理的差异性_第2页
SQL与Oracle对数据库事务处理的差异性_第3页
SQL和Oracle对数据库事务处理的差异性作者:Jake,出处:IT专家网论坛,责任编辑:陈子琪,2009-10-1113:00在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于MSSQLServer和Oracle对数据库事务处理的差异性引起一些争论,因此记录我对数据库事务处理的想法。背景在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于MSSQLServer和Oracle对数据库事务处理的差异性引起一些争论,因此记录我对数据库事务处理的想法。简介本文讲述MSSQLServer和Oracle对数据库事务处理的差异性,以及Oracle如何对事务处理的实现。什么是事务数据库事务(DatabaseTransaction)是一组数据库操作的处理单元。事务符合ACID的特性:Atomic:原子性,要么全部要么一无所有。AllorNone.Consistent:一致性,所有依赖关系以及约束一致。Isolated:分离性,不同事务不互相影响。Durable:持久性,提交事务的数据需要持久化。为什么要使用事务实现事务主要有两大功能:1.保证数据库的consistent(一致性状态),保持所有依赖关系以及约束一致)。哪怕数据库管理系统出现故障时(例如断电),也能恢复到一致性状态。例如一个银行转帐系统,张三给李四转3000圆RMB,张三帐号上减3000和李四帐号上加3000需要同时完成,否则系统的帐就不平了。也例如有些销售系统的汇总表和明细表,是一个主表和一个从表,需要同步更新。2.并发时分离不同事务操作。例如编辑过程中的数据不给其他事务查询到。这也是相对的,在特效需求下可能要支持dirtyread(脏读),但不是这里讨论的范围了。SQLServer2008的事务类型1.自动提交事务AutocommitTransactions这是SQLServer默认的事务类型,每一条单独的SQL语句(SQLstatement)都是单独的一个事务,语句执行完毕后自动提交。调用方不需要手工控制事务流程。2.显示事务ExplicitTransactions调用方需要调用API或者使用T-SQL的BEGINTRANSACTION语句来打开事务。需要调用COMMIT或者ROLLBACKTRANSACTION来提交或者回滚。3.隐式事务ImplicitTransactions使用SETIMPLICIT_TRANSACTIONSON把事务模式变成隐式模式。调用方不需要执行BEGINTRANSACTION语句来打开事务。数据库引擎执行到SQL语句的时候自动打开事务。调用方需要调用COMMIT或者ROLLBACKTRANSACTION来提交或者回滚。当数据库引擎执行下一个SQL语句时又自动打开一个新事务。参考:ControllingTransactions(DatabaseEngine)Oracle的事务类型Oracle的事务处理类型有点像SQLServer的隐式事务。当执行到第一个可执行的SQL语句时自动打开事务,然后需要调用方执行commit或者rollback来提交或者回滚事务,如果有DDL语句,Oracle也会自动提交事务的。参考:TransactionManagementOracle的事务的实现Oracle的结构分逻辑上和物理上的区别。逻辑上的结构是表空间,而物理上的结构是数据文件。逻辑实现Oracle下实现事务在逻辑上是由UndoTablespace来实现的。UndoTablespace包含UndoSegements(段),而UndoSegements包含UndoData。UndoData是支持事务的逻辑单元。图源自于《OracleDatabase10g:AdministrationWorkshopI》UndoData用于保存修改前后的数据,以支持回滚,长时间查询,和flashback查询,以及失败事务恢复的功能。由于有了UndoData,回滚事务变得容易了,因为UndoData保存了修改前后的数据,保证了事务的原子性。失败事务恢复和事务回滚类似,当网络中断或者其他原因导致事务异常停止,数据库引擎可以恢复到一致性状态。同时UndoData也支持长时间查询(Read-consistent),例如有表格T,主键为key,有字段为f1,数据如下,尽管只有4条数据,假设需要很长时间进行查询。事务一开始查询,一直没结束,而事务二开始修改key为1的数据为Z,事务二进行提交,数据变成下面的表格。但是事务一查询结束的时候还是读出A,B,C,D,因为查询是从Undo中读出快照。Flashback查询是Oracle10g引进的功能,可以查询出提交之后修改之前的数据,例如上面例子事务三在事务二提交后想查询出A,B,C,D可以通过Flashback查询来完成。这也是有UndoData来支持的。物理实现从上面的逻辑实现看,只是知道了事务以及UndoData的作用,还不清楚...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部