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