`

异常是否会引起oracle事物回滚

阅读更多
原理上说,异常是不会终止事务的。但是如果异常传递到了调用环境中,由于数据库的原子性,服务器会对事物进行回滚,所以就会让人有异常终止事务的假象。

sample1:
BEGIN
   insert into test_table values(1,11);
   Declare
      i number:=1;
      Cu_ex Exception;
    Begin
      insert into test_table values(2,22);
      If (i=1) then
         Raise Cu_ex;
      End if;
      DBMS_OUTPUT.put_line('TEST');
     commit;
   Exception
     When Cu_ex then
        Raise_application_error(-20000,'has an customer error'||sqlerrm);
     When others then
        Raise_application_error(-20001,'has an error'||sqlerrm);
   End;
END;
/


在这个例子中,两条insert都会被回滚。

sample2:
BEGIN
   insert into test_table values(1,11);  
   Declare
      i number:=1;
      Cu_ex Exception;
    Begin
      insert into test_table values(2,22); 
      If (i=1) then
         Raise Cu_ex;
      End if;
      DBMS_OUTPUT.put_line('TEST');
     commit;
   Exception
     When Cu_ex then
        Raise_application_error(-20000,'has an customer error'||sqlerrm);
     When others then
        Raise_application_error(-20001,'has an error'||sqlerrm);
   End;
EXCEPTION
   WHEN OTHERS THEN
        NULL;
END;
/
在这个例子中,两条insert都不会回滚,因为异常被捕捉并处理了,并没有传递到调用环境中。

顾推荐在处理异常的时候,不要捕获 when others,让它传递的客户端。
分享到:
评论

相关推荐

    oracle回滚段使用率过高之解决方法

    1. 事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,Oracle 将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。 2. 事务恢复:当...

    oracle 事务 回滚 存储过程

    在Oracle数据库环境中,事务管理与存储过程的结合是实现数据一致性、事务回滚以及错误处理的关键技术之一。本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### ...

    对Oracle数据库回滚日志的清理

    在Oracle数据库管理中,回滚日志(Rollback Segment)是用于存储事务处理过程中更改前的数据副本的关键组件,以便在需要时可以恢复到事务开始前的状态。然而,随着时间的推移,这些日志文件可能会积累大量的数据,...

    深入解析oracle的回滚段

    - **分配回滚段**:Oracle会在事务开始时自动选择一个空闲的回滚段,优先分配给事务较少的回滚段。 - **指定回滚段**:通过`SET TRANSACTION USE ROLLBACK SEGMENT`语句,用户可以强制事务使用特定的回滚段,但这...

    oracle数据库回滚段专题解析

    一旦表空间重新上线,Oracle会从系统回滚段中提取相应的回滚信息来完成事务的回滚操作。 #### 回滚段的使用 - **分配回滚段**:事务开始时,Oracle会为该事务分配一个回滚段。通常会选择拥有最少事务的回滚段进行...

    Oracle数据库回滚段的故障分析与性能优化.pdf

    每个 Oracle 数据库实例都包含至少一个回滚段,不管事务是否被提交,被事务改变了的数据的旧值都将记录在回滚段中。回滚段的工作方式可以简单概括为自动扩展、循环分配。 二、回滚段常见故障分析 如果回滚段出现...

    oracle 回滚段灾难恢复

    在Oracle数据库管理中,回滚段(Rollback Segment)是一个重要的组成部分,主要用于存储事务处理的回滚信息。当系统遇到回滚段灾难,如回滚段损坏或异常,导致数据库无法正常启动时,进行有效的灾难恢复是至关重要的...

    oracle 在java中的事务处理和异常回滚。

    在Java编程中,Oracle数据库是常用的后端存储系统,而事务处理和异常回滚是确保数据一致性、完整性和可靠性的关键机制。以下是对这个主题的详细讲解。 首先,Oracle JDBC驱动程序是Java与Oracle数据库之间通信的...

    子线程任务发生异常,主线程事务如何回滚

    子线程任务发生异常,主线程事务如何回滚? 本文将详细探讨当子线程任务发生异常时,如何让主线程捕获到该异常并进行事务的回滚。下面将从多线程编程的基础知识、线程池的使用、异常捕获三个方面进行阐述。 一、多...

    oracle 回滚段探究

    1. **事务开始**:当事务开始时,Oracle会在日志缓冲区中记录事务开始的信息,并将变化前的数据写入回滚段。 2. **数据修改**: - **UPDATE**:只有被修改的字段的前映像会被保存到回滚段。 - **DELETE**:整个行...

    ORACLE回滚段的概念、用法和规划及问题解决

    - **[OPTIMAL]**:定义回滚段的最佳大小,当回滚段收缩时,Oracle会尝试将回滚段的大小调整到这个最佳大小。 例如,创建名为`rbs01`的回滚段,位于表空间`rbs`中,初始大小为100K,每次扩展增加100K,最小扩展数为...

    oracle回滚段问题

    2. 事务恢复:在系统故障导致的例程失败后,Oracle会利用重做日志文件中的回滚信息,在下次打开数据库时恢复未提交的事务。 3. 读一致性:Oracle通过回滚段确保在事务执行过程中,其他会话看不到未提交的修改,保证...

    spring-控制事物回滚

    "spring-控制事物回滚"这个主题主要涉及Spring如何在出现异常时自动或手动触发事务的回滚,以及如何配置和使用Spring的事务管理机制。我们将深入探讨Spring事务管理的原理、API使用以及在实际开发中的应用。 首先,...

    Oracle的回滚段存储内容分析

    在修改操作完成后,Oracle的后台进程会将修改前的数据(即旧值)以及一些元数据(如系统更改号SCN、块地址等)写入回滚段中。这并非简单的复制整个数据块,而是按照一定的逻辑顺序将原始数据块的部分内容写入回滚段...

    新建Oracle数据库回滚段具体操作过程

    本文简要阐述了新建Oracle数据库回滚段具体操作过程,并且介绍了具体的操作过程和步骤。

    oracle 创建表空间、回滚段、用户、表的详细语法

    Oracle 创建表空间、回滚段、用户、表的详细语法 Oracle 是一种关系型数据库管理系统,广泛应用于各个行业。创建表空间、回滚段、用户、表是 Oracle 中最基本的操作之一,本文将详细介绍这四个操作的语法和步骤。 ...

    Oracle数据回滚的全过程

    最近在修复一个比较老的项目报表的bug的时候,因为对该项目不太熟悉,导致生产环境数据修改有误,于是求助导师帮忙回滚数据,现学习一下Oralce数据回滚以备不时之需。 查看某个时间点的表的数据 select * from ...

    oracle 回滚段

    Oracle 回滚段 Oracle 回滚段是 Oracle 数据库中的一种重要组件,它用于保存数据库修改前的数据,以便在需要时可以通过 ROLLBACK 命令恢复到修改前的数据。回滚段的设置对数据库的性能产生直接影响,特别是在更新...

    Oracle回滚段管理知识.pptx

    当一个事务执行UPDATE、INSERT或DELETE操作时,Oracle会将旧的数据版本写入回滚段,以备后续可能的回滚操作。 回滚段的作用主要体现在以下几个方面: 1. **事务回退**:如果事务中的操作需要撤销,回滚段提供了回退...

Global site tag (gtag.js) - Google Analytics