commit做了什麼?
當完成事務操作,發出commit命令之後,隨後會收到一個反饋Commit complete。
dbtan@NEI> insert into emp select * from emp;
128 rows created.
dbtan@NEI> commit;
Commit complete.
提交完成,這個提示意味著Oracle已經將此時間點之前的Redo寫入重做日誌檔案件,這個日誌寫完成之後,Oracle可以釋放使用者去執行其他任務。如果此後發生資料庫崩潰,那麼Oracle可以從重做日誌檔案中恢復這些提交過的資料,從而保證提交成功的資料不會丟失。
解釋:
為什麼COMMIT的響應時間相當“平”,而不論事務大小呢?
在資料庫中執行COMMIT之前,困難的工作都已經做了。我們已經修改了資料庫中的資料,所以99.9%的工作都已經完成。例如,已經發生了以下操作:
·已經在SGA中生成了undo塊。
·已經在SGA中生成了已修改資料塊。
·已經在SGA中生成了對於前兩項的快取redo。
·取決於前三項的大小,以及這些工作花費的時間,前面的每個資料(或某些資料)可能已經重新整理輸出到磁碟。
·已經得到了所需的全部鎖。
執行COMMIT時,餘下的工作只是:
·為事務生成一個SCN。如果你還不熟悉SCN,起碼要知道,SCN是Oracle使用的一種簡單的計時機制,用於保證事務的順序,並支援失敗恢復。SCN還用於保證資料庫中的讀一致性和檢查點。可以把SCN看作一個鐘擺,每次有人COMMIT時,SCN都會增1.
·LGWR將所有餘下的快取重做日誌條目寫到磁碟,並把SCN記錄到線上重做日誌檔案中。這一步就是真正的COMMIT。如果出現了這一步,即已經提交。事務條目會從V$TRANSACTION中“刪除”,這說明我們已經提交。
·V$LOCK中記錄這我們的會話持有的鎖,這些鎖都將被釋放,而排隊等待這些鎖的每一個人都會被喚醒,可以繼續完成他們的工作。
·如果事務修改的某些塊還在緩衝區快取中,則會以一種快速的模式訪問並“清理”。塊清除(Block cleanout)是指清除儲存在資料庫塊首部的與鎖相關的資訊。實質上講,我們在清除塊上的事務資訊,這樣下一個訪問這個塊的人就不用再這麼做了。我們採用一種無需生成重做日誌資訊的方式來完成塊清除,這樣可以省去以後的大量工作。
那麼我們應該記住一個原則是:確保提交成功的資料不丟失。這個保證正是通過Redo來實現的。由此可以看到日誌檔案對於Oracle的重要,為了保證日誌檔案的安全,Oracle允許對重做日誌檔案進行映象。
從Oracle 10g開始,如果設定了閃回恢復區(Flash Recovery Area),則Oracle預設的就會對日誌檔案進行映象。映象的好處是當某個日誌出現問題,另外一個日誌仍然可用,可以保證資料不丟失,而且通常映象儲存於不同的硬碟,當某個儲存出現故障時,另外的儲存可以用於保證映象日誌的安全。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-659578/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle的commit做了什麼?OracleMIT
- vue.use()做了什麼Vue
- JS中 new究竟做了什麼?JS
- New運算子到底做了什麼
- Activity中setContentView做了什麼View
- new操作符都做了什麼
- Redis SWAPDB 命令背後做了什麼Redis
- javascript new關鍵字做了什麼JavaScript
- 重灌Ubuntu後我都做了什麼Ubuntu
- oracle commit提交到底作了什麼OracleMIT
- 關於 AMP,Webnovel 都做了些什麼?Web
- 【vue原始碼解析】render到底做了什麼?Vue原始碼
- 原型、原型鏈、new做了什麼、繼承原型繼承
- 兜底機制——leader到底做了什麼?
- js中的new()到底做了些什麼?JS
- 建立表物件時,oracle做了些什麼?物件Oracle
- Java JVM:垃圾回收(GC 在什麼時候,對什麼東西,做了什麼事情)JavaJVMGC
- Mybatis與Spring整合時都做了什麼?MyBatisSpring
- Vue 修改成功之後我做了什麼Vue
- 國民度No.1,Python到底做了什麼?Python
- oracle commit的時候究竟發生了什麼OracleMIT
- VR對老牌遊戲廠商做了什麼 他們到底在恐慌什麼VR遊戲
- [原始碼解析] Flink UDAF 背後做了什麼原始碼
- 加速Spring現代化,我們做了什麼?Spring
- 成功的MES專案,前期都做了些什麼?
- C++11 列表初始化都做了什麼?C++
- iOS super 關鍵字幫我們做了什麼?iOS
- SQL Server 資料庫優化到底做了什麼SQLServer資料庫優化
- 僅1年GitHub Star數翻倍,Flink 做了什麼?Github
- 智慧數字經營3.0都做了什麼調整?
- 從技術轉管理,我做了什麼來拯救自己?
- NET編譯時都做了一些什麼 (轉)編譯
- 非同步函式async await在wpf都做了什麼?非同步函式AI
- [原始碼解析] Flink的groupBy和reduce究竟做了什麼原始碼
- oracle全文索引之同步和優化索引做了什麼Oracle索引優化
- 看日本農民用智慧農業技術都做了什麼
- 【雜談】一個回車下去,瀏覽器做了什麼?瀏覽器
- 為什麼要在事務結束後,立即進行COMMIT?MIT