ORACLE事务管理概述

在 Oracle 中一个事务(transaction)开始于首个可执行的 SQL 语句
(executable SQL statement)。可执行的 SQL 语句指产生了对实例(instance)
的调用(call)的 SQL 语句,包括 DML 和 DDL 语句。

当一个事务(transaction)开始时,Oracle 为此事务分配一个可用的撤销表空
间(undo tablespace)来记录其产生的回滚条目(rollback entry)。

一个事务(transaction)在满足以下条件之一时结束:
用户提交了 COMMIT 语句,或不包含 SAVEPOINT 子句的
   ROLLBACK 语句。
用户执行了 CREATE,DROP,RENAME,或 ALTER 等 DDL 语句。
   果当前事务中包含 DML 语句,那么 Oracle 首先提交(commit)此事
  务,然后将 DLL 语句作为一个只包含一条 SQL 语句的新事务运行并提
  交。
用户断开了与 Oracle 的连接。当前事务将被提交。
用户进程异常结束。则当前事务被回滚(roll back)。

当一个事务(transaction)结束后,下一个可执行的 SQL 语句(executable
SQL statement)将会自动地开始一个新事务。

提示:
应用程序在退出时应该显示地进行提交(commit)或回滚(roll
back)操作。

事务提交

提交(commit)一个事务(transaction)意味着将此事务中 SQL 语句对数据的修改永久地记录到数据库中。

在一个修改了数据的事务(transaction)被提交之前,Oracle进行了以下操
作:
● Oracle生成了撤销信息(undo information)。撤销信息包含了事务中
   各个 SQL 语句所修改的数据的原始值。
● Oracle在 SGA 的重做日志缓冲区(redo log buffer)中生成了重做日志
   条目(redo log entry)。重做日志记录(redo log record)中包含了对数
  据块(data block)和回滚块(rollback block)所进行的修改操作。这些
  记录可能在事务提交之前被写入磁盘。
● 对数据的修改已经被写入 SGA 中的数据库缓冲区(database buffer)。
  这些修改可能在事务提交之前被写入磁盘。

提示:
已提交事务(committed transaction)中对数据的修改被存储在
SGA 的数据库缓冲区(database buffer)中,她们不一定立即被
后台进程 DBWn 写入数据文件(datafile)内。Oracle将选择适当
的时机进行写操作以保证系统的效率。因此写操作既可能发生
在事务提交之前,也可能在提交之后。

事务回滚

回滚(rolling back)的含义是撤销一个未提交事务(uncommitted transaction)
中已执行的 SQL 语句对数据的修改。Oracle使用撤销表空间(undo
tablespace)(或回滚段(rollback segment))来存储被修改的数据的原始
值。而重做日志(redo log)内则保存了对数据修改操作的记录。

用户可以回滚(roll back)整个未提交事务(uncommitted transaction)。除此
之外,用户还可以部分回滚未提交事务,即从事务的最末端回滚到事务中任
意一个被称为保存点(savepoint)的标记处。

以下各种类型回滚操作(rollback)的过程基本相同:
● 语句级回滚(tatement-level rollback)(由于语句执行错误或死锁
(deadlock)造成)
● 回滚到一个保存点(savepoint)
● 依据用户请求回滚一个事务(transaction)
● 由于进程异常终止而回滚一个事务
● 由于实例(instance)异常终止而回滚所有正在执行的事务
● 在数据库恢复(recovery)过程中回滚不完整的事务

不考虑保存点(savepoint)而回滚(rolling back)整个事务(transaction)的过程如下:
1. Oracle使用相关撤销表空间(undo tablespace)内的信息来撤销事务内
所有 SQL 语句对数据的修改
2. Oracle释放事务中使用的所有锁
3. 事务结束

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24270312/viewspace-690286/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24270312/viewspace-690286/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值