`
Wen_JN_86
  • 浏览: 33825 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Oracle-自治事务

阅读更多

 

PRAGMAAUTONOMOUS_TRANSACTION

数据库事务是一种单元操作,要么是全部操作都成功,要么全部失败。在Oracle中,一个事务是从执行第一个数据管理语言(DML)语句开始,直到执行一个COMMIT语句,提交保存这个事务,或者执行一个ROLLBACK语句,放弃此次操作结束。

 

事务的“要么全部完成,要么什么都没完成”的本性会使将错误信息记入数据库表中变得很困难,因为当事务失败重新运行时,用来编写日志条目的INSERT语句还未完成。

 

针对这种困境,Oracle提供了一种便捷的方法,即自治事务。自治事务从当前事务开始,在其自身的语境中执行。它们能独立地被提交或重新运行,而不影响正在运行的事务。正因为这样,它们成了编写错误日志表格的理想形式。在事务中检测到错误时,您可以在错误日志表格中插入一行并提交它,然后在不丢失这次插入的情况下回滚主事务。

 

因为自治事务是与主事务相分离的,所以它不能检测到被修改过的行的当前状态。这就好像在主事务提交之前,它们一直处于单独的会话里,对自治事务来说,它们是不可用的。然而,反过来情况就不同了:主事务能够检测到已经执行过的自治事务的结果。

 

要创建一个自治事务,您必须在匿名块的最高层或者存储过程、函数、数据包或触发的定义部分中,使用PL/SQL中的PRAGMAAUTONOMOUS_TRANSACTION语句。在这样的模块或过程中执行的SQL Server语句都是自治的。

 

触发无法包含COMMIT语句,除非有PRAGMAAUTONOMOUS_TRANSACTION标记。但是,只有触发中的语句才能被提交,主事务则不行。

exp:


Create table Msg (Msg varchar(50)) ;

自制事务:
create or replace procedure AutoNomouse_Insert is

PRAGMA AUTONOMOUS_TRANSACTION;

begin

insert into Msg values('AutoNomouse Insert');

commit;

end;
非自治事务:

CREATE ORREPLACE Procedure NonAutoNomouse_Insert as

begin

insert into Msg Values('NonAutonomouse Insert');

commit;

end;


SQL> begin
2
3insert into Msg Values('This Main Info');
4
5NonAutoNomouse_Insert;
6
7rollback;
8
9end
10;
11/

PL/SQL procedure successfully completed

SQL> select * from msg;

MSG
--------------------------------------------------
This Main Info
NonAutonomouseInsert
因为过程中有COMMIT;所以匿名块中得RULLBACK 是不起作用的;由此得出:非自治事务中的COMMIT,ROLLBACK

是会影响整个事务的。

下面我们看一个另外一种情况:
SQL> delete msg;

2 rows deleted

SQL>

 

这里没有COMMIT;


SQL> begin
2
3insert into Msg Values('This Main Info');
4
5rollback;--这里加了ROLLBACK;
6
7NonAutoNomouse_Insert;
8
9rollback;
10
11end
12;
13/

PL/SQL procedure successfully completed

SQL> select * from msg;

MSG
--------------------------------------------------
This Main Info
NonAutonomouse Insert
NonAutonomouse Insert

竟然没有ROLLBACK (DELETE* FROM SSG ;) 为什么了? 因为过程就是一个新的SESSION,所以前面的SESSION

被正常EXIT,同时被自动提交; 所以我们会看到三行数据。
SQL> commit;

Commit complete

SQL> select * from msg;

MSG
--------------------------------------------------
This Main Info
NonAutonomouse Insert
NonAutonomouse Insert

SQL> commit;

Commit complete

SQL> select * from msg;

MSG
--------------------------------------------------
This Main Info
NonAutonomouse Insert
NonAutonomouse Insert

因为这里一个新的SESSION 所以是没有意义的事务控制语句。

 

SQL> deletemsg;

3 rows deleted

SQL> commit;

Commit complete

SQL> select * from msg;

MSG
--------------------------------------------------

可以看到这里是正常的提交;

 

下面看一下自制事务:

SQL> begin
2
3insert into Msg Values('This Main Info');
4
5AutoNomouse_Insert;
6
7rollback;
8
9end
10
11;
12/

PL/SQL procedure successfully completed

SQL> select * from msg;

MSG
--------------------------------------------------
AutoNomouse Insert

 

我们看到是一行数据,显然第一条SQL INSERT 是被ROLLBACK,证明自制事务是一个独立于主程序的事务,

他不会对主事务的控制产生影响。另外在分布式环境中我们经常会遇到 ORA-02064 ERROR,就是因为主事务

自己有事务控制语句,然而被调用的远程过程也有自己的事物控制语句,当然就会报错,我们将被调用的过程

声明为自制事务那就OK了。

分享到:
评论

相关推荐

    ORACLE-事务ORACLE-TRANSACTION-信息管理与信息系统本科毕业设计.doc

    自治事务可以在事务中执行一些特殊的操作,如日志记录和错误处理。 ORACLE 事务的优点 ORACLE 事务管理提供了以下优点: 1. 保证数据库的一致性和完整性。 2. 提高数据库的可靠性和稳定性。 3. 支持分布式事务和...

    oracle-事务oracle-transaction信息管理与信息系统.doc

    自治事务是指在事务中执行的独立操作,它可以在事务中执行,或者在事务外执行。自治事务可以帮助提高系统的并发性和可扩展性。 Oracle 的事务管理机制可以保证数据库的一致性和完整性,提供了原子性、一致性、隔离...

    oracle-事务oracle-transaction信息管理与信息系统学士学位论文.doc

    自治事务是指在分布式事务中,每个事务都可以独立地提交或回滚。自治事务可以提高系统的可扩展性和可靠性。 本论文对 Oracle 中的事务管理进行了详细的讨论,涵盖了事务的定义、特征、控制语句、原子性、一致性、...

    oracle自治事务(Trigger)

    ### Oracle自治事务(Trigger)详解 #### 一、概述 Oracle数据库中的触发器是一种存储过程,它被设计为当特定事件发生时自动执行。这些事件包括数据修改操作,如INSERT、UPDATE或DELETE等。触发器可以确保数据的...

    Oracle自治事务的介绍(Autonomous_Transactions)

    Oracle自治事务的介绍(Autonomous_Transactions) Oracle自治事务是一种特殊的数据库事务机制,允许在调用事务的上下文中执行独立的事务。这种机制使用PRAGMA_AUTONOMOUS_TRANSACTION语句来定义自治事务。自治事务...

    Oracle中怎样用自治事务保存日志表

    自治事务是与主事务相分离的,所以它不能检测到被修改过的行的当前状态。这就好像在主事务提交之前,它们一直处于单独的会话里,对自治事务来说,它们是不可用的。然而,反过来情况就不同了:主事务能够检测到已经...

    Oracle数据完整性嵌套事务调用分析研究

    为了保护数据的完整性,我们需要了解 Oracle 中的事务机制和自治事务的使用方法。在处理数据直接的事务的时候,保存数据的完整性是非常重要的。我们可以使用多种方法来保护数据的完整性,例如数据表的主键约束、外键...

    事务与锁定的问题 自治事务

    ### 事务与锁定的问题:自治事务详解 #### 一、事务与锁定的基础 在数据库管理中,事务(Transaction)和锁定(Locking)是保证数据完整性和一致性的重要机制。事务被视为一系列操作的集合,这些操作要么全部成功...

    Oracle自治数据库和自动化运维新特性概述.pptx

    4. 自动化事务处理:Oracle 自治数据库提供了自动化事务处理功能,可以自动处理事务,提高数据库的可用性和性能。 5. 自动化数据保护:Oracle 自治数据库提供了自动化数据保护功能,可以自动保护数据的安全和完整性...

    oracle触发器调用存储过程

    Oracle自治事务(Autonomous Transaction)机制可以解决这个问题,确保触发器和存储过程之间的事务独立性。 触发器调用存储过程的过程中可能会出现的问题是,insert语句不是自动提交的,因此当insert语句没有提交时...

    Oracle自治数据库和自动化运维新特性概述.pdf

    在Oracle自治数据库中,还有许多其他的特征,例如自动化索引、自动化事务处理、自动化数据保护等。这些特征可以帮助数据库管理员更方便地管理数据库,提高数据库的性能和安全性。 Oracle自治数据库提供了两种部署...

    cx-oracle英文原版.pdf

    - 该接口允许Python代码执行SQL语句和存储过程调用,处理结果集,并管理事务。 - 该模块使用Oracle的客户端库与Oracle数据库交互。 - cx_Oracle支持Python的异步框架以及多个线程和进程在同一会话中安全运行。 ### ...

    基于Oracle自治数据库快速开发智能分析应用.pptx

    此外,通过自动健康架构和诊断框架,Oracle自治数据库能够自我监测和修复问题,确保系统的稳定运行。 在安全性方面,自治数据库提供了自动防御机制,能够抵御外部攻击,检测并修复潜在的安全异常。同时,它能根据...

    Oracle10gConcepts_Oracle官方文档_中文翻译.doc

    - 自治事务:可以在主事务内部执行的独立子事务,有自己的提交和回滚逻辑。 - 事务隔离级别和死锁处理。 第6章和第7章可能涉及了更高级的主题,如安全性、备份与恢复、性能优化等,但具体内容没有给出。 总的来说...

    oracle_专家高级编程 中文 第八章

    - **自治事务的作用**:自治事务主要用于审计和日志记录,因为它可以确保即使在外部事务失败的情况下,关键的日志信息也能被正确记录。 #### 八、小结 通过本章的学习,我们深入理解了Oracle数据库中事务的基本...

    Oracle10gConcepts-CN.pdf

    - **4.3 自治事务纵览**:自治事务是一种特殊的事务处理方式,它不受外部事务的影响,主要用于复杂事务处理场景。 #### 第5章:模式对象 - **5.1 模式对象简介**:模式对象是数据库中由模式拥有者所创建的对象,...

    ORACLE核心应用技术研究.doc

    - 自治事务:在主事务内部,可以执行一个独立的、不依赖于主事务的子事务,其结果在主事务提交或回滚时不受影响。 - 分布式事务和两时期提交:在分布式数据库环境下,事务可能涉及多个数据库节点。两时期提交协议...

Global site tag (gtag.js) - Google Analytics