欢迎光临^ ^,本Blog旨在督促自己定期进行阶段性总结,有些文章迫于时间因素,先写上大体框架与思路,工作之余会继续补充细化。走过飘过,欢迎大家多踩脚印,共勉提高。
pragma autonomous_transaction 它是一种自治事务AT的标识,AT是由主事务MT调用但是独立于MT的事务,在AT被调用执行时,MT被挂起,在AT内部,一系列的DML可以被执行并且commit或rollback,注意由于AT的独立性,它的commit和rollback并不影响MT的执行效果。在AT执行结束后,主事务获得控制权,又可以继续执行了。
下面举例说明: 存储过程TEST1:
存储过程TEST2:
关于嵌套调用存储过程
存储过程TEST1:
注:一般建议在做大型应用的时候,存储过程不要嵌套层数过多,这样会导致父produce在调用完子produce后,接着执行父produce后续SQL语句,此时要是rollback了,则子produce则不会回滚,导致数据的不一致性。 对commit的理解 SQL语句在没有commit之前,其他的session并不能访问到这条数据,当在本次session结束时,数据库会自动commit数据。commit之前其他用户读到的还是旧数据,数据并没有真正插入到物理表。commit之后,LGWR进程会将redo缓冲中的内容写入redo log里边,但是不一定会真的写到数据文件。 DBWR进程,在下述条件下会将缓冲中的数据写入数据文件: 1.当服务进程扫描一定数目的缓冲以后,找不到干净的可用的缓冲,它会通知DBWn进程写入dirty缓冲中的数据. 2.DBWn进程会在检查点之前,周期地将缓冲区中的数据写入到文件,而检查点正是redo进程恢复时使用的起点。