Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17332
  • 博文数量: 6
  • 博客积分: 106
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-04 17:54
文章分类
文章存档

2013年(2)

2012年(4)

我的朋友

分类: Oracle

2013-03-27 15:32:37

COMMIT

使得所有未决的改变永久改变

在未提交前你前面的操作更新的都是内存,没有更新到物理文件中。

执行commit从用户角度讲就是更新到物理文件了。

COMMIT通常是一个非常快的操作,而不论事务大小如何。你可能认为,一个事务越大(换句话说,它影响的数据越多),COMMIT需要的时间就越长。不是这样的。不论事务有多大,COMMIT的响应时间一般都很“平”(flat,可以理解为无高低变化)。这是因为COMMIT并没有太多的工作去做,不过它所做的确实至关重要。

 

SAVEPOINT name

设置一个保存点,并命名

被指定的保存点名称不能以‘SYS’开头(SQLSTATE 42939).
主要用于在事务上下文中声明称为savepoint的中间标记,将一个长事务分隔为多个较小的部分,和我们编写文档时,习惯性保存一下一样,都是为了防止出错和丢失。
Savepoints也可以在应用程序使用。如果一个过程包含几个函数,那可以在每个函数前创建一个savepoint。如果一个函数失败,返回数据到函数开始前的状态并在修改参数或执行一个恢复操作后重新运行函数就非常容易。

保存点可以存在多个,如 a1 , a2 , a3 ,..., an

如果保存点设置名称重复,则会删除之前的那个保存点。

 

ROLLBACK

取消所有未保存在物理文件中数据的改变,为犯错留下一条后路。

当使用commit 保存修改之后无法rollback 到commit之前的状态

rollback to savepoint name 可以回滚到保存点,直接rollback 可以回滚到事务修改前最初始状态

当一个事务回滚到一个savepoint,发生下列事件:
1. Oracle仅回滚savepoint之后的语句。
2. Oracle保留这一savepoint,但所有建立于此后的savepoints丢失。
3. Oracle释放在该savepoint后获得的所有表、行锁,但保留之前获得的所有锁。

一般地回滚时间是所修改数据量的一个函数。回滚操作的开销很大,这是可以想像的,因为ROLLBACK必须物理地撤销我们所做的工作。
阅读(796) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~