什么是savepoint?
Use the SAVEPOINT statement to identify a point in a transaction to which you can later roll back.
例如:
SQL> SELECT * FROM SCOTT.DEPT ;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> UPDATE SCOTT.DEPT SET loc ='a' WHERE loc='NEW YORK';
1 row updated
SQL> SAVEPOINT a;
Savepoint created
SQL> UPDATE SCOTT.DEPT SET loc ='b' WHERE loc='DALLAS';
1 row updated
SQL> SAVEPOINT b;
Savepoint created
SQL> ROLLBACK TO SAVEPOINT a;
Rollback complete
SQL> COMMIT;
Commit complete
SQL> SELECT * FROM SCOTT.DEPT ;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING a
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
事务中的Savepoints
你可以在事务上下文中声明称为savepoint的中间标记。Savepoint将一个长事务分隔为较小的部分。
使用savepoint,你可以在长事务中任何点任意标记你的操作。然后你可以选择回滚在事务中当前点之前、声明的savepoint之后执行的操作。比如,你可以在一长段复杂的更新中使用savepoint,如果犯了个错,你不需要重新提交所有语句。
Savepoints在应用程序中同样有用。如果一个过程包含几个函数,那可以在每个函数前创建一个savepoint。如果一个函数失败,返回数据到函数开始前的状态并在修改参数或执行一个恢复操作后重新运行函数就非常容易。
在回滚到一个savepoint后,Oracle释放由被回滚的语句持有的锁。其他等待之前被锁资源的事务可以进行了。其他要更新之前被锁行的事务也可以执行。
当一个事务回滚到一个savepoint,发生下列事件:
1. Oracle仅回滚savepoint之后的语句。
2. Oracle保留这一savepoint,但所有建立于此后的savepoints丢失。
3. Oracle释放在该savepoint后获得的所有表、行锁,但保留之前获得的所有锁。
事务保持活动并可继续。
无论何时一个会话在等待事务,到savepoint的回滚不会释放行锁。为了确保事务如果无法获得锁也不会悬挂(hang),在执行UPDATE或DELETE前使用FOR UPDATE ... NOWAIT。(这里指回滚的savepoint之前获得的锁。该savepoint后获得的行锁会被释放,之后执行的语句也会被彻底回滚。)
注意:
1.savepoint 名字保持唯一
2.如果后面新设置的一个savepoint的名字和前面的一个savepoint名字重复,前一个savepoint将被取消
3.设置savepoint后,事务可以继续commit,全部回退或者回退到具体一个savepoints
(Savepoint names must be distinct within a given transaction. If you create a second savepoint with the same identifier as an earlier savepoint, then the earlier savepoint is erased. After a savepoint has been created, you can either continue processing, commit your work, roll back the entire transaction, or roll back to the savepoint.)
4.撤销的处理必须是在没有发出commit命令的前提下才能有效。
如下:在commit;后执行rollback to savepoint失败
SQL> SELECT * FROM SCOTT.DEPT ;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> UPDATE SCOTT.DEPT SET loc ='a' WHERE loc='NEW YORK';
1 row updated
SQL> SAVEPOINT a;
Savepoint created
SQL> UPDATE SCOTT.DEPT SET loc ='b' WHERE loc='DALLAS';
1 row updated
SQL> SAVEPOINT b;
Savepoint created
SQL> COMMIT;
Commit complete
SQL> ROLLBACK TO SAVEPOINT a;
ROLLBACK TO SAVEPOINT a
ORA-01086: 从未创建保留点 'A'
SQL> SELECT * FROM SCOTT.DEPT ;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING a
20 RESEARCH b
30 SALES CHICAGO
40 OPERATIONS BOSTON
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/JAVAZHICHIZHE/archive/2009/03/31/4039839.aspx
分享到:
相关推荐
Oracle SQL疑难解析是一本专为解决数据库操作中遇到的实际问题而编写的书籍,它涵盖了大量SQL查询、数据处理和性能优化的实用技巧。在"oracle-sql-recipes-master"这个压缩包中,很可能是包含了书中的示例代码和练习...
8. 事务处理:SQL Server使用 `BEGIN TRANSACTION`,`COMMIT` 和 `ROLLBACK`,Oracle也有对应的 `BEGIN`,`COMMIT` 和 `ROLLBACK`,但Oracle还提供了保存点(SAVEPOINT)功能。 9. 函数和内置操作:例如,SQL ...
4. 事务控制:Oracle支持ACID(原子性、一致性、隔离性和持久性)特性,手册会解释COMMIT、ROLLBACK和SAVEPOINT语句的使用,以及如何设置事务隔离级别。 5. 高级特性:Oracle SQL包含许多高级特性,如游标、PL/SQL...
在Oracle中,你需要理解事务的ACID属性(原子性、一致性、隔离性和持久性),以及如何使用COMMIT、ROLLBACK和SAVEPOINT来管理事务。同时,锁机制用于控制并发访问,防止数据不一致,如共享锁和独占锁的使用是这部分...
Oracle数据库试题部分知识点解析: 1. SQL查询语句及条件判断: 在Oracle中编写SQL查询语句时,需要注意使用正确的逻辑判断条件。例如,一个常见的错误是在使用WHERE子句来过滤NULL值时错误地使用了`email=NULL`。...
在 Oracle 中,可以使用 SAVEPOINT 语句来标记事务的检查点。ROLLBACK 语句可以用于回退到指定的检查点。COMMIT 语句用于提交事务。 10. Oracle 分组函数 Oracle 中的分组函数可以对表中的数据进行分组和聚合,...
从文件内容可见,作者可能使用了Oracle官方的文档或者某种在线资源作为学习材料。这表明了学习Oracle数据库时,使用官方文档是掌握知识的重要途径。 由于文件内容可能是 OCR 扫描的结果,存在错别字或者遗漏。我们...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它在企业级数据存储、管理和处理方面具有卓越性能。本篇文章将深入探讨Oracle的一些常用操作,帮助用户更好地理解和掌握Oracle数据库的日常管理。 1. ...
### Oracle深入解析知识点详解 #### 一、SQL简介与分类 **1.1 SQL介绍** - **SQL** (Structured Query Language 结构化查询语言): 是一种标准的数据管理语言,主要用于管理关系型数据库中的数据。 - **DDL ...
4. 在自动撤销管理下,Oracle确实使用`UNDOTRETENTION`参数设置撤销记录保留时间。 5. 一个数据文件可以属于多个表空间,但不能同时属于多个数据文件。 6. 系统概要文件不是数据文件,而是Oracle用于收集和存储性能...
- 使用绑定变量可以提高查询性能,避免硬解析。 6. **备份与恢复**: - `RMAN (Recovery Manager)`是Oracle的备份和恢复工具,可以进行全库备份、增量备份、表空间备份等。 - `FLASHBACK DATABASE`和`RESTORE ...
- 两者都支持`BEGIN TRANSACTION`、`COMMIT`和`ROLLBACK`,但Oracle还提供了`SAVEPOINT`,SQL Server有`SET XACT_ABORT`来控制事务错误处理。 6. **游标**: - Oracle使用`CURSOR`关键字定义,SQL Server则通过`...
- 存储结构:数据块(Data Block)是Oracle存储数据的基本单位,它包含了头部信息、表目录、行目录、行数据、空闲空间和事务使用的空间。理解这些组成部分对于识别性能瓶颈至关重要。 2. **Oracle存储结构详解** ...
- **事务管理**:理解COMMIT、ROLLBACK和SAVEPOINT,确保数据一致性。 7. **开发工具与调试** - **SQL*Plus**:Oracle提供的命令行工具,可用于编写和执行PL/SQL代码。 - **Oracle SQL Developer**:图形化界面...
Oracle数据库_OCP认证考试指南详细解析 Oracle数据库是全球广泛使用的商业关系数据库系统,而OCP(Oracle Certified Professional)认证是对Oracle数据库管理专业知识的认可。通过OCP认证,专业人士可以证明他们在...
Oracle SQL高级编程通常指的是使用SQL语言实现复杂的数据操作、查询优化、性能调整和事务管理等方面的高级技术。 以下是Oracle SQL高级编程中的一些重要知识点: 1. 数据操纵语言(DML):在Oracle SQL中,可以...
最后,题目中还提到了Oracle的事务管理机制,包括如何使用`COMMIT`和`ROLLBACK`命令来提交或撤销事务,以及如何通过设置保存点(SAVEPOINT)来控制事务的回退范围。 以上解析涵盖了Oracle SQL面试题中提及的关键...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。"Oracle开发语句及项目"这个主题涵盖了Oracle数据库的SQL语句使用和实际项目中的应用场景。下面将详细介绍Oracle开发中的...
3. **集合操作符**:UNION、INTERSECT和EXCEPT用于合并或比较多个结果集,书中会详细解析它们的区别和使用场景。 4. **分组与聚合函数**:GROUP BY和HAVING子句用于数据分组,COUNT、SUM、AVG、MAX和MIN等聚合函数...