自治事务概述

来源:互联网 发布:智阳网络有哪些职位 编辑:程序博客网 时间:2024/05/16 06:08

自治事务是一个独立的事务,可以从另一个称为主事务的事务中调用。你可以挂起调用事务、 在自治事务中执行 SQL 操作并提交或回滚它们,然后继续执行调用事务。

自治事务对于那些必须独立执行、而不管调用事务是否提交或回滚的操作 非常有用。例如,在股票购买事务中,你想要总是提交客户数据,而无论是否股票购买最终成功通过。或者,您想要将错误消息记录到一个调试表,即使整个事务被回滚。

自治事务具有以下特征:

 自治事务不会看见在主事务中所做的未提交更改,也不与主事务共享锁或资源。

 自治事务中的更改在其提交后对其它事务是可见的。因此,用户可以立刻访问更新的信息,而不必等到主事务提交。

 自治事务可以启动其他自治事务。没有关于自治事务能调用多少级别的任何限制,这只受限于可用的资源。

在 PL/SQL中, 自治事务在一个标有 AUTONOMOUS_TRANSACTION 的编译指令例程所在的自治范围内执行。在这种上下文中,例程包括顶层匿名 PL/SQL 块、 PL/SQL 子程序、和触发器。一个编译指令是指示编译器执行某个编译选项的指令。AUTONOMOUS_TRANSACTION编译指令指示数据库,当此过程执行时,作为一个独立于其父事务的新的自治事务来执行。

图 10-2 显示了控制如何从主程序 (MT)流向一个自治例程,又如何返回。主程序是 proc1 ,自治例程是 proc2。自治例程在控制返回主例程之前可以提交多个事务 (AT1 和 AT2)。

这里写图片描述

当您进入一个自治例程的可执行部分时,主例程将挂起。当您退出自治例程时,主例程就恢复了。

在图 10-2 中,proc1 内的提交将持久化自己的工作,及在其会话中执行的任何未结工作。然而,在 proc2 中的提交仅持久化在 proc2 事务中执行的工作。在事务AT1 和 AT2中的COMMIT语句对MT事务没有影响。

0 0
原创粉丝点击