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...