ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 事务介绍

事务介绍

原创 Linux操作系统 作者:zhaojienju 时间:2010-12-14 14:09:05 0 删除 编辑

事务

 

原子性:要么全做,要么不做

一致性:事务前和后数据库状态有一致性

隔离性:事务中的临时状态对外部隔离,不可见

持久性:事务造成的改变持久

 

事务的开始:DML/DDL语句或者SET TRANSACTION

事务开始后,oracle给该事务分配一个可用的undo data段,分配完才会产生transaction id。

 

事务的结束:

Commit/rollback语句

DDL语句 create/drop/rename/alter 数据库在每条DDL前后隐式的commit

用户正常退出,导致当前事务隐式提交

用户进程异常中止,导致事务回退

 

Oracle支持语句级原子性,一个sql语句是一个原子单位。

 

SCN (system change number)是oracle内部使用的逻辑时间戳。Oracle在SGA中对SCN进行加一操作。当一个事务修改数据,数据库对分配给该事务的undo数据段写一个新的SCN号。

 

事务控制语句:commit, rollback, savepoint

 

SET TRANSACTION NAME xxx

事务名便于监控运行时间长的事务,写入LogMiner,方便查找(V$TRANSACTION)。

 

Active transaction: transaction开始后,没有提交或回退前的状态。

 

在事务开始后,

1. oracle 产生undo data,放在SGA.

2. oracle产生redo欣喜,放在SGA中的online redo log buffer

3. 数据修改放到了SGA中的database buffer。并不是被DBWn立即写到data file中

4. 和数据修改相关的行被锁住。

 

Savepoint: 回退到一个savepoint意味着该savepoint以后的操作都回退,但该事务本身并不回退,也就是savepoint之前的操作依然可以选择commit or rollback。

Oracle保留rollback to savepoint语句中指定的这个savepoint,但之后的savepoint都会丢失。

Oracle释放该savepoint之后所有的表锁和行锁,但仍保留该savepoint之前的数据锁。

 

当事务回退到某个savepoint,其他在等待资源的事务可能还在等待。因为当一个事务等待另一个事务锁住的资源时,它就会在该事务后排队,尽管该事物可能rollback to savepoint,并且释放了资源。 

 

Rllback操作:

1. 用undo段信息undo所有的操作.事务表中每一个active事务都有指针指向该事务对应得undo data。数据库读取undo data,反向修改数据,然后将undo entry标成applied。

2. 释放该事务拿的锁

3. 取消事务中所有savepoint

4.结束事务

 

Commit操作:

1. 为commit操作产生一个SCN号。内部的事务表纪录该事物已经提交,并把分配的SCN号纪录在表中。

2. LGWR (log writer)进程把redo log buffer中剩下的redo log entries和SCN号写入online redo log。

3. oracle释放对表和行的锁。

4. oracle删除savepoint.

5. oracle执行commit cleanout,将事务的锁相关信息从SGA block中删除

6. oracle标记该事务结束

 

通常来说commit操作是很快的,不和修改数据量成正比增长。最花时间的部分是LGWR进行的物理i/o。

 

Autonomous transaction自治事务,不管调用它的事务是提交还是回退,自治事务独立运行。

1. 它看不到主事务的未提交操作,不共享锁或者资源

2. 自治事务中的操作在提交后,对其他事务可见。不需要等待主事务结束

3. 自治事务可以启动其他自治事务

 

PROCEDURE XXX IS

PRAGMA AUTONOMOUS

XXX

 

在分布式系统里,可以通过两阶段提交来保证数据的一致性。在多个数据库中,一个数据库做协调者,问其他数据库是否准备好提交,任何一个数据库没有准备好,则全部回退,否则协调者广播,所有数据库提交。

 

在两阶段提交中,如果遇到系统或者网络问题,在恢复后,recoverer (RECO)进程会协调解决。如果一直没有恢复,则只能由本地administrator手动提交或回退。

 

 

 

 

 

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

上一篇: lock 锁
下一篇: 物理存储结构
请登录后发表评论 登录
全部评论

注册时间:2010-10-05

  • 博文量
    80
  • 访问量
    205929