全部博文(5)
分类: Oracle
2015-03-05 22:33:19
事务:从第一条可执行的SQL语句遇到如下这些情况表示一个事务的结束与完成。
1、遇到commit。
2、遇到rollback。
3、执行create、drop、rename、alter等DML语句。
4、正常的退出SQL*PLUS程序(称为隐式提交)好像需要AUTOCOMMIT设置值。
5、SQL语句执行出错,oracle将自动回滚所有操作(称为隐式回滚)。
第二个事务的开始:一个事务完成后的第一条可执行语句即表示另一个事务的开始。
commit语句:
事务完成前oracle将发生如下事件
1、Oracle在SGA撤销段缓冲区中生成撤销记录(撤销段在撤销表空间中,撤销记录记录着旧值)。
2、Oracle在SGA重做日志缓冲区中生成重做日志项。
3、Oracle修改数据库缓冲区中的数据。
事务完成时oracle将发生如下事件
1、事务的重做日志项被标记系统唯一变更号SCN。
2、日志写进程将重做日志缓冲区中的事务日志和SCN写入到重做日志。
3、释放Oracle持有的锁,事务标记为完成。
rollback语句:
未提交的事务,可以使用rollback撤销或回滚SQL对事务做出的所有更改。回滚之后的事务被标记为完成。
可以实现书签式的回滚(术语为:保留点savepoint)。例,在我操作事务时生成了A\B\C三个书签,那么继续操作的时候SQL出错了,那么oracle将自动回滚到书签C(称为语句级回滚),此时不像正常回滚(也就是不使用savepoint方式的回滚)那样事务被标记为完成,而是标记未完成则可继续执行。oracle的死锁发生在两个事务的SQL抢占同一个资源时,那么oracle回滚其中的一个事务语句来解决死锁。