1.insert后未commit,关掉plsql重新打开,查询插入的内容是插入成功的
2.insert后未commit,查询插入的内容是存在的,rollback后插入内容消失
3.insert后未commit,查询插入的内容是不存在的,可以查到僵死的记录,关掉plsql(保存都选no),僵死记录消失
修改是针对的Buffer cache,在Buffer cache修改完毕,修改就算完成了。但是事务还没有结束,要到提交时。
修改过的数据,当然是先放在Buffer cache中。而且,在块被修改的同时,块被加进检查点队列中,有可能在发生检查点后,被写进数据文件。
所以,修改过的数据,有可能是在Buffer cache中,也有可能已经被写进了数据文件
所谓的buffer其实就是数据文件的临时存放数据的地方,写入buffer就等于写入数据文件了。
我这里说的内存不是指buffer。
commit触发的操作大致三点:1是生成SCN号。2.释放相关锁。3是将log buff内涉及到此次delete操作还未来得及写入redo日志的信息全部写入到redo日志里,log buff一般都不大,默认好像是40MB?再考虑到strand,写入速度很快。所以commit操作非常快。当然commit还是需要时间的,如果commit的过程中数据挂掉了怎么办?所以oracle采用的是日志在先,所有的操作都是先将涉及到的数据块和undo信息组合成redo信息写入到log buff内的。修改数据的操作在你未进行commit的时候就已经做了,只等着你commit确定此次更改了