Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152589
  • 博文数量: 5
  • 博客积分: 146
  • 博客等级: 入伍新兵
  • 技术积分: 87
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-25 10:32
文章分类
文章存档

2015年(2)

2012年(3)

我的朋友

分类: Oracle

2015-03-05 22:33:19

事务:从第一条可执行的SQL语句遇到如下这些情况表示一个事务的结束与完成。

         1、遇到commit

         2、遇到rollback

         3、执行createdroprenamealterDML语句。

         4、正常的退出SQL*PLUS程序(称为隐式提交)好像需要AUTOCOMMIT设置值。

         5SQL语句执行出错,oracle将自动回滚所有操作(称为隐式回滚)。

第二个事务的开始:一个事务完成后的第一条可执行语句即表示另一个事务的开始。

commit语句:

         事务完成前oracle将发生如下事件

         1OracleSGA撤销段缓冲区中生成撤销记录(撤销段在撤销表空间中,撤销记录记录着旧值)。

         2OracleSGA重做日志缓冲区中生成重做日志项。

         3Oracle修改数据库缓冲区中的数据。

         事务完成时oracle将发生如下事件

         1、事务的重做日志项被标记系统唯一变更号SCN

         2、日志写进程将重做日志缓冲区中的事务日志和SCN写入到重做日志。

         3、释放Oracle持有的锁,事务标记为完成。

rollback语句:

         未提交的事务,可以使用rollback撤销或回滚SQL对事务做出的所有更改。回滚之后的事务被标记为完成。

         可以实现书签式的回滚(术语为:保留点savepoint)。例,在我操作事务时生成了A\B\C三个书签,那么继续操作的时候SQL出错了,那么oracle将自动回滚到书签C(称为语句级回滚),此时不像正常回滚(也就是不使用savepoint方式的回滚)那样事务被标记为完成,而是标记未完成则可继续执行。oracle的死锁发生在两个事务的SQL抢占同一个资源时,那么oracle回滚其中的一个事务语句来解决死锁。


阅读(4544) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~