一次事務過程

2021-04-12 23:42:23 字數 1044 閱讀 5311

第二篇 一次事務過程

對於開發人員來說,我們經常做的是啟動乙個事務,執行sql,提交事務。這就完成了我們的工作。但是,就在這些簡單的動作背後,網路和資料庫都做了些什麼呢。我們都想知道。

下面以乙個例項來說明。

背景:使用者正執行乙個連線到oracle資料庫的客戶端應用程式,是乙個員工檔案管理程式。

過程:1.使用者修改了一筆員工檔案記錄的姓名,並單擊了「儲存」,這時客戶端應用程式通過網路向oracle伺服器程序傳送了一條sql update語句;

(注:關於客戶與伺服器的如何連線的過程,將另起篇幅說明。將會涉及到:oracle net元件、mts、***、dispatcher等概念)

2.伺服器程序收到update語句請求以後,在sga的sql區中查詢同樣的語句,如果找到了則執行。否則,伺服器程序就檢查語句的語法,並對它進行分析,從而以最優的方法執行(這個過程叫做parsing and optimizing)。一旦這個處理完成了以後,這條語句就快取在sga的sql共享區中;

3.伺服器程序將原來的員工的、資料拷貝到回滾段(或重做表空間,即undo tablespace,oracle後來的版本增加了undo tablespace功能,以取待原有的system表空間中的回滾段的功能)。將原來的員工資料拷貝到回滾段中是為了將來使用者取消事務而備用的。在這個過程完成之後,伺服器程序修改資料庫的資料塊以改變員工的姓名。修改後的資料庫的資料塊此時儲存在sga的資料庫緩衝區中。

4.伺服器程序在sga日誌緩衝區內記錄加滾段和資料庫塊的改變資訊。(注意:回滾段的改變也同樣要寫入日誌,因為它也是事務的一部分);

5.客戶端的使用者提交事務;

6.lgwr(log writer)程序將這個事務的日誌資訊從日誌緩衝區中寫入當前的磁碟日誌檔案中。當作業系統確定寫日誌檔案已經正確完成時,事務才算是提交了。

7.伺服器程序向客戶傳送資訊以確認提交。

在這整個過程中有個疑問:只是將事務的日誌寫入日誌檔案,但資料庫塊,也就是員工姓名改變後的資料並未寫入磁碟檔案,這是為什麼呢?進而我又會想到,如果有多個事務同時作用於相同的資料呢。這時,oracle是怎麼處理這些問題的呢?帶著這些問題,繼續學習,弄懂後再貼出來。:)

記一次併發和事務探索過程

1 事務的相關概念和整合過程就不在這裡重複,可看本人另一篇 2 這次主要是探索併發中資料的問題,場景是電商系統下單減庫存,mysql,暫沒涉及分布式和集群 3 所有測試我們先預設原商品庫存為100,且我們通過使用者不同來指定休眠更好的看效果,admin為休眠的使用者它下單1個商品,另乙個請求下單3個...

一次完整的HTTP事務包含哪些過程

一次完整的請求 響應被稱為http事務,在http事務中有一系列的資訊交換,這些資訊交換是乙個不可分割的整體,也就是說,要麼所有的資訊全部交換完,要麼一次交換也不進行。畢竟事務的特性擱那擺著 http事務有以下四個部分組成 客戶端與伺服器建立連線。http是基於tcp協議,這裡的連線可以理解為tcp...

ibatis一次sql過程

為了理清楚 ibatis一次sql過程中發生了什麼,本文將對ibatis一次sql過程做簡要的分析。string resource mybatis.cfg.xml reader reader resources.getresourceasreader resource sqlsessionfacto...