oracle中事务的含义,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. 事务结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值