溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

oracle后臺進(jìn)程LGWR,DBWR,SMON,CKPT的工作機(jī)制

發(fā)布時(shí)間:2020-08-19 11:39:02 來源:ITPUB博客 閱讀:241 作者:家有ORACLE老公 欄目:關(guān)系型數(shù)據(jù)庫

oracle后臺進(jìn)程LGWR,DBWR,SMON,CKPT的工作機(jī)制

控制文件:記載了數(shù)據(jù)文件名稱和路徑。重做日志名稱和位置,日志序列號,檢查點(diǎn)和日志歷史信息,以及RMAN備份信息。當(dāng)oracle服務(wù)器出現(xiàn)實(shí)例失敗或介質(zhì)失敗時(shí),通過控制文件所記載的日志和檢查點(diǎn)信息,oracle可以確定執(zhí)行恢復(fù)所需要的日志文件。

數(shù)據(jù)文件:是用于存儲數(shù)據(jù)庫數(shù)據(jù)的物理文件,它由若干個(gè)操作系統(tǒng)系統(tǒng)文件組成,在數(shù)據(jù)文件中中存儲著用戶數(shù)據(jù)(表,索引等),數(shù)據(jù)字典以及回滾段數(shù)據(jù)等。數(shù)據(jù)文件和表空間有著密切的關(guān)系,oracle數(shù)據(jù)庫至少要包含一個(gè)數(shù)據(jù)文件,并且數(shù)據(jù)文件是表空間的物理組成元素,一個(gè)表空間可以包含多個(gè)數(shù)據(jù)文件,并且每個(gè)數(shù)據(jù)文件只能唯一的屬于某個(gè)表空間。

聯(lián)機(jī)重做日志文件:重做日志文件是用于記錄數(shù)據(jù)庫變化的物理文件,其作用是在發(fā)生意外時(shí)恢復(fù)oracle數(shù)據(jù)庫。
日志文件以日志文件組的形式存在。
我們知道重做日志緩沖區(qū)是循環(huán)使用的:當(dāng)重做日志緩沖區(qū)的重做項(xiàng)被寫入聯(lián)機(jī)重做日志文件后,重做日志緩沖去的內(nèi)容被覆蓋,但是這種循環(huán)以組的方式循環(huán)。


LGWR日志寫入進(jìn)程:LGWR日志寫入進(jìn)程負(fù)責(zé)將重做日志緩存區(qū)的日志條目寫入磁盤上的聯(lián)機(jī)日志文件。當(dāng)運(yùn)行DML或DDL語句時(shí),服務(wù)器進(jìn)程首先要將事物的變化記載道重做日志緩存區(qū),然后才會寫入數(shù)據(jù)高速緩沖區(qū),并且重做日志緩沖區(qū)的內(nèi)容將會被寫入連接日志文件,以避免系統(tǒng)出現(xiàn)意外帶來的數(shù)據(jù)損失(如果操作系統(tǒng)斷電,內(nèi)存中的重做日志緩沖區(qū)的內(nèi)容會丟失,而存在磁盤上的聯(lián)機(jī)日志文件則不會丟失),這項(xiàng)任務(wù)由LGWR來完成。
重做日志緩存區(qū)是一個(gè)循環(huán)結(jié)構(gòu),LGWR將重做日志緩沖區(qū)中的重做記錄寫入聯(lián)機(jī)重做日志文件后,相應(yīng)的緩沖區(qū)內(nèi)容將被清空,保證orale有空閑的重做日志緩沖區(qū)可以寫入。

在出現(xiàn)以下情況時(shí)LGWR會開始工作:

--在DBWR進(jìn)程將臟緩沖區(qū)寫入數(shù)據(jù)文件之前。
--在重做日志記錄達(dá)到緩沖區(qū)的三分之一。
--日志緩沖區(qū)記錄的日志多余1m。
--每隔3秒鐘。//重做日子緩沖區(qū)是循環(huán)使用的,要騰出足夠的空間給新的記錄使用
--提交事務(wù)(執(zhí)行commit)//提交事務(wù)相當(dāng)于確定保存修改,不存入日志文件有丟失的可能。


另外。oracle采用了快速提交機(jī)制,當(dāng)執(zhí)行commit操作時(shí),并不是將’臟緩沖區(qū)‘’數(shù)據(jù)寫入到數(shù)據(jù)文件中,而是將重做日志緩沖區(qū)的內(nèi)容寫入到重做日志文件中,以確保數(shù)據(jù)庫完整性。此時(shí)即使系統(tǒng)出現(xiàn)意外情況(掉電,系統(tǒng)崩潰),因?yàn)楸惶峤皇聞?wù)已經(jīng)記載到了存放在磁盤上的聯(lián)機(jī)重做日志文件中,將來在重新啟動時(shí)會自動進(jìn)行實(shí)例恢復(fù),
并將被提交事務(wù)所修改數(shù)據(jù)寫入到數(shù)據(jù)文件中,從而避免了數(shù)據(jù)丟失。

DBWn數(shù)據(jù)庫寫入進(jìn)程:
數(shù)據(jù)庫寫入進(jìn)程負(fù)責(zé)將數(shù)據(jù)庫高速緩沖區(qū)(臟緩沖區(qū))的類容寫入到數(shù)據(jù)文件。盡管有一個(gè)數(shù)據(jù)庫寫進(jìn)程 (DBW0)適用于大多數(shù)系統(tǒng),但數(shù)據(jù)庫管理員可以配置額外的進(jìn)程(DBW0-DBW9,最多10個(gè)進(jìn)程),以提高寫入性能,通過初始化參數(shù)DB_WRITER_PROCESSES來完成。當(dāng)數(shù)據(jù)庫高速緩沖區(qū)的快被修改, 它被標(biāo)記為臟緩沖區(qū)并添加到以SCN為循序的LRUW列表,同時(shí),這個(gè)順序與重做日志緩沖區(qū)的順序一致。
在出現(xiàn)一下情況時(shí)DBWn進(jìn)程會開始工作
--系統(tǒng)發(fā)出檢查點(diǎn)指令。//同步數(shù)據(jù),詳見檢查點(diǎn)進(jìn)程(CKPT)
--臟緩沖區(qū)個(gè)數(shù)達(dá)到指定閾值。
--服務(wù)進(jìn)程搜索一定數(shù)目的數(shù)據(jù)塊后,不能找到自由緩沖區(qū)。
--數(shù)據(jù)寫入計(jì)時(shí)時(shí)間到。
--表空間脫機(jī)或進(jìn)入只讀狀態(tài)。
--執(zhí)行刪除或截?cái)啾聿僮?
--執(zhí)行alter  tablespace.....begin  backup命令。//需要同步數(shù)據(jù),原理同檢查點(diǎn)。
.

數(shù)據(jù)修改到發(fā)生檢查點(diǎn)整個(gè)流程
1   當(dāng)數(shù)據(jù)被修改時(shí),第一次讀取,需要將數(shù)據(jù)從數(shù)據(jù)文件讀入數(shù)據(jù)庫高速緩沖區(qū)。
2   數(shù)據(jù)讀入數(shù)據(jù)庫高速緩沖區(qū)后。我們修改數(shù)據(jù)的條目先記錄入重做日志緩沖區(qū);
3   接著新數(shù)據(jù)被寫入數(shù)據(jù)庫高速緩沖區(qū).
4    提交,LGWR進(jìn)程將條目從重做日志緩沖區(qū)寫入聯(lián)機(jī)重做日志文件,
5    執(zhí)行檢察點(diǎn)CKPT,同步數(shù)據(jù)庫,發(fā)現(xiàn)聯(lián)機(jī)日志文件為最新,同步更新數(shù)據(jù)文件,控制文件,觸發(fā)了DBWn進(jìn)程。

SMON系統(tǒng)監(jiān)控進(jìn)程
SMON系統(tǒng)監(jiān)控進(jìn)程主要作用是強(qiáng)制對數(shù)據(jù)庫進(jìn)行恢復(fù)操作。在實(shí)例啟動時(shí),如果上一次數(shù)據(jù)庫是非正常關(guān)閉,并且重做日志文件和控制文件的SCN值是不同的,oracle將自動在重新打開數(shù)據(jù)庫之前,通過執(zhí)行重做日志文件的記錄,來同步所有數(shù)據(jù)文件,控制文件和重做日志文件,確保所有數(shù)據(jù)庫文件的一致性,然后才打開數(shù)據(jù)庫。
如果檢查點(diǎn)進(jìn)程一列中,第四步完成后發(fā)生系統(tǒng)掉電,崩潰,那么數(shù)據(jù)會不會丟失了?當(dāng)然不會。我們知道,系統(tǒng)掉電,導(dǎo)致內(nèi)存中的數(shù)據(jù)丟失。那么自然上列中的第五步無法完成(無法從數(shù)據(jù)庫告訴緩沖區(qū)寫入數(shù)據(jù)文件),但是由于此時(shí)已寫入聯(lián)機(jī)日志文件。因此,此時(shí)數(shù)據(jù)將從鏈接日志文件中更新,而更新的數(shù)據(jù)量是多少,自然是由SCN決定。這一過程我們稱為''實(shí)例恢復(fù)''。該過程不需要數(shù)據(jù)庫管理員手工干預(yù),由SMON進(jìn)程自動完成。

SMON進(jìn)程的工作歸納如下:

--進(jìn)行實(shí)例恢復(fù)
--合并數(shù)據(jù)文件的自由空間
--釋放數(shù)據(jù)文件的臨時(shí)段

CKPT檢查點(diǎn)進(jìn)程

CKPT檢查點(diǎn)進(jìn)程的作用是執(zhí)行一個(gè)檢查點(diǎn),同步數(shù)據(jù)庫的所有數(shù)據(jù)文件,控制文件和重做日志文件。當(dāng)執(zhí)行檢察點(diǎn)時(shí),系統(tǒng)促使DBWn將數(shù)據(jù)緩存區(qū)中數(shù)據(jù)的變化寫入數(shù)據(jù)文件,同時(shí)完成對數(shù)據(jù)文件和控制文件的更新,記錄下當(dāng)前數(shù)據(jù)庫的結(jié)構(gòu)和狀態(tài)。在執(zhí)行一個(gè)檢查點(diǎn)之后,數(shù)據(jù)庫處于一個(gè)完整狀態(tài)。在數(shù)據(jù)庫發(fā)生崩潰后,可以將數(shù)據(jù)庫恢復(fù)到上一個(gè)檢查點(diǎn)。oracle數(shù)據(jù)庫在執(zhí)行數(shù)據(jù)變化的語句時(shí),會針對任何修改生成一個(gè)順序遞增SCN值,并且會將SCN值連同事物的變化一起記載到重做日志緩存區(qū)。在數(shù)據(jù)文件。控制文件頭部以及重做日志文件中都記載有該值。oracle通過比較各種文件的SCN值,確定文件是否損壞,系統(tǒng)是否異常,最終確定系統(tǒng)是需要進(jìn)行實(shí)例恢復(fù)還是介質(zhì)恢復(fù)。在發(fā)出檢查點(diǎn)時(shí),數(shù)據(jù)文件??刂莆募椭刈鋈罩镜腟CN值完全一致。

分類:全局檢查點(diǎn)(關(guān)閉數(shù)據(jù)庫時(shí))、局部檢查點(diǎn)(表空間)、增量檢查點(diǎn)(切日志組)

進(jìn)程CKPT在以下情況下會開始工作

--發(fā)生日志切換    alter system switch logfile;

--關(guān)閉實(shí)例   
--手工執(zhí)行檢查點(diǎn)操作   alter system checkpoint;
--有初始化參數(shù)log_checkpoint_interval和log_checkpoint_timeout強(qiáng)制發(fā)出 。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI