DML 語句處理過程
如果是DML語句:
update tab set col1='A' where col1='B'
第1步: 建立遊標(Create a Cursor)
由程式介面呼叫建立一個遊標(cursor)。任何SQL語句都會建立它,特別在執行DML語句時,都是自動建立遊標的,不需要開發人員干預。多數應用中,遊標的建立是自動的。然而,在預編譯程式(pro*c)中游標的建立,可能是隱含的,也可能顯式的建立。在儲存過程中也是這樣的。
第2步:分析語句(Parse the Statement)
這裡分為語法和語句解析
首先判斷是否在shared pool裡相同的SQL;這主要是透過繫結變數(bind variable)實現的,也就是我們常說的共享SQL,---why
shared pool
如果有--就直接拿之即用
如果沒有
2.1 驗證它是合法的語句,即書寫正確
2.2 實現資料字典的查詢,以驗證是否符合表和列的定義-----why 有資料字典緩衝區
2.3 在所要求的物件上獲取語法分析鎖,使得在語句的語法分析過程中不改變這些物件的定義
2.4 驗證為存取所涉及的模式物件所需的許可權是否滿足----why 有資料字典緩衝區
第3步:執行計劃的建立或者獲取
第4步:根據執行計劃得出col1='B'的記錄存放在10號資料檔案的54號資料塊裡。
第5步:判斷UNDO是否有此資料快
伺服器程式在buffer
cache裡找一個可用的undo資料塊,如果沒有發現,則到undo表空間裡找一個可用的undo塊,並調入buffer
cache。假設獲得的undo資料塊號為24號,位於11號undo資料檔案裡。
UNDO多版本一致性讀和回退
第6步:將改變前的值,也就是A放入11號undo資料塊。
第7步:由於undo資料塊發生了變化,於是產生重做記錄,假設重做記錄號為120。
行號 事務id file# block# row column value
120 T1 24 11 10 col1 A
第8步:、在buffer cache裡找到54號資料塊。如果沒有發現,則從10號資料檔案裡調入
第9步:、將改變後的值,也就是B放入54號資料塊(記憶體)
第10步:由於資料塊發生了變化,於是產生重做記錄,假設重做記錄號為121。
行號 事務id file# block# row column value
121 T1 10 54 10 col1 B
第11步:控制權返回給使用者,如果在SQL*Plus裡執行DML,則表現為游標返回。
第12步:當使用者發出commit命令時,觸發LGWR程式,將120與121這兩個重做記錄寫入聯機日誌檔案,並將54號資料塊和11號undo資料塊頭部所記錄的事務狀態標記設定為已提交。然後控制權返回給使用者,如果在SQL*Plus裡執行DML操作,則表現為游標返回。
第13步:這個時候,54號資料塊以及11號undo塊並不一定被DBWn寫入資料檔案。只有在髒資料塊的數量達到一定程度才會被寫入。
事務只要被提交或回滾,那麼該事務所使用的undo塊就可以被覆蓋。對於上面的例子來說,當第10步,使用者發出commit命令以後,11號undo塊裡的資料就可以被其他事務所覆蓋。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/500314/viewspace-1063657/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL語句的處理過程SQL
- ORACLE 查詢語句處理過程(Oracle
- SQL語句的處理過程修正SQL
- 處理DML語句的幾個階段
- Oracle一個SQL語句的處理過程(轉)OracleSQL
- oracle 的DML命令的詳細處理過程Oracle
- Oracle釋出一個SQL語句的處理過程OracleSQL
- MySQL DML語句MySql
- 分析執行計劃優化SQLSQL語句處理的過程(轉)優化SQL
- 分析執行計劃最佳化SQLSQL語句處理的過程(轉)SQL
- 批處理刪除語句
- ORACLE 資料庫 查詢語句與DML語句Oracle資料庫
- 入門MySQL——DML語句篇MySql
- MySQL基礎之DML語句MySql
- 使用for迴圈操作DML語句
- DML對QUERY CACHE 處理過程之原始碼分析原始碼
- 異常處理過程
- mysql執行sql語句過程MySql
- select 語句的解析過程
- MySQL DML語句書寫建議MySql
- 使用loop迴圈操作DML語句OOP
- 使用while迴圈操作DML語句While
- alter session enable parallel dml 使DML語句並行執行SessionParallel並行
- Nucleus中斷處理過程!!!!
- oracle處理SQL的過程OracleSQL
- MySQL儲存過程語句及呼叫MySql儲存過程
- SQL語句執行過程詳解SQL
- CoreData執行過程的sql語句SQL
- sql語句執行過程小結SQL
- 剖析SQL語句的執行過程SQL
- Oracle SQL 語句的執行過程OracleSQL
- mysql常用語句及問題處理MySql
- MySQL 遊標(PREPARE預處理語句)MySql
- oracle動態sql語句處理(轉)OracleSQL
- 【故障處理】一次RAC故障處理過程
- 6.3. 基本SQL語句——6.3.2. DMLSQL
- MySQL 的資料管理及 DML 語句MySql
- 通過xml處理sql語句時對小於號與大於號的處理轉換XMLSQL