oracle資料庫寫入資料的過程

2021-08-09 16:23:19 字數 1248 閱讀 6055

各種後台程序的作用:

ckpt、lgwr、dbwn之間的協作。

ckpt:每隔3秒或更頻繁寫一次,寫入控制檔案,記錄dbwn從sga寫入磁碟的塊的位置。

lgwr:每3秒,1/3滿buffer,commit,dbwn寫之前。將buffer中資料寫入物理檔案。

dbwn:將sga中髒塊寫入datafile。

oracle 寫入資料過程:

oracle 寫資料過程:dml操作一執行,首先在redo buffer中記錄語句,在buffer cache中執行更改,修改資料塊。然後lgwr程序根據上述規則,將redo buffer中的資訊寫入到物理檔案。此過程比較快(redo log為連續寫)。完成後,dbwn會將buffer cache中髒資料塊對應的原始資料,複製到undo表空間,然後更新資料。(隨機寫,比較慢)。期間ckpt程序根據3秒的原則,作檢查點,記錄哪些髒 資料庫寫到了data file中(這裡的檢查點為增量檢查點,並不是完全將髒資料寫完,只是在控制檔案中記錄寫到**了。)。將需要的資訊記錄在控制檔案中。若例項崩潰或需要 錯誤恢復,從檢查點位置以後的redo需要重新應用到datafile(常說的redo過程,前滾)。此時根據事務是否提交了,未提交的事務,根據 undo表空間的資料進行恢復(常說的undo,後滾操作)

另一位網友的介紹:

1、事務開始;

2、在buffer cache中找到需要的資料塊,如果沒有找到,則從資料檔案中載入buffer cache中;

3、事務修改buffer cache的資料塊,該資料被標識為「髒資料」,並被寫入log buffer中;

4、事務提交,lgwr程序將log buffer中的「髒資料」寫入redo log file中;

5、當發生checkpoint,ckpt程序更新所有資料檔案的檔案頭中的資訊,dbwn程序則負責將buffer cache中的髒資料寫入到資料檔案中。

附:checkpoint 由ckpt程序觸發oracle進行checkpoint動作,將data buffer中的髒塊(已經寫在redo裡記錄但是沒有寫到datafile裡的)的內容寫入到data file裡並釋放站用的空間,由dbw後台程序完成,並修改controlfile和datafile的scn.

一般手工執行(alter system checkpoint)是由於要刪除某個日誌但是該日誌裡還有沒有同步到data file裡的內容,就需要手工check point來同步資料,然後就可以drop logfile group n.

資料庫 寫入資料過程

1 事務開始 2 在buffer cache中找到需要的資料塊,如果沒有找到,則從資料檔案中載入buffer cache中 3 事務修改buffer cache的資料塊,該資料被標識為 髒資料 並被寫入log buffer中 4 事務提交,lgwr程序將log buffer中的 髒資料 寫入redo...

Oracle 將檔案內容寫入資料庫

我們都知道在bbs 論壇或者其他各種 都允許個人向 提交附件資訊,或者是乙個壓縮包或者是乙個檔案,那麼這種附件傳到伺服器之後以什麼形式儲存呢?在這裡介紹一種將檔案的資訊寫入資料庫中的方法。眾所周知,oracle中的lob large object 可以儲存非常大的資料。這樣就可以在不改變檔案中內容格...

tushare資料寫入SQLite 資料庫

原帖 這一節 我們學習如何把得到的資料寫入資料庫。雖然也可以寫入excel或者json,不過考慮到後面用的的排序和其他python指令碼的呼叫,最後選擇了輕量級的資料庫sqliite作為首選。coding utf 8 資料庫的操作 import sqlite3,time,datetime autho...