Oracle开发专题之:对事务的一些总结和理解
http://space.itpub.net/219982/viewspace-619841
【1.事务隔离】
①一个未提交的事务所做的修改不能被其它事务所看到。只有当事务提交成功后,在该事务之后执行的其它事务才可能看到该事务所做的改变。
②在该事务提交之前已经执行了一部分而另一部分在该事务提交后执行的剩余部分同样也看不到该事务做出的改变。这是另一个Oracle特性:读一致和快照。
③在该事务提交同时进行的其它事务同样也看不到该事务所做的改变。
【2.语句级回滚】
①当一个SQL语句在执行期间因为发生的任何错误而中断时,将产生一个“语句级回滚”。该回滚的后果就像这个SQL语句根本没有执行过一样。
②注意回滚是发生在“执行”阶段的,如果是在SQL语句的解析阶段因为语法问题而无法执行。因为没有产生任何影响而不会出现“回滚”。
【3.事务控制的分割】
如果一个事务中包含了DML语句和DDL语句,那么该事务会被分解成多个事务。首先在DDL之前的所有DML语句会被作为一个事务而一次性提交。然后Oracle会为这个DDL创建一个新的,单语句的事务。如果DDL语句执行失败了,那么DML事务依然成功。
【4.不同情况下的事务控制】
请注意:用户从Oracle服务器断开连接和用户进程强行中断的后果是不同的。
①前者典型的例子是Oracle服务器关闭或重启,此时所有未提交事务会被提交。
②后者典型的例子用户通过进程管理器强行kill掉进程,此时所有未提交事务所做的操作被回滚。
【5.事务提交前要做的事情】
Oracle提交一个事务之前,必须做以下几件事情:
①记住数据被修改前是什么样子的
②记住数据即将要被改成什么样子
③记住redo log和undo log的关联
④将SGA中已读取到内存的数据修改为新的值(此时并未真正保存到数据文件)
其中第一步是通过在undo表空间中记录undo日志来完成的。第二步、第三步是通过向SGA中的redo日志缓冲区写记录来完成的。这样当事务回滚时就可以从redo日志找到对应的undo日志,从而找回之前的数据
★要特别注意的是:此时不一定会触发DBWn进程。
★要特别注意的另一个地方是:第2步记录事务操作的改变是内存中进行的,还未写到磁盘上的redo日志文件
【6.事务提交时所做的事情】
①记录SCN值(System Change Number)
②将在线重做日志记录(位于SGA的redo日志缓冲区中)持久化到redo日志文件
③Oracle释放资源和锁
④Oracle将事务标记为已结束
注意:只有在commit指令被发出后,才会将SGA中重做日志缓冲区的内容刷新到磁盘的redo日志文件。在LGWR进程执行前,重做日志一直存在于内存中,也被称为在线重做日志。
【7.savepoint回滚和整个事务的回滚】
注意当Oracle事务回滚到某个savepoint时,在savepoint之后的所有后续savepoint将失效。但此时Transaction还是活跃且可继续的。这一点不同于整个事务的回滚。
【8.自治事务】
从传统上来说,一个事务只有在完整执行成功或回滚之后,才会进行下一个事务。而自治事务允许在一个事务中调用运行另一个事务,被调用事务执行完成后,调用事务继续执行之前未完成的操作直至事务结束
自治事务在被调用后,将和外围事务完全独立。彼此之间并不共享任何资源或者锁,外围事务所有未提交的改变对自治事务来说都是不可见。自治事务提交后外围事务将可以看到改变
分享到:
相关推荐
oracle-事务oracle-transaction信息管理与信息系统.doc
oracle-事务oracle-transaction信息管理与信息系统学士学位论文.doc
Oracle Healthcare Transaction Base Implementation Guide Release 11i Part No. B13734-01
ORACLE-事务ORACLE-TRANSACTION-信息管理与信息系统本科毕业设计.doc
oracle数据库事务的概念和相关概念,以及事务级别的划分。分别介绍了jdbc事务和jta事务。
Oracle Exchange XML Transaction Delivery Guide for Marketplace Exchange Release 6.2.3
Oracle Purchasing 11i XML Transaction Delivery Setup Guide
Oracle Services for Microsoft Transaction Server Developer's Guide
Oracle自治事务的介绍(Autonomous_Transactions)PRAGMA_AUTONOMOUS_TRANSACTION
Using Microsoft Transaction Server with Oracle8 Release 8.1.6
Oracle 10g 第 2 版 ODAC 和 Oracle Developer Tools for Visual Studio .NET 下载文件 ...Oracle Objects for OLE 10.2.0.2.20 Oracle Services for Microsoft Transaction Server 10.2.0.1.0
Oracle 最新版本19.3的客户端,X86版, 包含以下组件 Oracle Data Provider for .NET Oracle Providers for ASP...-- 18c and higher Oracle Services for Microsoft Transaction Server Oracle Instant Client
transaction_get.txt undo_used.txt wait_event_block.txt wait_event_hash.txt wait_event_sqlid.txt wait_event.txt wait_session_hash.txt wait_session_sqlid.txt 四、Oracle中文手册合集(8个CHM) Ora9iSQL参考...
64-bit Oracle Services for Microsoft Transaction Server 12.1.0.2.0 64-bit Oracle ODBC Driver 12.1.0.2.0 64-bit Oracle SQL*Plus 12.1.0.2.0 64-bit Oracle Instant Client 12.1.0.2.0
C# oracle 类 事务处理 #region 公有方法 public void JoinTransaction(Transaction transaction) { if (this._transaction != null) { throw new Exception("对象已经在另一个事务中"); } else { this._...
oracle 触发器 调用 存储过程 Oracle自治事务(Autonomous Transaction)
64位Oracle client和PLSQL,可以连接Oracle 9i
2 章,数据块,数据扩展,及数据段 Chapter 3, Tablespaces, Datafiles, and Control Files 第 3 章,表空间,数据文件,及控制文件 Chapter 4, Transaction Management 第 4 章,事务管理 Chapter 5, ...
Oracle Database Transactions and Locking Revealed provides much-needed information for building scalable, high-concurrency applications and deploy them against the Oracle Database. Read this short, ...
Chapter 4, Transaction Management 第 4 章,事务管理 Chapter 5, Schema Objects 第 5 章,方案对象 Chapter 6, Dependencies Among Schema Objects 第 6 章,方案对象间的依赖关系 Chapter 7, The Data ...