dml語句執行過程和資料寫入

2021-06-18 00:14:05 字數 1924 閱讀 7545

dml的過程,描述入下:

oracle中寫資料的順序為:1 讀入db_buffer;2 寫回滾段;3 寫redo log buffer;4 改寫db_buffer;5 寫日誌檔案;6寫資料檔案;

1.使用者程序通過sga把語句傳給服務程序

2.服務程序在share pool中查詢該語句的可執行版本,如果有則轉向第四步,否則執行第三步

3.分析這條sql語句,並將其可執行版本送入share pool

4.執行這條語句

5.涉及資料在data buffer cache中嗎,在,跳過第六步

6.從資料檔案中把資料讀入data buffer,(是否需要索引)

7.在回滾段中記錄原來的資料值

8、server process會將被修改的資料的rowid、修改前的值、修改後的值、scn資訊和回滾段中的相關資訊寫入redo log buffer

9.在重做日誌中生成該事務的乙個拷貝

10.將data buffer中money值改為500

11.使用者收到語句執行成功執行資訊

12.commit(rollback)

13.將data buffeer中money值改為回原來值(rollback)

14.在重做日誌中記錄事務已完成(commit)/取消(rollback)

15.通知使用者事務已提交(取消)

16.清除回滾段中的undo資訊

關於lgwr和dbwr的觸發事件

lgwr

1.超時(timeout)3秒

2.在min(1m,1/3 log buffer size)時

3.提交

4.在dbwr寫之前(scn改變)

dbwr

1.當使用者程序在lru列表中搜尋了一定數量的快取塊後,仍然沒有找到可用的空閒快取塊,dbwr程序將啟動,

把髒快取塊寫入資料檔案。

2.checkpoint發生時,dbwr程序把所有的髒快取塊從lru列表中移入到寫入列表,並寫入到資料檔案。

3.資料庫快取塊中的寫入列表的長度達到一定值的時候,dbwr將寫入列表中的髒快取塊寫入資料檔案。

4.每過3秒鐘,dbwr把髒快取塊從lru列表移到寫入列表,一旦寫入列表長度達到一定值,dbwr便將資料寫入

資料檔案。

5.當表空間offline時,dbwr把所有屬於該錶空間的髒快取塊從lru列表移到寫入列表,並且開始寫入資料檔案。

6.當表空間開始熱備時,dbwr把所有屬於該錶空間的髒快取塊從lru列表移到寫入列表,並且開始寫入資料檔案。

寫control file

當資料檔案增加,刪除或改名(因為控制檔案裡會記錄資料檔名和位置)

當增加刪除或修改表空間讀寫狀態時

當增加或刪除重做日誌檔案或重做日誌檔案組

checkpoint

檢查點通過五種型別的事件來實現:

1.當發生日誌組切換的時候

2.當符合log_checkpoint_timeout,log_checkpoint_interval,fast_start_io_target,fast_start_mttr_target引數設定的時候

3.當執行alter system switch logfile的時候

4.當執行alter system checkpoint的時候

5.當執行alter tablespace *** begin backup,end backup的時候

6.當執行alter tablespace ,datafile offline的時候;

在檢查點期間會發生以下操作:

1.dbwr 將緩衝區快取中所有已修改的資料庫塊寫回到資料檔案中,

2 .檢查點程序 (ckpt) 更新所有資料檔案的檔案頭,以反映上乙個檢查點發生的時間 (scn)

使用DML語句處理資料

語法 insert into 表名 列名1,列名2,values 值1,值2,標準寫法 insert into people pid,name,gender,birthday values 1,小漢 1,to date 2020 7 9 fmyyyy mm dd 簡單寫法 insert into p...

DML語句更改資料

當我們建立了資料庫及儲存資料的表後,就需要向表中新增新資料,刪除不需要的資料,備份資料。就會用到dml語言來操縱資料。一 insert 插入資料 1,插入單行資料 insert into 表名 列表名 values 值 注意這裡的插入值 與null不一樣。2,插入多行資料 insert into 新...

oracle語句執行過程

shared pool 是快取sql語句以及sql語句對應的執行計畫 server process 前端程序 找shared pool中是否已經快取了sql語句和執行計畫,如果沒有,則解析執行計畫並放入shared pool中,如果有,則執行使用shared pool中快取 的執行計畫,減少了解析s...