Oracle之savepoint

什么是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

Oracle之savepoint的更多相关文章

  1. Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  2. 【Oracle】(savepoint)保存点的使用

    作用 保存点可以回退到事务的一部分,我们在操作数据库的过程中可以对事务分隔为几个部分,在操作失误的时候就可以回滚到某个点即可. 实现步骤 我们现在新建一张表TMP003 )); 第一步:插入第一条记录 ...

  3. 数据库路由中间件MyCat - 源代码篇(14)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 对于表的dataNode对应关系,有个特殊配置即类似dataNode="distributed(d ...

  4. PL/SQL 学习分享(续)

    事务 事务的概述 事务的特性 回滚点 事务实例练习 动态SQL 动态SQL概述 动态SQL应用场合 动态SQL的执行语法 绑定变量 动态SQL创建表 动态SQL绑定变量 动态SQL综合案例添加数据 使 ...

  5. 4.事务提交过程,交易的基本概念,Oracle交易周期,保存点savepoint,数据库的隔离级别

     事务提交过程 事务 基本概念 概念:一个或者多个DML语言组成 特点:要么都成功.要么都失败 事务的隔离性:多个client同一时候操作数据库的时候.要隔离它们的操作, 否则出现:脏读  不可反 ...

  6. Oracle Savepoint

    1.目的: Use the SAVEPOINT statement to identify a point in a transaction to which you can later roll b ...

  7. Oracle中的SAVEPOINT

    学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题,那就是使用断点回滚后,都忘记了一个很重要的事情,提交事务.虽然使用了断点回滚,但是断点回滚不像rollBack或commit一样结束当前事 ...

  8. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  9. Oracle 数据库语句大全

    Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...

随机推荐

  1. 在InstallShield中发布单一的Setup.exe文件

    原文:在InstallShield中发布单一的Setup.exe文件 InstallShield默认的Release模式下,生成了一个setup.exe文件,一个msi文件,以及一些其它的杂项文件. ...

  2. Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with

    Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Li ...

  3. JMeter怎么使用代理服务器

    一.JMeter有一个内置的代理服务器,主要用户使用浏览器录制脚本,在左侧的WorkBench中添加HTTP Proxy Server即可, 其中port表示代理服务器段口号, URL Pattern ...

  4. 网络资源(5) - Android视频

    2014_08_24 http://v.youku.com/v_show/id_XMjM5NjU2OTI0.html?f=5486194 Android开发视频教程1 http://v.youku.c ...

  5. 如何使用Ubuntu打电话

    在这个视频,我们学习如何使用Ubuntu打电话.Ubuntu手机的很多用户谁是不是很熟悉. 特别是,他什么都无所谓的物理按键(菜单键.home纽带.回车键).然后用户如何控制手机它?Ubuntu手机凭 ...

  6. 第22章 职责链模式(Chain of Responsibility)

    原文 第22章 职责链模式(Chain of Responsibility) 职责链模式 导读:职责链模式是一个既简单又复杂的设计模式,刚开始学习这个设计模式的时候光示例都看了好几遍.就为了理清里面的 ...

  7. 基于STM32旋转编码器

    ..\..\SYSTEM\usart\usart.c(1): error:  #5: cannot open source input file "sys.h": No such ...

  8. jQuery自定义右键菜单

    首先看下效果,效果在最下面: 代码: body { font-size: 12px; margin: 0px; padding: 0px; } form,div,ul,li { margin: 0px ...

  9. cocos2d-x-3.1 经常使用宏 (coco2d-x 学习笔记五)

    在代码中使用这些宏,能够降低敲键盘的次数,从而提高编写效率. 与节点属性(property)相关的 CC_PROPERTY_READONLY CC_PROPERTY_READONLY_PASS_BY_ ...

  10. SettingsProvider该CRUD

    转载请注明出处:http://blog.csdn.net/droyon/article/details/35558697 什么时候delete要么update时间.需要清空缓存并重新加载数据. 1.i ...