UPDATE操作和UNDO
UPDATE T SET COL='A' WHERE COL='B';
1、在SHARED POOL裡解析,從而生成執行計劃。
2、假如根據執行計劃,得出COL='B'的記錄放在10號資料檔案的54號資料塊裡。
3、伺服器程式在BUFFER CACHE裡找到一個可用UNDO資料塊,如果沒有發 現,則到UNDO表空間找一個可用的UNDO資料塊,並調入BUFFER CACHE。假如獲得的UNDO資料塊在10號表空間塊號為24號。
4、將改變前的值B放入24號資料塊裡。
5、由於UNDO塊發生了變化,需要產生重做記錄,假設重做記錄號位120:
行號 事務ID FILE# BLOCK#
VALUE
120 T1 11 24 B
6、在BUFFER CACHE找到54號資料塊,如果沒有,則到UNDO表空間調入。
7、將改變後的值也就是A放入54號資料塊。
8、由於資料塊發生了變化,於是產生重做記錄,假設重做記錄號為121:
行號 事務ID FILE# BLOCK#
VALUE
121 T1 10 54 A
9、控制權返回給使用者。
10、當使用者發出COMMIT命令時,觸發LOGWR程式,將120和121這兩個重做 記錄寫入聯機日誌檔案,並將54號資料塊和24號資料塊的頭部所記錄的 事務狀態標誌為已提交。然後控制權返回給使用者。
11、此時,54和24號資料塊裡UNDO塊並不一定被DBWN寫入資料檔案。只有 在髒資料塊的數量達到一定程度才會被寫入。
12、事務只要被提交或回滾,那麼該事務所使用的UNDO塊就可以被覆蓋。
事務只要被提交或回滾,那麼事務所使用的UNDO塊資料就可以被覆蓋。對於上面的例子來說,當第10步,使用者發出COMMIT命令後,11號UNDO塊裡的資料就可以被其它事務所覆蓋。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24496749/viewspace-1045267/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Delete,insert,update與undo的關係[轉載TOM文章]delete
- update誤操作後 通過undo記錄的scn找回原紀錄
- MySQL 4.1.0 中文參考手冊 --- 6.4 資料操縱:SELECT, INSERT, UPDATE, DELETE (轉)MySqldelete
- Windows Update與Microsoft UpdateWindowsROS
- Innodb undo之 undo結構簡析
- for update和for update nowaitAI
- FOR UPDATE NOWAIT和 FOR UPDATEAI
- 事件協作和事件溯源事件
- MySQL undoMySql
- Iptables 實操
- 040、列女操
- Git操作和程式碼管理Git
- Git遠端協作和分支Git
- 小程式如何製作和代理
- Oracle Redo and UndoOracle Redo
- Oracle undo 管理Oracle
- Git undo 操作Git
- mysql undo管理MySql
- Oracle Undo SegmentOracle
- oracle undo管理Oracle
- oracle undo一Oracle
- Undo Mode (30)
- for update 和 for update of 有什麼區別
- 【UNDO】使用重建UNDO表空間方法解決UNDO表空間過大問題
- update restartREST
- Innodb undo之 undo物理結構的初始化
- 函式實操函式
- mysql update join優化update in查詢效率MySql優化
- Oracle中的for update 和 for update nowaitOracleAI
- MySQL常用操作和主從配置MySql
- 圖的基本操作和實現
- 平衡-工作和生活的藝術
- 找工作和租房避坑攻略
- 【undo】undo 意外刪除處理辦法(非歸檔)
- Oracle 12c 新特性 - 臨時表undo(TEMP UNDO)Oracle
- MySQL purge 清理undoMySql
- InnoDB undo log原理
- Oracle深入Undo探究Oracle