oracle中update的細節

dotaddjj發表於2011-08-02

今天一天比較忙,不過好歹完成了一個知識點的整理oracle的更新資料的原理和其中的latch鎖。

前段時間提到oracle的關於update原理,個人查閱資料,oracle中關於update 資料塊時的具體步驟大家可以參考下,如果覺得有問題可以自己嘗試dump下資料塊來看看。

1 首先檢視buffer cache中是否存在資料塊,如果存在則取出不存在oracle則要資料檔案中讀取資料塊資訊

2 檢視該資料塊的latch鎖,如果沒有則oracle選擇等待。

3 oracle更新該資料塊,並把相應的原資料塊映象寫入undo。

4 commit時oracle釋放該table的lock鎖資源,並釋放回滾段資訊,更新scn。

因為資料檔案中頭部存在scn,控制檔案也存在scn,關於資料的每行也存在scn資訊,透過select ora_rowscn from dual也可以查到關於此table的scn。

其中上面講到的latch鎖是oracle關於資料庫記憶體中的鎖,而且此latch鎖獲取是瞬間的獲取和釋放,必須存在orac記憶體中的鎖,所以我們無法像oracle中table一樣而可以很直觀的檢視到oracle的lock。

latch是非佇列的,等於一旦記憶體中資料塊latch釋放新的latch都會提出需求,此時oracle把關於此資料塊的記憶體latch賦予哪個session了?雖然oracle的latch獲取和釋放非常快,但是個人覺得latch也應該有一個管理的方案,由於latch裡面的具體的細節暫時還沒有明確文件和具體方案資訊。瞭解latch的可以幫俺看看。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1053348/,如需轉載,請註明出處,否則將追究法律責任。

相關文章