1. 程式人生 > >DB commit influence

DB commit influence

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確定此次更改了