commit和rollback

来源:互联网 发布:江宁淳化街网络问政 编辑:程序博客网 时间:2024/05/20 06:55

一、oracle事务

  oracle在第一个可执行sql语句开始时,隐式地开始一个事务,遇到以下情况时结束事务:

  1、commit:整个事务的所有更改永久保存

  2、rollback:撤销事务所做的更改

  3、DDL语句:执行DDL语句时,oracle隐式提交之前事务所做的更改。

  4、程序正常结束:oracle隐式提交

  5、程序失败:oracle隐式rollback

  事务开始时,oracle分配一个撤销段,记录撤销数据。

二、commit

  1、当commit时发生下列事情:重做记录中的事务表被标记所提交事务的唯一SCN

                                               lgwr将事务的重做日志信息连同事务的SCN,从重做日志缓冲区写入到联机重做日志文件

                                               释放事务所持有的锁

  2、commit选项 immediate:commit之后,立即将重做日志信息从日志缓冲区写入到日志文件

                          bath:不立即写

                          wait:直到日志信息成功写入日志文件才返回

                          nowait:不需要等待日志信息成功写入日志文件就可以返回。

    修改commit选项:系统级:比如 alter system set commit_write=bath,nowait scope=spfile

                               会话级:alter session set commit_write=immediate,wait;

                               在提交的时候:commit write immediate nowait;     

三、rollback

  1、当发布rollback之后,oracle使用撤销段中的数据撤销事务所做的更改,释放事务所持有的锁,并标记事务完成。

  2、使用savepoint设置保存点,使用rollback to savepoint save_point_name撤销到保存点,该保存点之后所进行的操作被撤销,保存点被保留。

       事务并未结束,可以继续进行。在oracle中,oracle为每一条sql语句隐式设置保存点,当一条sql语句失败后,oracle隐式撤销到该保存点。           

原创粉丝点击