原理上说,异常是不会终止事务的。但是如果异常传递到了调用环境中,由于数据库的原子性,服务器会对事物进行回滚,所以就会让人有异常终止事务的假象。
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,让它传递的客户端。
分享到:
相关推荐
1. 事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,Oracle 将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。 2. 事务恢复:当...
在Oracle数据库环境中,事务管理与存储过程的结合是实现数据一致性、事务回滚以及错误处理的关键技术之一。本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### ...
在Oracle数据库管理中,回滚日志(Rollback Segment)是用于存储事务处理过程中更改前的数据副本的关键组件,以便在需要时可以恢复到事务开始前的状态。然而,随着时间的推移,这些日志文件可能会积累大量的数据,...
- **分配回滚段**:Oracle会在事务开始时自动选择一个空闲的回滚段,优先分配给事务较少的回滚段。 - **指定回滚段**:通过`SET TRANSACTION USE ROLLBACK SEGMENT`语句,用户可以强制事务使用特定的回滚段,但这...
一旦表空间重新上线,Oracle会从系统回滚段中提取相应的回滚信息来完成事务的回滚操作。 #### 回滚段的使用 - **分配回滚段**:事务开始时,Oracle会为该事务分配一个回滚段。通常会选择拥有最少事务的回滚段进行...
每个 Oracle 数据库实例都包含至少一个回滚段,不管事务是否被提交,被事务改变了的数据的旧值都将记录在回滚段中。回滚段的工作方式可以简单概括为自动扩展、循环分配。 二、回滚段常见故障分析 如果回滚段出现...
在Oracle数据库管理中,回滚段(Rollback Segment)是一个重要的组成部分,主要用于存储事务处理的回滚信息。当系统遇到回滚段灾难,如回滚段损坏或异常,导致数据库无法正常启动时,进行有效的灾难恢复是至关重要的...
在Java编程中,Oracle数据库是常用的后端存储系统,而事务处理和异常回滚是确保数据一致性、完整性和可靠性的关键机制。以下是对这个主题的详细讲解。 首先,Oracle JDBC驱动程序是Java与Oracle数据库之间通信的...
子线程任务发生异常,主线程事务如何回滚? 本文将详细探讨当子线程任务发生异常时,如何让主线程捕获到该异常并进行事务的回滚。下面将从多线程编程的基础知识、线程池的使用、异常捕获三个方面进行阐述。 一、多...
1. **事务开始**:当事务开始时,Oracle会在日志缓冲区中记录事务开始的信息,并将变化前的数据写入回滚段。 2. **数据修改**: - **UPDATE**:只有被修改的字段的前映像会被保存到回滚段。 - **DELETE**:整个行...
- **[OPTIMAL]**:定义回滚段的最佳大小,当回滚段收缩时,Oracle会尝试将回滚段的大小调整到这个最佳大小。 例如,创建名为`rbs01`的回滚段,位于表空间`rbs`中,初始大小为100K,每次扩展增加100K,最小扩展数为...
2. 事务恢复:在系统故障导致的例程失败后,Oracle会利用重做日志文件中的回滚信息,在下次打开数据库时恢复未提交的事务。 3. 读一致性:Oracle通过回滚段确保在事务执行过程中,其他会话看不到未提交的修改,保证...
"spring-控制事物回滚"这个主题主要涉及Spring如何在出现异常时自动或手动触发事务的回滚,以及如何配置和使用Spring的事务管理机制。我们将深入探讨Spring事务管理的原理、API使用以及在实际开发中的应用。 首先,...
在修改操作完成后,Oracle的后台进程会将修改前的数据(即旧值)以及一些元数据(如系统更改号SCN、块地址等)写入回滚段中。这并非简单的复制整个数据块,而是按照一定的逻辑顺序将原始数据块的部分内容写入回滚段...
本文简要阐述了新建Oracle数据库回滚段具体操作过程,并且介绍了具体的操作过程和步骤。
Oracle 创建表空间、回滚段、用户、表的详细语法 Oracle 是一种关系型数据库管理系统,广泛应用于各个行业。创建表空间、回滚段、用户、表是 Oracle 中最基本的操作之一,本文将详细介绍这四个操作的语法和步骤。 ...
最近在修复一个比较老的项目报表的bug的时候,因为对该项目不太熟悉,导致生产环境数据修改有误,于是求助导师帮忙回滚数据,现学习一下Oralce数据回滚以备不时之需。 查看某个时间点的表的数据 select * from ...
Oracle 回滚段 Oracle 回滚段是 Oracle 数据库中的一种重要组件,它用于保存数据库修改前的数据,以便在需要时可以通过 ROLLBACK 命令恢复到修改前的数据。回滚段的设置对数据库的性能产生直接影响,特别是在更新...
当一个事务执行UPDATE、INSERT或DELETE操作时,Oracle会将旧的数据版本写入回滚段,以备后续可能的回滚操作。 回滚段的作用主要体现在以下几个方面: 1. **事务回退**:如果事务中的操作需要撤销,回滚段提供了回退...