Oracle 事务总结(转)

1、事务概念:  
 概念:在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么完全成功执行,完成整个工作单元操作,要么一点也不执行。  
  主要特性:确保数据库的完整性。  
2、事务的ACID特性  
  对一组SQL语句操作构成事务,数据库操作系统必须确保这些操作的原子性,一致性,隔离性,持久性.  
1、  原子性(Atomicity)  
    事务的原子性是指事务中包含的所有操作要么全做,要么不做,也就是说所有的活动在数据库中要么全部反映,要么全部不反映,以保证数据库的一致性。  
2、  一致性(Consistency)  
    事务的一致性是指数据库在事务操作前和事务处理后,其中数据必须满足业务的规则约束。  
3、  隔离性(Isolation)  
   隔离性是指数据库允许多个并发的事务同时对其中的数据进行读写或修改的能力,隔离性可以防止多个事务的并发执行时,由于它们的操作命令交叉执行而导致数据的不一致性。  
4、  持久性(durability)  
    事务的持久性是指在事务处理结束后,它对数据的修改应该是永久的。即便是系统在遇到故障的情况下也不会丢失,这是数据的重要性决定的。   
  
 
3、事务的控制语句  
   在Oracle数据库中,没有提供开始事务处理语句,所有的事务都是隐式开始的,也就是说在oracle中,用户不可以显示使用命令来开始一个事务.oracle任务第一条修改数据库的语句,或者一些要求事务处理的场合都是事务的隐式开始。但是当用户想要终止一个事务处理时,必须显示使用commit和rollback语句结束。  
  根据事务ACID属性,oracle提供了如下的事务控制语句:  
   Set transaction 设置事物属性  
   Set constrains  设置事物的约束模式  
   约束模式是指:在事务中修改数据时,数据库中的约束立即应用于数据,还是将约束推迟到当前事务结束后应用。  
   Savepoint 在事务中建立一个存储的点.当事务处理发生异常而回滚事务时,可指定事务回滚到某存储点.然后从该存储点重新执行。  
   Release  savepoint  删除存储点  
   Rollback 回滚事务 取消对数据库所作的任何操作  
   Commit 提交事务 对数据库的操作做持久的保存。  
 
 
  3、1设置事物的属性:  
  set transaction语句可用来设置事物的各种属性。该语句必须放在事务处理的第一个语句.  
也就是说,必须在任何insert、update 、delete语句以及其他的事务处理。  
  Set transaction的语句可以让用户对事务的以下属性进行设置  
    指定事务的隔离层  
    规定回滚事务所使用的存储空间  
    命名事务  
 备注:在使用set transaction语句设置属性时,对于规定回滚事务所使用的存储空间的设置很少使用.对于命名事务也非常简单,只有在分布式事务处理中才会体现出命名事务的用途.  
 
 注意:set transaction只对当前事务有效,事务终止,事务当前的设置将会失效。  
 
1、  数据异常  
事务的隔离性定义了一个事务与其它事务的隔离程度.为了更好的理解隔离层,首先讨论一下并发事务对同一个数据库进行访问可能发生的情况.在并发事务中总体来说会发生如下3种情况  
    错读 |脏读  
    非重复读取|不可重复读  
    假读|幻读  
 
    错读|脏读:当一个事务修改数据时,另一事务读取了该数据,但是第一事务由于某种原因取消对数据修改,使数据返回了原状态,这是第二个事务读取的数据与数据库中数据不一致.这就叫错读。  
 
   非重复读取:是指一个事务读取数据库中的数据后,另一个事务则更新了数据,当第一个事务再次读取其中的数据时,就会发现数据已经发生了改变,这就是非重复读取。非重复读取所导致的结果就是一个事务前后两次读取的数据不相同。  
 
   假读:如果一个事务基于某个条件读取数据后,另一个事务则更新了同一个表中的数据,这时第一个事务再次读取数据时,根据搜索的条件返回了不同的行,这就是假读。  
 
    事务中遇到的这些异常与事务的隔离性设置有关,事务的隔离性设置越多,异常就出现的越少,但并发效果就越低,事务的隔离性设置越少,异常出现的越多,并发效果越高。  
2、  选择隔离层  
   针对3中读取的数据时产生的不一致现象,在ANSI SQL标准92中定义了4个事务的隔离级别.如下图所示:  
隔离层 错读|脏读   非重复读取|不可重复读 假读|幻读  
READ UNCOMMITTED(非提交读)  是   是   是  
READ COMMITTED(提交读) 否   是   是  
Repeatable READ(可重复读)   否   否   是  
Serializable(串行读)   否   否   否  
 
Oracle支持上述四种隔离层中的两种:read committed 和serializable。除此之外oralce中还定义read only 和 read write隔离层。  
 Read committed 这是oracle默认的隔离层。  
Serializable:设置事物的隔离层位它时,事务与事务之间完全隔开,事务以串行的方式执行,这并不是说一个事务必须结束才能启动另外一个事务,而是说这些事务的执行的结果于一次执行的事务的结果一致。  
 
Read only和 read write 当使用read only时,事务中不能有任何修改数据库中数据的操作语句,这包括 insert、update、delete、create语句。Read only是serializable的一个子集,区别是read only 只读,而serialzable可以执行DML操作。Read write它是默认设置,该选项表示在事务中可以有访问语句、修改语句.但不经常使用.  
 
 
 
3、  建立set transaction的语句  
 列举如下:  
  Set transaction read only  
  Set transaction read write  
  Set transaction isolation level read committed  
  Set transaction isolation level serializable  
 
注意:这些语句是互斥的.即不能够同时设置两个或者两个以上的选项。  
 
 
4、  结束事务:  
什么情况下代表事务的结束呢?  
     
1、  Commit 提交事务  
2、  rollback 回滚事务
时间: 11-01

Oracle 事务总结(转)的相关文章

oracle事务和锁

数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数据库,执行DML.DCL.DDL语句 结束事务: 1. 执行DDL(例如CREATE TABLE),DCL(例如GRANT),系统自动执行COMMIT语句 2. 执行COMMIT/ROLLBACK 3. 退出/断开数据库的连接自动执行COMMIT语句 4. 进程意外终止,事务自动rollback 5

Oracle事务

Oracle事务的ACID特性 原子性Atomicity:事务中的所有动作要么都发生,要么都不发生. 一致性Consistency:事务将数据库从一种状态转变为下一种一致状态. 隔离性Isolation:一个事务的影响在该事务提交前对其他事务时不可见的. 持久性Durability:事务一旦提交,其影响就是永久性的. 事务控制语句 事务隐式开始 事务必须显示结束(Commit.Rollback) Commit 会结束事务,并使得已做的修改持久的保存在数据库中 Rollback 会结束事务,并撤销

Oracle 事务的開始与结束

事务是用来切割数据库活动的逻辑工作单元,事务即有起点,也有终点: 当下列事件之中的一个发生时,事务就開始了: 连接到数据库上,并运行了第一天 DML 语句: 当前一个事务结束后,又输入了另外一条 DML 语句: 当下列事件之中的一个发生时,事务就结束了: 运行 COMMIT 或 ROLLBACK语句: 运行一条 DLL语句,比如 CREATE TABLE 语句:在这样的情况下, 会自己主动运行 COMMIT 语句: 运行一条 DCL语句,比如GRANT语句:在这样的情况下,会自己主动运行COMM

Oracle 事务操作(事务的回滚与提交)

在看本文之前,请确保你已经了解了Oracle事务和锁的概念即其作用,不过不了解,请参考数据库事务的一致性和原子性浅析和Oracle TM锁和TX锁 1.提交事务 当执行使用commit语句可以提交事务.当执行了commit语句后,会确认事务的变化.结束事务.删除保存点.释放锁.在此之前,与当前事务相关的数据都会被加锁,直到当前事务进行了commit操作,如果在这个过程中有其他回话试图操作相关数据,(这些数据已经被当前事务加锁),那么其他回话会进行等待,或者直接返回错误. 注意:只有在提交事务之后

oracle事务知识点小结

DML语句流程 1 获取事务锁和ITL2 锁定候选行3 生成redo4 生成undo5 生成redo record写入log buffer并更改数据块 事务提交1 分配SCN2 更新事务表,将事务槽状态改为0x093 回收undo块4 创建commit redo record5 将redo从log buffer刷新6 释放表锁和行锁 锁一个事务由1个TX和若干TM组成,而回滚savepoint不会释放TX锁: ITL通过XID指向事务槽,进而指向undo记录,其UBA也指向undo记录:两者区别

oracle事务(转)

今天温习oracle事务,记录如下: 事务定义            事务是保持数据的一致性,它由相关的DDL或者DML语句做为载体,这组语句执行的结果要么一起成功,要么一起失败. 我们知道SQL92标准定义了数据库事务的四个特点: 原子性 (Atomicity) :一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做 一致性 (Consistency) :事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的 隔离性 (Isolation):  

Oracle事务隔离级别处理差异

Oracle事务隔离是事务读操作不同程度的数据隔离,分为READ_UNCOMMITTED.READ_COMMITTED(默认).SERIALIZABLE. Oracle事务隔离级别SERIALIZABLE,解决脏读.不重复读.幻读两个事务同时update相同记录时,第一个事务可执行,第二个事务阻塞,当第一个事务提交后,第二个事务抛出异常如图1.当第一个事务回滚后,第二个事务继续执行. 图1 Oracle事务隔离级别READ_COMMITTED,解决脏读两个事务同时update相同记录时,第一个事

Oracle事务隔离级别

oracle隔离级别 只有READ COMMITTED和 SERIALIZABLE 因为当有人对数据库的数据进行任何写操作(DML操作)时,Oracle数据库系统首先将原始的数据复制到回滚段中,之后才做相应的操作,在事务处理结束之前其他的用户可以读这些数据,但是读到的都是回滚段上的数据. 参考http://www.cnblogs.com/friends-wf/p/3746348.html Oracle事务隔离级别

Oracle事务之一:锁和隔离

Oracle事务之一:锁和隔离 一. 事务概述 事务管理是数据库处理的核心.数据库既要保证用户能并发地执行事务,还要保证数据库的一致性. 当第一条可执行的SQL开始执行,就隐形地开始了一个事务,直到遇到下面的几种情况: 1.Commit:提交事务. 2.RollBack:回滚. 3.DDL语句:执行和提交DDL语句结果前首先提交当前所有DML语句,成为隐式提交. 4.程序正常退出:自动提交. 5.不正常的程序失败:隐式回滚. 二.事务特性 事务的四个特性:A(原子性).C(一致性).I(隔离性)

Oracle 事务的开始与结束

事务是用来分割数据库活动的逻辑工作单元,事务即有起点,也有终点: 当下列事件之一发生时,事务就开始了: 连接到数据库上,并执行了第一天 DML 语句: 当前一个事务结束后,又输入了另外一条 DML 语句: 当下列事件之一发生时,事务就结束了: 执行 COMMIT 或 ROLLBACK语句: 执行一条 DLL语句,例如 CREATE TABLE 语句:在这种情况下, 会自动执行 COMMIT 语句: 执行一条 DCL语句,例如GRANT语句:在这种情况下,会自动执行COMMIT语句: 断开与数据库