oracle 的DML命令的詳細處理過程
對於DML語句來說,只要修改了資料塊,Oracle資料庫就會將修改前的資料保留下來,儲存在undo segment裡,而undo segment則儲存在undo表空間裡。從Oracle 9i起,有兩種undo的管理方式:自動Undo管理(Automatic Undo Management,簡稱AUM)和手工Undo管理(Manual Undo Management,簡稱MUM)。Oracle 9i之前只能使用MUM,而且在MUM中,undo segment又叫做rollback segment。從Oracle 9i起,Oracle就建議使用AUM,而不應再使用MUM了。
DML語句與undo
當我們發出一條DML(比如update tab set col1='A' where col1='B')語句時,其執行過程可大致概括為以下幾步。
1、在shared pool裡進行解析,從而生成執行計劃。
2、假設根據執行計劃,得出col1='B'的記錄存放在10號資料檔案的54號資料塊裡。
3、伺服器程式在buffer cache裡找一個可用的undo資料塊,如果沒有發現,則到undo表空間裡找一個可用的undo塊,並調入buffer cache。假設獲得的undo資料塊號為24號,位於11號undo資料檔案裡。
4、將改變前的值,也就是A放入11號undo資料塊。
5、由於undo資料塊發生了變化,於是產生重做記錄,假設重做記錄號為120。
行號 事務id file# block# row column value
120 T1 24 11 10 col1 A
6、在buffer cache裡找到54號資料塊。如果沒有發現,則從10號資料檔案裡調入。
7、將改變後的值,也就是B放入54號資料塊。
8、由於資料塊發生了變化,於是產生重做記錄,假設重做記錄號為121。
行號 事務id file# block# row column value
121 T1 10 54 10 col1 B
9、控制權返回給使用者,如果在SQL*Plus裡執行DML,則表現為游標返回。
10、當使用者發出commit命令時,觸發LGWR程式,將120與121這兩個重做記錄寫入聯機日誌檔案,並將54號資料塊和11號undo資料塊頭部所記錄的事務狀態標記設定為已提交。然後控制權返回給使用者,如果在SQL*Plus裡執行DML操作,則表現為游標返回。
11、這個時候,54號資料塊以及11號undo塊並不一定被DBWn寫入資料檔案。只有在髒資料塊的數量達到一定程度才會被寫入。
事務只要被提交或回滾,那麼該事務所使用的undo塊就可以被覆蓋。對於上面的例子來說,當第10步,使用者發出commit命令以後,11號undo塊裡的資料就可以被其他事務所覆蓋。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-681077/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DML 語句處理過程
- oracle處理SQL的過程OracleSQL
- 原創:oracle 授權的詳細過程Oracle
- 【原始碼】Redis命令處理過程原始碼Redis
- Ceph pg unfound處理過程詳解
- 泊松過程的詳細理解
- Oracle一個SQL語句的處理過程(轉)OracleSQL
- oracle 11G RAC 建立詳細過程Oracle
- Oracle->Mysql dblink 建立詳細過程OracleMySql
- ORACLE 查詢語句處理過程(Oracle
- SQL語句的處理過程SQL
- 分散裝運處理的過程
- ORACLE資料庫壞塊的處理 (一次壞快處理過程)Oracle資料庫
- Oracle釋出一個SQL語句的處理過程OracleSQL
- Oracle 11G DataGuard重啟詳細過程Oracle
- redis cluster + sentinel詳細過程和錯誤處理三主三備三哨兵Redis
- oracle taf unknown 問題處理過程Oracle
- Oracle 11g在RHEL 6.4下的詳細安裝過程Oracle
- centos7安裝的詳細過程CentOS
- Oracle一次縮小表空間的處理過程Oracle
- python中PCA的處理過程PythonPCA
- DOM在Ahooks中的處理過程Hook
- SQL語句的處理過程修正SQL
- OnWndMsg函式的處理過程函式
- 詳述一條SQL引發的高CPU故障處理過程SQL
- 如何查詢DML操作的詳細記錄
- ORACLE EXPDP命令使用詳細Oracle
- DML對QUERY CACHE 處理過程之原始碼分析原始碼
- MySQL MHA詳細搭建過程MySql
- 異常處理過程
- linux下cacti的搭建之詳細過程!Linux
- [譯] 最詳細的 CSS 字元轉義處理CSS字元
- 資料庫變慢的處理過程資料庫
- 超詳細的ArrayList擴容過程(配合原始碼詳解)原始碼
- 處理DML語句的幾個階段
- oracle 案例-控制檔案丟失故障處理過程Oracle
- nginx配置https詳細過程NginxHTTP
- 大資料的處理是怎樣的過程大資料