update語句的執行步驟和其餘DML語句的執行步驟是同樣的包含insert 、delete語句等,執行步驟以下:數據庫
1、若是數據和回滾數據不在數據庫高速緩存區中,則oracle服務器進程將把他們從數據文件中讀取到數據庫高速緩存區中。緩存
2、oracle服務器進程在要修改的數據行上加鎖(行一級的鎖)服務器
3、oracle服務器進程將數據的變化信息和回滾段所須要的信息都記錄在重作日誌緩衝區中oracle
4、oracle服務器進程將回滾所需的原始值和對數據所作的修改都寫入數據庫高速緩衝區。以後在數據庫高速緩存區中全部的這些數據塊都將被標記爲髒緩衝區,由於此時內外存的數據是不一致的。spa
5、而後由DBWR後臺進程負責將數據庫高速緩存區中的髒緩存區中的數據寫到數據文件中,實現內外存的數據一致。至於DBWR後臺進程的執行時間點是有oracle系統的設置所決定的,包含在一下狀況時觸發DBWR進程執行數據的寫入。日誌
(1)緩衝區的數量超過了所設定的限額進程
(2)所設定的時間間隔已到事件
(3)當有進程須要高速緩存區,可是此時又沒有空閒的高速緩存區時。事務
(4)當校驗點發生時資源
(5)當某個表被刪除drop或者被截斷truncate時
(6)當某個表空間被設置爲只讀狀態時
(7)當使用相似alter tablespace users begin backup的命令對錶空間進行聯機備份時
(8)當某個臨時表空間被設置爲只脫機狀態或正常狀態時
commit語句的執行順序:
1、服務器進程將提交的記錄連同產生的SCN碼一塊兒寫到重作日誌緩存區中
2、LGWR進程將把重作日誌緩存區中一直到所提交的記錄的全部記錄連續的寫到重作日誌文件中。在此以後,oracle服務器就能夠保證即便在系統崩潰的狀況下全部提交的數據也能夠獲得恢復
3、oracle通知用戶進程提交操做已經完成
4、服務器進程將修改數據庫高速緩存區中的相關數據的狀態並釋放資源和打開鎖(實際上就是修改數據庫高速緩存區中的髒緩存區)
此時這些數據可能並無寫入數據文件中,這些數據緩存區被標記爲髒緩存區。高速緩存區中 的數據由DBWR進程寫入數據文件中。
LGWR進程在下列狀況下將重作日誌緩存區中的數據寫入重作日誌文件:
(1)當某個事務被提交時
(2)當重作日誌緩存區中的變化的記錄超過1M時
(3)當緩存區的容量超過1/3時
(4)在DBWR進程將數據庫高速緩存去中修改過的數據塊寫入數據文件以前
(5)每3秒鐘
注:從LGWR進程的觸發事件看,LGWR進程的執行必定在DBWR進程的執行以前,這樣才能保證數據恢復的完整性。