事务提交都做了哪些事?(Commit Transactions)
上一篇 / 下一篇 2012-10-14 19:13:42
提交一个事务意味着将此事务中的
SQL语句对数据的修改永久的记录到
数据库中。
在一个修改了数据的事务被提交之前,Oracle进行了以下操作:
a Oracle生成了
undo information,undo information 包含了事务中各个SQL语句所修改的数据的原始值。
b Oracle 在SGA的重做日志缓冲区(
redo log buffer) 中生成了重做日志条目(redo log entry)。重做日志记录中包含了对数据块和回滚块所进行的修改操作。这些记录可能在事务提交之前被写入磁盘。
c 对数据修改已经被写入SGA中的数据库缓冲区(
database buffer)。这些修改可能在事务提交之前被写入磁盘。
committed
transaction中对数据的哦修改被存储在SGA的数据库缓冲区(database buffer)中,他们不一定立即被后台进程DBWn写入数据文件内。Oracle将选择适当的时机进行写操作以保证系统的效率。因此写操作及可能发生在事务提交之前,也可能在提交之后。
当事务被提交之后,Oracle 进行一下操作:
1 undo 他变了谁怕测 内部的事务表(transaction
table)将记录此次提交,Oracle 为此事务分配一个唯一的系统变化编号(system change number, SCN),并将其记录在事务表中。
2 The log writer process,LGWR 将SGA内重做日志缓冲区(redo log buffer) 中的重做日志条目(redo log entry) 写入重做日志文件(redo log file)。同时还将此事务的SCN也写入重做日志文件。有以上两个操作构成的原子事件(atomic event) 标志着一个事务成功的提交。
3 Oracle 释放加于表或数据行上的锁。
4 Oracle将事务标记为完成。
注释:事务与undo是紧密相关的