【DB.Oracle】事务transaction的隐式提交commit
2014-10-16 01:02
330 查看
隐式提交的定义
又名自动提交,即无需显示执行commit语句,session中的操作被自动提交到数据库的过程。隐式提交的方式
正常执行完ddl语句。包括create,alter,drop,truncate,rename。正常执行完dcl语句。包括grant,revoke。
正常退出sql*plus,没有明确发出commit或者rollback。
隐式提交的注意事项
执行ddl语句时,前面的dml操作也会被提交到数据库中因为是在一个session里,那执行ddl语句的时候前面的dml语句肯定也会“不可幸免”的被提交到库中。
即使ddl语句执行失败,前面的dml操作也会被提交到数据库中
这就有点儿让人奇怪了,ddl都执行失败了,怎么还会提交呢?这就需要探究一下隐式提交的本质了(下文有叙述)。
在前面1和2的基础上总结
为了避免隐式提交或者回滚,尽量保证一条或者几条DML操作完成后有显示的提交或者回滚,防止后续执行的DCL或者DDL自动提交前期的DML操作。
隐式提交的本质
一条ddl语句执行了两次commitcommit; ddl statement; commit;
第一个commit将当前session中未提交的事务隐式提交,以保证ddl语句失败时的回滚位置。
第二个commit将ddl
为什么需要隐式提交?
为了保证事务的一致性。我们在执行ddl语句的时候,oracle需要在它的系统表中进行元数据的记录操作(即:除了建表还会进行不少insert操作),如果它不隐式提交就无法保证一致性;从内部运行机制来看ddl语句和dml语句还是有很大区别的,dml会对每个语句的每条记录都做日志记录以便于回滚,而ddl往往没必要搞这么复杂,从功能和易用性上看隐式提交都是最好的选择。
相关文章推荐
- Asp.net Oracle transaction事务出现奇怪的aotucommit自动提交现象及解决办法
- oracle退出session的隐式提交事务,小心,小心
- Android碎片事务提交transaction.commit()和transaction.commitnow()的区别以及源码完全解析
- 数据库中为什么需要Implict Commit(隐式提交事务)
- oracle 数据库事务,提交,回滚,保存点,表的锁定,隐式锁,显示锁,写锁,读锁,排他锁,共享锁
- Oracle事务的隐式提交
- oracle什么时候应该commit(提交事务)
- oracle中的隐式提交(auto commit)
- Oracle(二) – 隐式的事务提交或回滚动作
- Oracle事务的隐式提交
- DB2在导入数据时,如果数据量过大,出现事务日志满的错误(Database transaction log is full)该如何解决,commitcount使用
- Hibernate中对数据库的session操作除了查询操作外,都必须在事务(Transaction)提交后才能执行
- Oracle数据库事务(OracleTransaction)在C#中的一些简单应用
- ORACLE HANDBOOK系列之七:事务(Transaction)
- 事务已被隐式或显式提交,或已终止的解决方法
- EXECUTE后的事务计数指出缺少了COMMIT或ROLLBACK TRANSACTION语句。原计数=0,当前计数=1。
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- oracle 事务处理 commit rollback
- 关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍
- Oracle PL/SQL之SET TRANSACTION READ ONLY(事务隔离性)