Oracle 中redo log和undo log

transaction:事務

一個事務會在數(shù)據(jù)庫中申請資源來完成任務,事務或復雜或簡單,最后都只有兩個結果,事務成功或者失敗,成功需要保存事務更改,失敗需要恢復到事務前的狀態(tài)

redo log:重做日志

在操作一條數(shù)據(jù)之前需要記錄redo log,然后再修改數(shù)據(jù),以便在數(shù)據(jù)庫出現(xiàn)問題的時候通過redo log恢復已經(jīng)提交的數(shù)據(jù)。redo log是為了重現(xiàn)已經(jīng)做過的操作

undo log:撤銷日志

為了保證讀一致性,在更新數(shù)據(jù)到提交之前,Oracle會先把舊數(shù)據(jù)寫入到undo log中,以便回滾,且其他用戶讀取的數(shù)據(jù)也是和undo log中的數(shù)據(jù)一致,直到提交事務才更改數(shù)據(jù),undo log是為了撤銷所作更改。數(shù)據(jù)放在undo表空間中

不管是redo log和undo log都是記錄在內(nèi)存中的,只要斷電數(shù)據(jù)就會丟失,一般數(shù)據(jù)庫會有相應機制把內(nèi)存數(shù)據(jù)寫道磁盤上,比如幾秒鐘寫一次,數(shù)據(jù)文件大于1M寫一次,需要注意的是Oracle會先寫redo log,因為redo log記錄了整個事務完整的操作軌跡,可以用來做數(shù)據(jù)恢復

對于Oracle的基本操作,都會寫相關的日志,以便做數(shù)據(jù)恢復。對于undo來說,undo log是寫到undo表空間中,事務沒提交以前,這些undo segment是active的,不能被別的undo數(shù)據(jù)覆蓋,事務提交以后才能被別的undo覆蓋,所以如果執(zhí)行一個很大的更新或者刪除事務,就會造成undo不夠用,一個解決辦法是加大undo表空間,還有一個辦法就是把大事務拆分成小事務,比如分批提交。



Oracle分批提交DML

假設有兩個表test1和test2,兩個表都有一個ID字段(Primary Key),test1和test2都還有一個字段cname

上圖中是把需要更新的數(shù)據(jù)放到游標中一行一行更新,通過計數(shù)器實現(xiàn)更新10000行提交一次,但是這種寫法pl/sql引擎會頻繁與數(shù)據(jù)庫交互,update一次交互一次,下面這種方法能較少交互次數(shù),提高效率(對于插入操作效率提升更明顯)。


參考資料:

oracle redo回滾段詳解、Oracle數(shù)據(jù)庫之FORALL與BULK COLLECT語句

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • MySQL技術內(nèi)幕:InnoDB存儲引擎(第2版) 姜承堯 第1章 MySQL體系結構和存儲引擎 >> 在上述例子...
    沉默劍士閱讀 7,655評論 0 16
  • Mysql概述 數(shù)據(jù)庫是一個易于訪問和修改的信息集合。它允許使用事務來確保數(shù)據(jù)的安全性和一致性,并能快速處理百萬條...
    彥幀閱讀 13,972評論 10 460
  • 第一天 7月13日OCP筆記: Oracle Ocp11g準備資料: OracleFundmentals 書 管理...
    fjxCode閱讀 2,892評論 0 4
  • 個人自行閱讀時候,翻譯的文檔。因為比較渣,如果有更合理或者錯誤的地方煩勞告知,我會做修改。Oracle Data ...
    窩窩的小黑屋閱讀 1,304評論 0 3
  • 經(jīng)常聽到有人說,我后悔那時候不好好念書,現(xiàn)在只能干體力活了,也有的說我后悔辭職了,現(xiàn)在找工作不好找,工資又低,還有...
    蘭奕閱讀 603評論 0 0

友情鏈接更多精彩內(nèi)容