关闭

commit和rollback

标签: oraclesqlsessionsystem
4349人阅读 评论(0) 收藏 举报
分类:

一、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隐式撤销到该保存点。           

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:46060次
    • 积分:929
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条