Oracle事务的特征

ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity)、一致性 (Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持交易(Transaction)的 数据库系统,必需要具有这四种特性,否则在交易过程(Transaction processing)当中无法保证数据 的正确性,交易过程极可能达不到交易方的要求.

原子性 (ATOMICITY)

整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执 行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性 (CONSISTENCY)

在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

隔离性 (ISOLATION)

两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

持久性 (DURABILITY)

在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

一事务处理介绍

事务是这样一种机制,它确保多个SQL语句被当作单个工作单元来处理。事务具有以下的作用:

* 一致性:同时进行的查询和更新彼此不会发生冲突,其他用户不会看到发生了变化但尚未提交的 数据。

* 可恢复性:一旦系统故障,数据库会自动地完全恢复未完成的事务。

二事务与一致性

事务是完整性的单位,一个事务的执行是把数据库从一个一致的状态转换成另一个一致的状态。因 此,如果事务孤立执行时是正确的,但如果多个事务并发交错地执行,就可能相互干扰,造成数据库状 态的不一致。在多用户环境中,数据库必须避免同时进行的查询和更新发生冲突。这一点是很重要的, 如果正在被处理的数据能够在该处理正在运行时被另一用户的修改所改变,那么该处理结果是不明确的 。

不加控制的并发存取会产生以下几种错误:

1 丢失修改(lost updates)

当多个事务并发修改一个数据时,不加控制会得出错误的结果,一个修改会覆盖掉另一个修改。

2 读的不可重复性

当多个事务按某种时间顺序存取若干数据时,如果对并发存取不加控制,也会产生错误。

3 脏读(DIRDY DATA),读的不一致性

4 光标带来的当前值的混乱

事务在执行过程中它在某个表上的当前查找位置是由光标表示的。光标指向当前正处理的记录。当 处理完该条记录后,则指向下一条记录。在多个事务并发执行时,某一事务的修改可能产生负作用,使 与这些光标有关的事务出错。

5 未释放修改造成连锁退出

一个事务在进行修改操作的过程中可能会发生故障,这时需要将已做的修改回退(Rollback)。如 果在已进行过或已发现错误尚未复原之前允许其它事务读已做过修改(脏读),则会导致连锁退出。

6 一事务在对一表更新时,另外的事务却修改或删除此表的定义。

数据库会为每个事务自动地设置适当级别的锁定。对于前面讲述的问题:脏读、未释放修改造成的 连锁退出、一事务在对一表更新时另外的事务却修改或删除此表的定义,数据库都会自动解决。而另外 的三个问题则需要在编程过程中人为地定义事务或加锁来解决。

时间: 2024-11-01 17:03:49

Oracle事务的特征的相关文章

Oracle 事务特征 管理 读取详解

Oracle 事务的特征    ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持交易(Transaction)的数据库系统,必需要具有这四种特性,否则在交易过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求.  原子性 (ATOMICITY)     整个事务中的所有操作,要么全部完成,要么全部

oracle事务和锁(转)

If you use a SET TRANSACTION statement, then it must be the first statement in your transaction. However, a transaction need not have a SET TRANSACTIONstatement. Syntax set_transaction::=   http://docs.oracle.com/cd/B28359_01/server.111/b28286/statem

oracle事务commit之后游标是否会自动关掉呢?

问题描述 oracle事务commit之后游标是否会自动关掉呢? 看了公司前辈的代码,declare一个游标,分批次commit,然后关掉循环,commit,直接end了,忘了关游标,结果安全走完了没报错,放在工程里也安全走下来了没报错.我自己写的是在打开游标之前先判断游标是否开着,如果开着就先关闭再打开,其余的步骤同上,结果也是没报错.这是为什么呢?commit后就不需要手动关闭游标吗? 解决方案 " 我自己写的是在打开游标之前先判断游标是否开着,如果开着就先关闭再打开" 如果不再打

Oracle事务控制总结

一.Oracle事务控制:     1.组成单个逻辑工作单元的一系列操作被称为事务.     2.数据库事务组成:          1.0~多条DML语句          2.1条DDL(Data Define Language)语句          3.1条DCL(Data Control Language)语句     3.事务特性(ACID):          -原子性(Atornicity)          -一致性(Consistency)          -隔离性(Iso

浅谈Oracle事务开始与结束

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

oracle事务管理相关问题总结

1.oracle对一条sql语句的执行是怎么管理并发和恢复控制的? 一条符合语法的sql语句,定义了对数据库的操作.此操作执行的时刻,对应了数据库的一个数据状态.可以这样理解这个状态:到此执行时刻为止,没有任何数据库语句级操作正在并发执行;就是说实际上正在并发执行的多个语句级操作可以假定在此语句操作之后执行.这里强调语句级操作,是指如果一个事务包含多个操作语句,在此时刻实际已经执行了其中几个,此时刻也正在执行某一个语句,那么不能简单地认为前面几个执行的操作语句也还没发生,这是要看事务的隔离级别的

查看ORACLE事务隔离级别方法(转)

众所周知,事务的隔离级别有序列化(serializable),可重复读(repeatable read),读已提交(read committed),读未提交(read uncommitted).根据隔离级别的等级,对事务隔离的严格度也不同,如序列化的隔离级别最严格,并发的效果就越不理想,各种数据库都有对事务隔离的支持,那么如何查看ORACLE对事务的隔离级别呢?还是做个试验验证吧 一 首先做个测试表,表结构和其中的数据如下 ID PHONE 43071 126811 二 打开一个session,

查看ORACLE事务隔离级别方法

众所周知,事务的隔离级别有序列化(serializable),可重复读(repeatable read),读已提交(read committed),读未提交(read uncommitted).根据隔离级别的等级,对事务隔离的严格度也不同,如序列化的隔离级别最严格,并发的效果就越不理想,各种数据库都有对事务隔离的支持,那么如何查看ORACLE对事务的隔离级别呢?还是做个试验验证吧 一 首先做个测试表,表结构和其中的数据如下     ID    PHONE   43071 126811 二 打开一

Oracle中死事务的检查语句_oracle

SQL> SELECT KTUXEUSN, KTUXESLT, KTUXESQN, /* Transaction ID */ 2 KTUXESTA Status, KTUXECFL Flags ,KTUXESIZ 3 FROM x$ktuxe 4 WHERE ktuxesta!='INACTIVE'; KTUXEUSN KTUXESLT KTUXESQN STATUS FLAGS KTUXESIZ ---------- ---------- ---------- ----------------