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

Oracle的事务

    博客分类:
  • DB
 
阅读更多
显式调用
编写Oracle程序的时候,一个比较好的习惯就是要显示地执行Commit或者Rollback. 一些工具如Sqlplus在退出的时候,会自动commit,而另外一些则会rollback。 如果过分的依赖这些隐式地调用,那么有可能造成不可预估的后果。
 
SET TRANSACTION    或者  DBMS_TRANSACTION 可以显示地开始一个事务, 但这不必要, Oracle在执行第一个修改语句的时候,会隐式开始一个事务。
 
SAVEPOINT:  beforeDoTax
定义个mark point, 方便rollback到指定的位置。
 
 
COMMIT / ROLLBACK / ROlLBACK to beforeDoTax
提交或回滚到指定位置
 
在存储过程中,使用到COMMIT/ROLLBACK被认为是一个不是很好的编程实践,因为这个Commit和Rollback应该让调用者来实现,调用者才知道什么时候应该Commit和Rollback.
 
在Exception的处理中,如果只有WHEN OTHERS,而没有RAISE/RAISE_APPLICATION_ERROR,这一般被看成是一个Bug,因为他把原来的Exception悄无声息地忽略掉了。11g中如果没有RAISE,会产生一个编译的WARNING.
 
 
COMMIT 和 COMMIT WRITE NOWAIT
commit正常情况下是需要等待IO操作完成,修改写入redo日志才返回,这个期间用户在等待。这样就能确保即使硬件损坏,仍然能够让数据永久保存。
而commit wrie nowait的行为则是不需要等待IO完成,立刻返回,默认一定会写入redo日志。
 
nowait的用法比较特殊,一般情况下不能使用,不能为了提高性能而考虑使用nowait。特殊情况:
  • 某些时效性很强的数据,如证券交易,突然硬件坏掉,导致交易失败,这些数据不作处理是可以接受的。
  • 批处理的数据,用Flag列能够标识出哪些已经处理,哪些未处理,即使硬件坏掉后,再恢复的时候,也可以继续执行。
 
约束的验证是在执行完成之后
约束的验证是在SQL执行后,才进行验证的,而不是执行前,或者执行中
create table t(x init unique);
insert into t value (1);
insert into t value (2);
update t set x=x+1; 
如果是执行中验证,那么是有unique的问题,而执行完则没有。
 
 
透明分布式事务
Oracle使用DB Link能够在一个数据的Session中,直接使用其他数据库的表,并把这些对不同的数据库的操作归并到一个事务里面,可以依据需求进行Commit和Rollback,这样就把分布式数据库的事务处理透明化了
 
自治事务
pragma autonomous_transaction 极少数情况能够用到, 比较合理的是用在log里面,将log存入到table。即使归滚了,log方法里面的自治事务还是能够将log信息保存好。
 
事务编程中的不好的习惯
逐行提交
过程化的java/plsql编程语言很容易引入逐行提交,也就是在一个循环语句中进行了逐行commit. 通常的误区是认为这样commit的方式效率高, 或者认为没有足够的undo空间,比如看到了ORA_1555的错误。
 
逐行提交通常不会比一次性提交更快, 另外还需要考虑的一点是,如果过程实现了一般,然后失败了,如何继续的问题。一般会要引入新的代码来实现。 而如果是一次性提交则没有这个问题。
 
UNDO空间
这是必须的,没必要节省,需要保持在一个正常的范围。
 
 
不加conn.setAutoCommit(false)
如果代码不加这部分,多条update被自动commit,就有可能在异常发生时,丢失数据更新
 
0
0
分享到:
评论

相关推荐

    Oracle事务与锁定

    Oracle事务与锁定是数据库管理系统中的核心概念,它们对于确保数据的完整性和一致性至关重要。事务是数据库操作的基本单元,它封装了一系列的数据库操作,确保这些操作要么全部成功,要么全部失败,从而保持数据库的...

    oracle 事务 回滚 存储过程

    本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### Oracle事务 在数据库操作中,事务是一系列操作的集合,这些操作要么全部成功,要么全部失败。事务具有ACID...

    oracle事务处理

    Oracle 事务处理 Oracle 事务处理是指在 Oracle 数据库中对数据进行操作时,确保数据的一致性和完整性的一种机制。事务处理是 Oracle 数据库的核心功能之一,通过事务处理,数据库可以确保数据的一致性和完整性,...

    java Oracle事务处理

    java 代码写的关于Oracle的 事务处理

    oracle事务1.ppt

    Oracle事务管理 Oracle事务是一组数据库命令,构成单一逻辑工作单元的操作集合,是不可分割的工作逻辑单元。事务控制是数据库管理系统中最重要的部分之一,它确保了数据库的一致性和可靠性。 事务的特性: * 原子...

    oracle事务.ppt

    Oracle事务管理 Oracle事务是指一组数据库命令,构成单一逻辑工作单元的操作集合。事务是访问并可能更新各种数据项的一个程序执行单元,是不可分割的工作逻辑单元。执行并发操作的最小控制单位。 事务的特性包括...

    oracle事务完整流程分析

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

    oracle 事务

    总的来说,Oracle事务和EJB的结合为分布式企业级应用提供了强大的数据管理能力,使得开发者能够构建出高可用、高性能且数据一致的应用系统。理解并掌握事务管理机制,对于优化数据库操作、提升系统性能至关重要。

    Oracle事务、锁表查询及相关实用查询SQL语句

    ### Oracle事务、锁表查询及相关实用查询SQL语句 #### 一、Oracle事务管理 在Oracle数据库中,事务是作为一组逻辑操作单元处理的一系列数据库操作。这些操作要么全部成功,要么全部失败,确保了数据的一致性和完整...

    oracle事务.pptx

    Oracle 事务管理 Oracle 事务是指一组数据库命令,构成单一逻辑工作单元的操作集合,是不可分割的工作逻辑单元。事务控制是数据库管理系统的核心之一,目的是为了确保数据库操作的安全、可靠和高效。 事务的特性:...

    oracle事务与死锁

    本文将详细介绍Oracle数据库中事务的概念、操作、控制以及死锁的原理和处理方法,但不涉及具体的Java设计模型或代码样例,仅以Oracle事务和死锁为主题进行讨论。 ### 事务概念 在Oracle中,事务是确保数据库数据...

    Oracle事务.docx

    ### Oracle事务的核心特性详解 #### 一、引言 在Oracle数据库系统中,事务是数据库管理系统执行过程中的最小逻辑单元,它确保了数据处理的完整性和一致性。事务管理是数据库系统的重要组成部分,对于保证数据的...

    07.Oracle事务1

    Oracle 事务是数据库管理系统中确保数据一致性的重要机制。在Oracle中,事务是由一系列SQL语句组成的逻辑工作单元,它们作为一个整体被执行,确保要么全部成功,要么全部失败,从而保证数据的完整性和一致性。 1. *...

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

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

    ORACLE事务处理机制探析.pdf

    本文将深入探讨Oracle事务处理的运行机制、实现方法,并通过实例解析事务处理的整个流程。 首先,事务是数据库操作的基本单位,它封装了一组逻辑相关的SQL语句,这些语句要么全部执行,要么全部回滚,以此保证数据...

    Oracle事务处理

    Oracle 事务处理是数据库操作的核心概念,它确保了数据的完整性和一致性。事务是一组逻辑操作,这些操作被视为单个单元,必须全部成功执行或全部回滚,以防止数据不一致。这种机制对于多用户环境中的并发操作尤其...

Global site tag (gtag.js) - Google Analytics