隐式提交的定义又名自动提交,即无需显示执行commit语句,session中的操作被自动提交到数据库的过程。
隐式提交的方式1、正常执行完ddl语句。包括create,alter,drop,truncate,rename。2、正常执行完dcl语句。包括grant,revoke。3、正常退出isql*plus,没有明确发出commit或者rollback。
隐式提交的注意事项1、执行ddl语句时,前面的dml操作也会被提交到数据库中因为是在一个session里,那执行ddl语句的时候前面的dml语句肯定也会“不可幸免”的被提交到库中。2、即使ddl语句执行失败,前面的dml操作也会被提交到数据库中这就有点儿让人奇怪了,ddl都执行失败了,怎么还会提交呢?这就需要探究一下隐式提交的本质了(下文有叙述)。3、在前面1和2的基础上总结为了避免隐式提交或者回滚,尽量保证一条或者几条DML操作完成后有显示的提交或者回滚,防止后续执行的DCL或者DDL自动提交前期的DML操作。
隐式提交的本质1、一条ddl语句执行了两次commitcommit;ddl statement;commit;第一个commit将当前session中未提交的事务隐式提交,以保证ddl语句失败时的回滚位置。第二个commit将ddl2、为什么需要隐式提交?为了保证事务的一致性。我们在执行ddl语句的时候,Oracle需要在它的系统表中进行元数据的记录操作(即:除了建表还会进行不少insert操作),如果它不隐式提交就无法保证一致性;从内部运行机制来看ddl语句和dml语句还是有很大区别的,dml会对每个语句的每条记录都做日志记录以便于回滚,而ddl往往没必要搞这么复杂,从功能和易用性上看隐式提交都是最好的选择。
相关阅读:Oracle PL/SQL之DDL导致的隐式提交 http://www.linuxidc.com/Linux/2011-07/39612.htmOracle事务 行级锁 保存点 回滚 提交 http://www.linuxidc.com/Linux/2012-07/66120.htmOracle事务处理多条sql语句 http://www.linuxidc.com/Linux/2011-09/42548.htmOracle事务的完整流程的分析 http://www.linuxidc.com/Linux/2011-08/41560.htm关于Oracle事务的小实例 http://www.linuxidc.com/Linux/2011-03/33782.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Linux下解决MySQL无法远程连接问题Oracle快速批量删除数据相关资讯 Oracle事务 Oracle隐式提交
- MySQL和Oracle对比学习之事务 (04/18/2015 17:33:28)
- 查询Oracle 中死事务的语句 (08/01/2014 11:05:37)
- Oracle中的事务之savepoint (01/04/2013 12:29:23)
| - Oracle事务处理及实例演示JDBC操作 (08/12/2014 10:32:56)
- Oracle 事务的开始与结束 (07/01/2014 20:44:34)
- Oracle分布事务中最先提交分布式的 (11/27/2012 09:05:58)
|
本文评论 查看全部评论 (0)