`
talentluke
  • 浏览: 606627 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ORACLE的事务基础

 
阅读更多

1   事务的定义
     数据库事务是由一组 SQL 语句组成的一个逻辑工作单元。您可以把事务看作是一组不可分的 SQL 语句,这些语句作为一个整体永久记录在数据库中或一并撤销。比如在银行帐户之间转移资金:一条 UPDATE 语句将从一个帐户的资金总数中减去一部分,另一条 UPDATE 语句将把资金加到另一个帐户中。减操作和加操作必须永久记录在数据库中,或者必须一并撤销 — 否则将损失资金。这个简单的示例仅使用了两条 UPDATE 语句,但一个更实际的事务可能包含许多 INSERT、UPDATEDELETE 语句。
事务开始: 当第一个DML语句一个事务开始(数据操纵语言:insert、delete、select、update增、删、查、改)
事务结束: 当一个commitrollback语句被触发
          当一个DDL语句执行,(数据定义语言 create、alter、drop、truncate)
          当一个DCL语句执行,(数据控制语言 grant、revoke(授权、回收)、set role)
          用户退出
          机器失效或者崩溃
一个事务结束后,下一个可执行的SQL语句自动开始下一个事务,
一个DDL语句或者一个DCL语句自动提交,并且因此一个事务隐式结束.

2 控制事务
       1) commit和rollback语句的优点:
                 确保数据的一致性
                 在数据永久改变之前进行预览
                 分组逻辑相关的操作
        2) 控制事务:
                 commit 结束当前事务,使得所有未决的数据永久改变
                 savepoint name 在当前事务中标记保存点
                 rollback 结束当前事务,丢弃所有未决的数据改变
                 rollback to savepoint name 回滚当前事务到指定的保存点,从而丢弃保存点创建后的任何改变.如果忽略 to savepoint子句,rollback语句回滚整个事务.由于保存点是逻辑的,因此,没有办法列出已经创建的保存点
        3) 可以用savepoint语句在当前事务中创建一个标记
                 用rollback to savepoint 语句回退到哪个标记
                 例如:
                 update .........
                 savepoint update_done;
        
                 insert..........
                 rollback to update_done;
                 回退到保存点,可以用savepoint语句创建一个标记,它把事务分为较小的部分
                 rollback to savepoint语句丢弃未决的改变到该标记.如果你用与前面的保存点相同的
                 名字创建了另一个保存点,哪个早一点时间创建的保存点就被删除了.
                 select * from testtable t;
                 update testtable set content ='11pp1' where id = 1;
                 commit;
                 savepoint kk;
                 insert into testtable values(12,'kingking',sysdate);
                 rollback to kk;
                 commit;
         4) 隐式事务处理
                 在正常的情况下,一个自动提交发生:
                   DDL语句被发送
                   DCL语句被发送
                   正常退出,没有明确地发送commit或rollback语句
                   在正常的情况下,一个自动回滚发生:
                   系统发生异常,或者非正常退出
         5) commit或rollback之前的数据状态
                事务中所在的每一个数据改变在事务被提交之前都是临时的,在commit或rollback语句发布之前数据的状态:
                  .数据操纵操作首先影响数据库缓冲区,因此,数据以前的状态可以被恢复.
                  .当前用户可以查询表观察到数据操纵操作的结果.
                  .其他用户不能观察到当前所做的数据操纵操作的结果.oracle服务器用读一致性定每个用户看到的数据和上次提交时相同.
                  .其他用户不能改变受影响的行中的数据.
         6) 在commit之后数据的状态
                 .数据在数据库中被永久地改变.
                 .数据以前的状态永久地丢失.
                 .所有用户可以观察到事务的结果.
                 .受影响的行的锁定被释放:其他用户可以操纵那么行.
                 .所有保存点给擦除.
          7) rollback后的数据状态
                 .数据的改变被撤消.
                 .数据的以前的状态被恢复.
                 .受影响行的被释放.
          8) 语句级rollback
                 .如果一个语句的执行错误被发现,一个事务的一部分可以用隐式的回退丢弃.如果一个单个的DML语句在一个事务的执行期间失败,它的影响被一个语句级的回退撤消, 但在事务中的以前已经由DML语句完成的改变不能丢弃,它们可以由用户显示地提交或回滚.
                 .oracle在任何DDL(create,建表)语句之前和之后发布一个隐式的提交.所以即使你的DDL语句执行不成功,你也不能回退前面的语句,因此服务器已经发布提交命令.
                 .执行commit或rollback语句来明确地结束事务.
                 .oracle服务器在数据上实现以防止对数据库中数据的并发操作, 当一个DML语句成功执行时,数据库上的隐式锁被获得,默认情况下,oracle服务器在尽可能的最低级别锁定数据执行带for update子句的lock table语句或select语句可以手动获得数据库上的锁.

3 读一致性
                1)数据库用户用两种方法访问数据库:
                    读操作(select 语句)
                    写操作(插入,更新,删除语句)                
                2)你需要读一致性,所以有下面事发生:
                    数据库读者和写者被确保对数据观察的一致性.
                    读者不能观察正在变化过程中的数据.
                    写者被确保对数据库的改变以一致的方式进行.
                    一个写者所做的改变不破坏另一个写者所做的改变或与其冲突.
                3) 读一致性的目的是确保每个用户看到的数据和他最后一次提交,并且在一个DML操作操作开始之前的数据一样.
                读一致性是一种自动的执行,该操作在回退段保持一个数据库的局部的拷贝.对数据库进行一个插入,更新或者删除时,oracle服务器在数据改变之前获得相关数据的拷贝,并且将这些数据写到一个回退段(undo segment).所有读数据者,除了发布修改命令的用户,看到的数据还是改变之前的状态;他们看到数据是回退段数据快照.在改变被提交到数据库之前,只有正在修改数的用户能看见数据库的改变,除了他之外的任何人看到都是回退段的快照,这样就确保数据的读者读到一致的数据, 而不是当前正在被修改的数据.
                4) 当一个DML语句被提交的时,对数据库所做的改变对任何执行select语句的人成为可见的.在回退段的文件中被旧数据占用的空间被释放以重新使用.
         
4 锁定:
               1) 锁是防止访问相同资源的事务之间的破坏性交互机制.即可以是用户对象(如表或行),也可以是对用户不可见的系统对象(例如共享数据结构和数据字典).
               2) oracle数据库怎么锁定数据
                   oracle锁被自动执行,并且不要求用户干预.对于SQL语句隐式锁是必须的,依赖被请求的动作.隐式锁定除了select外,对所有的SQL都发生.当执行数据操纵语言(DML,insert)操作时,oracle服务器通过DML所防止数据被同时操纵.
                   用户也可以手动锁定数据,这叫显示锁定.
               3) 隐式锁定:
                2种锁的模式:
                     独占锁:不允许其他用户访问
                     共享锁:允许其他用户访问
                高级数据并发操作:
                     DML:表共享,行独占
                     查询:不需要锁
                     DDL:保护对象定义
                共享锁是在表级在DML操作期间自动获得的.用这个模式,几个事务可以在相同的资源上获得共享锁.
                对于用DML语句修改的每一行,独占锁被自动获得.独占锁在本事务被提交或回滚之前防止行被其他事物修改.该锁确保无其他用户能够在相同的时间修改相同的行,并且覆盖另一个还没有提交的改变.当你修改数据库对象时,DDL锁发生.

 

分享到:
评论

相关推荐

    Oracle数据库基础教程[孙风栋等编著][习题解答

    本教程《Oracle数据库基础教程》由孙风栋等编著,旨在帮助初学者系统地理解和掌握Oracle数据库的基本概念、操作以及应用。 教程中的习题解答部分是学习过程中的重要辅助资料,它可以帮助读者检验自己的理解程度,...

    oracle基础教程

    oracle基础教程 课程说明 1 课程介绍 1 课程目标 1 相关资料 1 第1章 ORACLE数据库概述 2 1.1 产品概述 2 1.1.1 产品简介 2 1.1.2 基本概念 3 1.2 ORACLE系统结构 4 1.2.2 ORACLE物理结构 4 1.2.3 系统全局区 6 ...

    Oracle事务概念及基础知识.pdf

    通过深入理解Oracle事务的这些基本概念和特性,数据库管理员和开发人员能够更好地控制数据的变更,确保数据的完整性和一致性,从而提高系统的稳定性和可靠性。实践中,应根据具体的应用场景和需求选择合适的事务隔离...

    《Oracle 12c数据库基础教程》教学课件—12办公事务管理系统(Visual C#).pdf

    《Oracle 12c数据库基础教程》教学课件—12办公事务管理系统(Visual C#).pdf《Oracle 12c数据库基础教程》教学课件—12办公事务管理系统(Visual C#).pdf《Oracle 12c数据库基础教程》教学课件—12办公事务管理系统...

    oracle事务完整流程分析

    首先,要了解Oracle事务的完整流程,首先要明白客户端与服务端的连接机制。Oracle客户端与服务端的连接通过网络实现,这一过程中可以使用不同的连接类型。一种是专用服务器连接(dedicated server),另一种是共享...

    Oracle基础教程

    * 数据库实例(Instance):是 Oracle 数据库的核心组件,负责管理数据库的存储、查询和事务处理。 * 数据库文件(Database File):是 Oracle 数据库的存储单元,用于存储数据和索引。 * 表空间(Tablespace):是 ...

    Oracle从基础到应用

    Oracle从基础到应用的知识通常涉及以下几个核心知识点: 1. 数据库基础知识 - 关系数据库管理系统的原理和特点,以及非关系数据库和NoSQL数据库的区别。 - 数据库的三级模式结构,包括外模式、概念模式和内模式。...

    Oracle核心基础总结

    12. 事务与并发控制:理解事务的ACID属性(原子性、一致性、隔离性和持久性),以及Oracle的锁定机制和多版本并发控制(MVCC)。 13. 实例与服务:Oracle实例是内存结构和后台进程的集合,服务则是连接到特定实例的...

    oracle事务.pptx

    总结来说,Oracle事务是确保数据库操作正确性和一致性的基础,通过理解事务的特性、并发处理中的问题以及如何通过COMMIT和ROLLBACK进行控制,能够有效地维护数据库的稳定性和数据的准确性。在实际的数据库管理中,...

    oracle dba基础知识

    Oracle DBA基础知识是数据库管理的重要领域,特别是在Oracle数据库系统中,DBA(Database Administrator)的角色至关重要。本篇文章将深入探讨Oracle DBA所必备的基础知识,包括Oracle的体系结构、内存结构、后台...

    oracle基础学习pdf

    "Oracle基础学习pdf"提供了一系列教程,旨在帮助新手入门并让有经验的开发者进行查阅。下面将根据提供的文件列表,深入讲解每个章节涵盖的关键知识点。 1. **第0章 开篇** - Oracle概述:介绍Oracle数据库的基本...

    Oracle数据库基础教程[孙风栋等编著][习题解答]

    通过这本教程,读者可以掌握Oracle数据库的基础知识,包括数据模型、SQL语言、数据库设计与管理、事务处理、备份恢复等方面。 1. 数据模型:教程会介绍三种主要的数据模型——层次模型、网络模型和关系模型,重点...

    oracle四大宝典之1:Oracle Sql基础

    在本文中,我们将详细探讨Oracle SQL的基础知识,包括其重要概念、数据类型、查询语句、表的操作以及事务处理。 1. **SQL简介**: SQL(Structured Query Language)是用于管理和操作关系数据库的标准语言。Oracle...

    Oracle数据库基础教程-参考答案

    - **Oracle数据库优势**:支持高并发事务处理,标准接口,安全性与完整性控制,分布式数据处理,良好的移植性与兼容性。 - **应用系统结构**:客户机/服务器(C/S)、浏览器/服务器(B/S)及分布式数据库系统,反映了...

    Oracle 基础知识 -大全- 原创整理.pdf

    9. **Oracle事务** 事务是数据库操作的基本单位,确保数据的一致性和完整性。BEGIN、COMMIT、ROLLBACK语句控制事务的开始、提交和回滚。 10. **SQL函数** Oracle提供了大量的内置函数,如数学函数、字符串函数、...

    Oracle数据库基础教程和答案

    本教程将为你提供Oracle数据库的基础知识,帮助你踏入这个领域的门槛。以下是对标题和描述中涉及知识点的详细解释: 1. **Oracle数据库系统**: Oracle数据库是由甲骨文公司开发的SQL数据库,它支持多种数据类型,...

    Oracle数据库基础知识--华为

    "Oracle数据库基础知识 ISSUE1.0"可能是华为内部的技术文档或培训材料,涵盖了Oracle数据库的基础概念、操作和实践案例。对于初学者来说,这样的文档能够帮助理解Oracle的基本工作原理,掌握基本的SQL语法,并了解...

Global site tag (gtag.js) - Google Analytics