显式调用
编写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,这样就把分布式数据库的事务处理透明化了
Oracle使用DB Link能够在一个数据的Session中,直接使用其他数据库的表,并把这些对不同的数据库的操作归并到一个事务里面,可以依据需求进行Commit和Rollback,这样就把分布式数据库的事务处理透明化了
自治事务
pragma autonomous_transaction 极少数情况能够用到, 比较合理的是用在log里面,将log存入到table。即使归滚了,log方法里面的自治事务还是能够将log信息保存好。
pragma autonomous_transaction 极少数情况能够用到, 比较合理的是用在log里面,将log存入到table。即使归滚了,log方法里面的自治事务还是能够将log信息保存好。
事务编程中的不好的习惯
逐行提交
逐行提交
过程化的java/plsql编程语言很容易引入逐行提交,也就是在一个循环语句中进行了逐行commit. 通常的误区是认为这样commit的方式效率高, 或者认为没有足够的undo空间,比如看到了ORA_1555的错误。
逐行提交通常不会比一次性提交更快, 另外还需要考虑的一点是,如果过程实现了一般,然后失败了,如何继续的问题。一般会要引入新的代码来实现。 而如果是一次性提交则没有这个问题。
UNDO空间
这是必须的,没必要节省,需要保持在一个正常的范围。
这是必须的,没必要节省,需要保持在一个正常的范围。
不加conn.setAutoCommit(false)
如果代码不加这部分,多条update被自动commit,就有可能在异常发生时,丢失数据更新
相关推荐
Oracle事务与锁定是数据库管理系统中的核心概念,它们对于确保数据的完整性和一致性至关重要。事务是数据库操作的基本单元,它封装了一系列的数据库操作,确保这些操作要么全部成功,要么全部失败,从而保持数据库的...
本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### Oracle事务 在数据库操作中,事务是一系列操作的集合,这些操作要么全部成功,要么全部失败。事务具有ACID...
Oracle 事务处理 Oracle 事务处理是指在 Oracle 数据库中对数据进行操作时,确保数据的一致性和完整性的一种机制。事务处理是 Oracle 数据库的核心功能之一,通过事务处理,数据库可以确保数据的一致性和完整性,...
java 代码写的关于Oracle的 事务处理
Oracle事务管理 Oracle事务是一组数据库命令,构成单一逻辑工作单元的操作集合,是不可分割的工作逻辑单元。事务控制是数据库管理系统中最重要的部分之一,它确保了数据库的一致性和可靠性。 事务的特性: * 原子...
Oracle事务管理 Oracle事务是指一组数据库命令,构成单一逻辑工作单元的操作集合。事务是访问并可能更新各种数据项的一个程序执行单元,是不可分割的工作逻辑单元。执行并发操作的最小控制单位。 事务的特性包括...
首先,要了解Oracle事务的完整流程,首先要明白客户端与服务端的连接机制。Oracle客户端与服务端的连接通过网络实现,这一过程中可以使用不同的连接类型。一种是专用服务器连接(dedicated server),另一种是共享...
总的来说,Oracle事务和EJB的结合为分布式企业级应用提供了强大的数据管理能力,使得开发者能够构建出高可用、高性能且数据一致的应用系统。理解并掌握事务管理机制,对于优化数据库操作、提升系统性能至关重要。
### Oracle事务、锁表查询及相关实用查询SQL语句 #### 一、Oracle事务管理 在Oracle数据库中,事务是作为一组逻辑操作单元处理的一系列数据库操作。这些操作要么全部成功,要么全部失败,确保了数据的一致性和完整...
Oracle 事务管理 Oracle 事务是指一组数据库命令,构成单一逻辑工作单元的操作集合,是不可分割的工作逻辑单元。事务控制是数据库管理系统的核心之一,目的是为了确保数据库操作的安全、可靠和高效。 事务的特性:...
本文将详细介绍Oracle数据库中事务的概念、操作、控制以及死锁的原理和处理方法,但不涉及具体的Java设计模型或代码样例,仅以Oracle事务和死锁为主题进行讨论。 ### 事务概念 在Oracle中,事务是确保数据库数据...
### Oracle事务的核心特性详解 #### 一、引言 在Oracle数据库系统中,事务是数据库管理系统执行过程中的最小逻辑单元,它确保了数据处理的完整性和一致性。事务管理是数据库系统的重要组成部分,对于保证数据的...
Oracle 事务是数据库管理系统中确保数据一致性的重要机制。在Oracle中,事务是由一系列SQL语句组成的逻辑工作单元,它们作为一个整体被执行,确保要么全部成功,要么全部失败,从而保证数据的完整性和一致性。 1. *...
通过深入理解Oracle事务的这些基本概念和特性,数据库管理员和开发人员能够更好地控制数据的变更,确保数据的完整性和一致性,从而提高系统的稳定性和可靠性。实践中,应根据具体的应用场景和需求选择合适的事务隔离...
本文将深入探讨Oracle事务处理的运行机制、实现方法,并通过实例解析事务处理的整个流程。 首先,事务是数据库操作的基本单位,它封装了一组逻辑相关的SQL语句,这些语句要么全部执行,要么全部回滚,以此保证数据...
Oracle 事务处理是数据库操作的核心概念,它确保了数据的完整性和一致性。事务是一组逻辑操作,这些操作被视为单个单元,必须全部成功执行或全部回滚,以防止数据不一致。这种机制对于多用户环境中的并发操作尤其...