oracle 體繫結構初步認識(一)

來源:互聯網
上載者:User

標籤:oracle

剛開始學習oracle,記錄一下自己的學習筆記,如有錯誤,還望各位大牛多多指教。

首先先上一張oracle體繫結構中相對比較重要的圖,如下650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/77/3A/wKiom1ZlZOGAw9XOAAK_Uw3mxg0089.jpg" title="912C7CEA6FB04838BDE18C50F24164C6.jpg" alt="wKiom1ZlZOGAw9XOAAK_Uw3mxg0089.jpg" />當我們輸入一條簡單的命令時候,例如第一次輸入update table_name t set t.a=30;當我們執行這一條sql的時候,我們這一條sql現在share pool(共用池)中的Data Dictionary cache(資料字典緩衝區)中的row cache進行語義文法分析,分析完之後將在Library Cache(庫快取)產生相對應得執行計畫,這一個操作記錄也會緩衝到Redo Log Buffer中,相對於更新的資料也會更新到Datebase Buffer Cache的髒塊中,當我們點擊commit的時候,將會觸發LGWR,將日誌緩衝區寫到記錄檔中,但是commit時並不會觸發DBWn,不會把相對應更新的資料寫到DBWn中,而這個時候資料庫down了,Data Dictionary cache更新的資料也會丟失,這時候我們是通過Redo Log files通過SMON恢複Redo Log Buffer中緩衝的操作記錄,Date files以及Control files還原Database Buffer Cache的相關內容。下面稍微詳細的介紹下後台幾個進程相關的功能以及相對應的觸發機制:

LGWR 日誌寫入進程( Log Writer)
LGWR
日誌寫入進程負責將重做日誌緩衝區的日誌條目寫入磁碟上的聯機重做記錄檔。
當運行 DML或 DDL語句時, 伺服器處理序首先要將事務的變化記載到重做日誌緩衝區, 然後才會寫入資料高速緩衝
區, 並且重做日誌緩衝區的內容將會被寫入聯機重做記錄檔, 以避免系統出現意外帶來的資料損失( 如果作業系統斷
電, 記憶體中的重做日誌緩衝區的內容會丟失, 而存在磁碟上的聯機記錄檔則不會丟失) , 這項任務由 LGWR 來完成。
重做日誌緩衝區是一個迴圈結構, LGWR 將重做日誌緩衝區中的重做記錄寫入聯機重 做記錄檔後, 相應的緩衝區內
容將被清空, 保證 Oracle 有閒置重做日誌緩衝區可以寫入。
在出現以下情況時 LGWR 會開始工作:
●在 DWBR 進程將髒緩衝區寫入資料檔案之前。
//預寫協議
●在重做日誌記錄達到緩衝區的三分之一。
●日誌緩衝區記錄的日誌多於 1M
●每隔 秒鐘。
//重做日誌緩衝區是迴圈使用的, 要騰出足夠的空間給新的記錄使用
●提交事務( 執行 Commit) 。
//提交事務相當於確定儲存修改, 不存入記錄檔就有丟失的可能
官方文檔中LGWR開始工作的情況:
■ A user commits a transaction (see "Committing Transactions"on page 10-10).
使用者提交了事務
■ An online redo log switch occurs.
發生聯機重做日誌切換
■ Three seconds have passed since LGWR last wrote.
LGWR最後一次寫入已經過了3/每隔3
■ The redo log buffer is one-third full or contains 1 MB of buffered data.
重做日誌緩衝區達到1/3滿或者已緩衝了1MB的資料
■ DBWn must write modified buffers to disk.
DBWn必須將修改的緩衝區寫到磁碟
Oracle 總是先記載資料變化到重做日誌緩衝區, 然後才修改資料快取。 與之類似, 在後台進程 DBWn將髒緩衝區
寫入到資料檔案之前, 首先要由後台進程 LGWR 將重做日誌緩衝區寫入到重做日誌中。 與資料快取相比, 重做日誌
緩衝區相對要小得多, 但寫入頻率高的多, Oracle 必須要確保重做日誌緩衝區總有足夠的空間容納新事務, 因此每隔 3
秒鐘或重做日誌緩衝區已有三分之一填滿時 LGWR 會自動工作。
另外, Oracle 採用了快速提交機制, 當執行 COMMIT操作時, 並不是將“髒緩衝區”數 據寫入到資料檔案中, 而是將重
做日誌緩衝區的內容寫入到重做記錄檔中, 以確保資料庫完整性。 此時即使系統出現意外情況( 如掉電、 系統崩潰
等) , 因為被提交事務已經記載到了存放在磁碟上的聯機重做記錄檔中, 將來在重新啟動資料庫時系統會自動進行實
例恢複, 並將事務所修改資料寫入到資料檔案中, 從而避免了資料丟失。


DBWn資料庫寫入進程( Database Writer)
資料庫寫入進程負責將資料庫高速緩衝區( 髒緩衝區) 的內容寫入到資料檔案。
儘管有一個資料庫寫進程(DBW0 ) 適用於大多數系統, 但資料庫管理員可以配置額外的進程( DBW0-DBW9, 最多
10 個進程) , 以提高寫入效能, 通過設定初始化參數DB_WRITER_PROCESSES 來完成。 如果你的系統修改資料嚴重,
這些額外的 DBWn進程在單一處理器系統不是非常有用。
當資料庫高速緩衝區的塊被修改, 它被標記為髒緩衝區並添加到以 SCN( SystemChange Number, 系統更改號, 這裡可
以看做“時間”) 為順序的 LRUW( LRUWriter) 列表。
同時, 這個順序與重做日誌緩衝區的順序一致。
在出現以下情況時 DBWn進程會開始工作:
●系統發出檢查點指令。
//同步資料, 詳見檢查點進程( CKPT) 。
●髒緩衝區個數達到指定閾值。
●服務進程搜尋一定數目的資料區塊後, 不能找到自由緩衝區。
●資料寫入計時時間到。
//用戶端執行 SELECT\INSERT\UPDATE\DELETE語句時, 都需要訪問資料庫高速緩衝區。 如果是第一次訪問, 必須
要將資料由資料檔案讀取到資料庫高速緩衝區, 所以 Oracle 必須要確保資料快取總是存在足夠的“自由緩衝區”以容
納新資料。 當 DBWn進程將髒緩衝區的資料區塊寫入到資料檔案後, Oracle 將把“髒緩衝區”標記為“自由緩衝區”。 因此, 為
了保證有足夠“自由緩衝區”來存放新的資料區塊, 需要 DBWn進程工作。
●資料表空間離線或進入唯讀狀態。
●執行刪除或截斷表操作。
●執行 ALTER TABLESPACE … BEGIN BACKUP命令 alter systemflush buffer_cache/checkpoint
//需要同步資料, 原理同檢查點。


CKPT檢查點進程( Checkpoint)
CKPT檢查點進程的作用是執行一個檢查點, 同步資料庫的所有資料檔案、 控制檔案和重做記錄檔。 當執行檢
查點時, 系統促使 DBWn將資料緩衝區中資料的變化寫入資料檔案, 同時完成對資料檔案和控制檔案的更新, 記錄下當
前資料庫的結構和狀態。 在執行一個檢查點之後, 資料庫處於一個完整狀態。 在資料庫發生崩潰後, 可以將資料庫恢複
到上一個檢查點。
Oracle 資料庫在執行涉及資料變化的語句時, 會針對任何修改產生一個順序遞增 SCN( SystemChange Number) 值, 並
且會將 SCN 值連同事務的變化一起記載到重做日誌緩衝區。 在資料檔案、 控制檔案頭部以及重做記錄檔中都記載有該
值。 Oracle 通過比較各種檔案的 SCN 值, 確定檔案是否損壞、 系統是否異常, 最終確定系統是需要進行執行個體恢複還是介
質恢複。 在發出檢查點時, 資料檔案、 控制檔案和重做日誌的 SCN 值完全一致。
進程 CKPT在以下情況下會開始工作:
●發生日誌切換。
●關閉執行個體(SHUTDOWN ABORT除外)
●手工執行檢查點操作。
●由初始化參數 LOG_CHECKPOINT_INTERVALLOG_CHECKPOINT_TIMEOUT強制發出。


SMON 系統監控進程( SystemMonitor)
SMON 系統監控進程主要作用是強制對資料庫進行恢複操作。 在執行個體啟動時, 如果上一次資料庫是非正常關閉, 並且重
做記錄檔和控制檔案的 SCN 值是不同的, Oracle 將自動在重新開啟資料庫之前, 通過執行重做記錄檔的記錄, 來同
步所有資料檔案、 控制檔案和重做記錄檔, 確保所有資料庫檔案的一致性, 然後才開啟資料庫。
如果檢查點進程一例中, 第四步完成後發生系統掉電、 崩潰, 那麼資料會不會丟失呢?
當然不會。 我們知道, 系統掉電, 導致記憶體中的資料( 資料庫高速緩衝區) 的資料丟失。 那麼自然上例中的第五步無法
完成( 無法從資料庫高速緩衝區寫入資料檔案) , 但是由於此時已寫入聯機記錄檔。 因此, 此時資料將從聯機日誌文
件中更新, 而更新的資料量是多少, 自然就是由 SCN 決定。 這一過程我們成為“執行個體恢複”。 該過程不需要資料庫管理員
手工幹預, 由 SMON 進程自動完成。
該進程還負責在啟動執行個體時清理臨時段和合并區( Extent) 片段等工作。 所以 SMON進程的工作歸納如下:
● 進行執行個體恢複
● 合并資料檔案的自由空間
● 釋放資料檔案的臨時段


PMON 進程監控進程( Process Monitor)
PMON 進程監控進程負責對失敗的使用者進程或服務進程進行恢複。 當使用者進程串連到Oracle 伺服器時, Oracle 將在伺服器
端分配相應的服務進程。 這時由 PMON 進程來監視使用者進程的執行情況。 當由於種種原因, 使用者對 Oracle 資料庫的連
接, 發生崩潰、 掛起或異常終止現象時, 該進程負責清除服務進程所佔用的資源, 復原沒有完成的事務。
當 PMON 檢測到使用者進程失敗時, 進行的工作歸納如下:
● 復原目前使用者的事務
● 釋放目前使用者加的表或行級鎖
● 釋放使用者的其他資源
● 重新啟動死掉的調度進程
假定我們在用戶端運行 SQL*Plus 並通過網路訪問 Oracle 伺服器, 那麼 Oracle 將在伺服器端分配相應的服務進程。 假如用
戶異常終止 SQL*Plus, 或出現網路斷開或用戶端死機的情況, PMON 就必須檢測到這種情況, 並釋放掉服務進程所佔用
的資源。


650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

oracle 體繫結構初步認識(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.