- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 事务管理(Oracle概念中译本)
第四章 事务管理
这一章对事务做了定义以及描述了如何通过事务管理你的工作。
本章包含下列内容:
??事务的介绍
??事务管理概述
??自主事务概述
事务介绍
事务是包含一个多或多个SQL语句的逻辑单位。一个事务是一个原子单位。事务中的所有SQL语句只能全部提交(应用到数据库)或者全部回滚(从数据库撤销)。
一个事务从第一个执行的SQL语句开始。一个事务在它被提交或者被回滚结束,结束事务可以显式的使用COMMIT或者ROLLBACK语句或执行一个DDL语句(隐含着事务结束)。
要说明事务的概念可以想象一个银行数据库。当一个银行客户从储蓄帐号中取出钱到活期帐号中,事务由三个独立的操作组成:
??储蓄帐户减值
??活期帐户增值
??在事务日志中记录事务
Oracle必须适合两种情况。如果三个SQL语句都按照正确的顺序执行来维护帐号,事务的结果可以应用到数据库中。虽然如此,如果发生一个帐户资金不足、无效帐号或者硬件错误的问题让事务中的一个或者两个语句没有完成,整个事务必须回滚确保帐户余额是正确的。
图4-1描述了银行事务示例
语句执行和事务控制
一个成功运行的SQL语句和提交的事务不同。成功执行意味着单个语句是:
??解析
??创建有效的SQL结构
??作为一个原子单位正确运行。例如,多行更新的所有行都被修改
虽然如此,在包含语句的事务提交之前,事务都是可以回滚的,所有事务做的修改都可以撤销。一个语句能够成功运行,事务不能(因为事务不是语句,只有开始和结束,只有提交和回滚,没有成功和失败的说法)。
提交意味着一个用户显示或者隐式的要求事务的变化持久化。一个显式的请求是当用户执行COMMIT语句时。一个隐式的请求是应用程序正常结束或者一个DDL操作完成后。事务包含的SQL语句造成的修改变得持久,并对事务之后的其他用户可见。事务提交之后执行的SQL可以看到已经提交的修改。
你可以用SET TRANSACTION ..... NAME语句在你开始事务之前设置事务名称。这使得监控长时间运行的事务更加容易,解决出现问题的分布式事务也是如此。
语句级别的回滚
如果SQL语句执行的任何时候产生错误,这个语句造成的所有的影响都会回滚。回滚的结果就好像语句从没有运行过。这个操作是个语句级别的回滚。
SQL语句执行时遇到的错误导致语句级别回滚。当向主键内插入重复的数据就会产生这样的错误例子。死锁(对同一数据的争用)的SQL语句也会导致语句级别的回滚。如果在SQL语句解析时遇到了错误,比如语法错误,因为还没有运行,所以不会导致语句级别回滚。
一个SQL语句的失败只会损失它想要的执行的任何工作本身。不会导致损失当前事务之前的任何工作。如果一个语句是DDL语句,然后就会隐含提交还没有撤销的操作(即使这个DDL语句有错误也一样)。
可恢复的空间分配
Oracle提供了一种在空间分配失败事件中暂停、重新启动、执行大的数据库操作的办法。这使得管理员可以采取正确的动作,而不是Oracle数据库对用户返回一个错误。在错误环境被纠正之后,暂停的操作自动重新开始。
只有在客户端对于会话使用了ALTER SESSION语句来显示启动重新开始功能之后,一个语句才能在运行在重新开始模式(resumable)下。
当下列情况出现时重新启动的空间分配会暂停:
??空间不足
??达到最大数据区段
??超过空间限额
对于不可重新开始的空间分配,这些情况会导致错误,语句被回滚。
语句的暂停导致事务的暂停。因而事务的所有资源会在语句暂停和重新启动这段时间一直持有。
当错误环境过去(例如,用户介入或者其他查询释放了排序空间),暂停的语句自动恢复执行状态。
事务管理概述
Oracle中的第一个执行的SQL语句会开始一个事务。一个执行的SQL语句是对实例产生调用的一个SQL语句,语句包括DML和DDL语句。
当事务开始时,Oracle对这个事务分配一段可用的undo表空间来保存新事务的重做条目。
一个事务在任一下列情况下终结:
??用户提交了不附带SAVEPOINT子句的COMMIT或ROLLBACK语句
??用户运行例如CREATE,DROP,RENAME或ALTER的DDL语句。如果当前事务中包含任何DML语句,Oracle先提交这个事务,然后将这个DDL语句作为一个新的单独的语句事务来运行和提交(注意:即使这个DDL语句错误也会如此,因为Oracle先提交事务再执行DDL)。
??一个用户从Oracle中断连接。当前的事务被提交。
??一个用户进程不正常中断。当前事务被回滚。
一个事务结束之后,下一个执行的SQL语句自动启动后续的事务。
注意:应用程序应该在程序中断之前显式的提交或者回滚事务。
提交事务
提交一个事务意味着事务中执行的SQL语句造成的修改持久化。
在一个事务提交修改的数据之前
原创力文档


文档评论(0)