[转]什么是savepoint? _longxzq的博客-程序员宅基地

技术标签: Oracle  数据库  

什么是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
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/longxzq/article/details/84008564

智能推荐

电气工程及自动化 (独立本科) 自考_gaap的博客-程序员宅基地

电气工程及自动化(独立本科) 【全国只有三个省有,电气工程及自动化 , 自考。】应该是比较可信的,参考:https://www.233.com/zikao/profess/gongxue/00702.html下面就,广西,黑龙江,四川。三省的情况进行,收集。广西2012年广西工学院自考电气工程与自动化专业(独立本科段)考试计划2011年10月25日来源:233网校网校课程...

Mac最佳python环境选择_IndexFziQ的博客-程序员宅基地

python2.7/3.+, how to choose?可能在刚刚接触python的时候,版本2.7和3.+到底选哪一个很纠结。再经过一次次地reset之后,得出了我的结论。升级python到最高版本。下载对应的Anaconda。在Anaconda中创建虚拟环境,可以直接选择项目需要的python版本,这样可以随着项目的改变自己设定,省去了很多麻烦。Install pythons...

iOS上架该怎么做?_biaolipian0851的博客-程序员宅基地

App Store上架指的是iOS应用从提交申请到上线的整个过程,它的目的是让应用展示在App Store上获取流量、用户。一、iOS上架的整体流程1、申请开发者账号苹果的开发者账号主要分为三种类型:个人账号、公司账号、企业账号,三者的费用以及权限等都不尽相同。开发者账号的申请过程一般需要一个星期左右的时间。一般开发者申请的都是个人或者公司的账号,因为企业账号的应用不能发布到App Stor...

SpringBoot启动Error creating bean with name 'userController': Unsatisfied depen_YaXinShi的博客-程序员宅基地

emmmm,我的错误是application里的数据库配置写错了,竟然会影响到springBoot自动配置的ioc的bean注入,我也是醉了,emmmm,还报Controller,mapper,全盘错误,,emmm,springboot引导类的的自动配置,自动扫描,真牛逼,错一个数据库文件,竟然都spring 依赖注入短线。。。。...

小型企业办公楼建网络规划方案_LT202020的博客-程序员宅基地

<br /><br />1. 文件服管理系统<br />这是最基本的应用服务,服务器相当于一个信息系统的大仓库,保证用户和服务器磁盘子系统之间快速传递数据。在服务器的各个子系统中,对系统性能影响最大的首先是网络子系统,其次是磁盘子系统,再次是内存容量。<br />     2.数据库服务<br />对系统各方面(除网络子系统外)性能要求最高的应用,如财务、库存和人事管理应用等。需要高性能CPU和快速的磁盘子系统来满足大量的随机I/O请求及数据传送。服务器瓶颈依次为:内存、磁盘子系统和CPU。<br />1.

Chrome开发者工具的使用_weixin_30270889的博客-程序员宅基地

拿到了春招offer,跑来公司实习。项目巨大。同事(前辈+大佬)们都用 Chrome 调试器来找 bug,就我,像刚进城似的,使用 console 来调试 bug。速度和效率都被爆了。事实证明,代码量少的时候,使用 console/alert 还行,当项目代码一大,特别是非常大的时候,还是应该使用 Chrome 来 debug.顺便吐槽一句,清明节还要加班,QAQ,每天晚上 9...

随便推点

安徽计算机二级vfp成绩,安徽省计算机二级vfp08年6月.doc_平安是福13031664853的博客-程序员宅基地

安徽省计算机二级vfp08年6月安徽高等学校(安徽考区)计算机水平考试试卷(二级Visual Foxpro语言)2008年6月份试卷单项选择题(每题1分,共40分)1.计算机能够自动工作,主要是因为采用了()A.二进制数制 B.大规模集成电路 C.程序设计语言 D.存储程序控制原理2.下列数值中最大的是()A.(10110)2 B.(120)8 C.(70)10 ...

华为nova3更新android10,nova星人请注意!华为nova 3全面开放EMUI9.0升级_保皇的博客-程序员宅基地

在今年7月底,华为发布了旗下nova系列新机——华为nova 3,主打爱自拍高颜值,凭借着出色的潮流外观和给力的配置,再加上易烊千玺的代言,让nova 3成为时尚人群的购机首选。最近,高颜值有实力的华为nova 3迎来了EMUI9.0全面升级。12月10日,华为EMUI给nova星人带来心心念念的好消息,华为nova 3正式全面开放EMUI9.0系统。此外,nova 2s、nova 3i、nova...

Redis以及Redis的缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题_酸宁宁的博客-程序员宅基地

Redis简介: Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间 件。 它支持多种类型的数据结构,如字符串(String),散列(Hash),列表(List),集合 (Set),有序集合(Sorted Set或者是ZSet)与范围查询,Bitmaps,Hyperloglogs 和 地理空间(Geospatial)索引半径查询。其中常见的数据结构类型有:...

idea 锁定抛异常位置_Suc1的博客-程序员宅基地

以前用eclipse的时候,可以根据所抛出的异常进行调试,比如:出现了空指针异常,我想知道是哪一行抛出的,在eclipse中我只需在debug模式下把空指针异常这个名字设置进去,当遇到空指针异常时,eclipse就会自己停留在那一行,intellij idea如何实现这个功能呢? 1,debug窗口如下图,或者按快捷键ctrl+shif+f8进行设置2,点击+号,可以看到断点的几种...

Android开发中使用Glide V4 中Generated API特性_新根的博客-程序员宅基地

Android开发中使用Glide v4中Generated API来加载图片。

我的网龙面试经历(2013年c++程序员技术面试)_周旭光的博客-程序员宅基地

今天,中午很早就吃完饭去了网龙,下了车之后,没有费很大的劲就找了851大楼,感觉有一种花园的感觉。一共面试的有三个人,另外两个是计算机专业的,一个是本科生,另外一个是研究生。     叫道我面试的时候,第一眼感觉面试官非常和善,开始看了我的简历,看我是非计算机专业的,就问我什么时候开始学习C++语言,其实学习C++的时间那是还在大二的时候,一个人抱着谭浩强的书默默地书上的程序一个个输进去再运行

推荐文章

热门文章

相关标签