Oracle的commit做了什麼?

lhrbest發表於2017-07-11

Oracle的commit做了什麼?



作者: |【轉載時請以超連結形式標明文章和資訊】


連結:





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預設的就會對日誌檔案進行映象。映象的好處是當某個日誌出現問題,另外一個日誌仍然可用,可以保證資料不丟失,而且通常映象儲存於不同的硬碟,當某個儲存出現故障時,另外的儲存可以用於保證映象日誌的安全。

- The End -

相關日誌

  • 2009-12-14 
  • 2009-12-19 
  • 2009-12-12 
  • 2009-12-14 
  • 2009-12-16 





About Me

...............................................................................................................................

● 本文轉載自網路

● 本文在itpub(http://blog.itpub.net/26736162)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文部落格園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 聯絡我請加QQ好友(646634621),註明新增緣由

● 於 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

...............................................................................................................................

拿起手機使用微信客戶端掃描下邊的左邊圖片來關注小麥苗的微信公眾號:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學習最實用的資料庫技術。

Oracle的commit做了什麼?
DBA筆試面試講解
歡迎與我聯絡

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2141922/,如需轉載,請註明出處,否則將追究法律責任。

相關文章