ORACLE系統概述(2)

jss001發表於2009-03-09

  二、 ORACLE資料庫系統的體系結構
  
  ORACLE資料庫系統為具有管理ORACLE資料庫功能的計算機系統。每一個執行的ORACLE資料庫與一個ORACLE例項(INSTANCE)相聯絡。一個ORACLE例項為存取和控制一資料庫的軟體機制。每一次在資料庫伺服器上啟動一資料庫時,稱為系統全域性區(SYSTEM GLOBAL AREA)的一記憶體區(簡稱SGA)被分配,有一個或多個ORACLE程式被啟動。該SGA 和 ORACLE程式的結合稱為一個ORACLE資料庫例項。一個例項的SGA和程式為管理資料庫資料、為該資料庫一個或多個使用者服務而工作。
  在ORACLE系統中,首先是例項啟動,然後由例項裝配(MOUNT)一資料庫。在松耦合系統中,在具有ORACLE PARALLEL SERVER 選項時,單個資料庫可被多個例項裝配,即多個例項共享同一物理資料庫。
  
  1. ORACLE例項的程式結構和記憶體結構
  1) 程式結構
  程式是作業系統中的一種機制,它可執行一系列的操作步。在有些作業系統中使用作業(JOB)或任務(TASK)的術語。一個程式通常有它自己的專用儲存區。ORACLE程式的體系結構設計使效能最大。
  ORACLE例項有兩種型別:單程式例項和多程式例項。
  單程式ORACLE(又稱單使用者ORACLE)是一種資料庫系統,一個程式執行全部ORACLE程式碼。由於ORACLE部分和客戶應用程式不能分別以程式執行,所以ORACLE的程式碼和使用者的資料庫應用是單個程式執行。
  在單程式環境下的ORACLE 例項,僅允許一個使用者可存取。例如在MS-DOS上執行ORACLE 。
  多程式ORACLE例項(又稱多使用者ORACLE)使用多個程式來執行ORACLE的不同部分,對於每一個連線的使用者都有一個程式。
  在多程式系統中,程式分為兩類:使用者程式和ORACLE程式。當一使用者執行一應用程式,如PRO*C程式或一個ORACLE工具(如SQL*PLUS),為使用者執行的應用建立一個使用者程式。ORACLE程式又分為兩類:伺服器程式和後臺程式。伺服器程式用於處理連線到該例項的使用者程式的請求。當應用和ORACELE是在同一臺機器上執行,而不再透過網路,一般將使用者程式和它相應的伺服器程式組合成單個的程式,可降低系統開銷。然而,當應用和ORACLE執行在不同的機器上時,使用者程式經過一個分離伺服器程式與ORACLE通訊。它可執行下列任務:
  l 對應用所發出的SQL語句進行語法分析和執行。
  l 從磁碟(資料檔案)中讀入必要的資料塊到SGA的共享資料庫緩衝區(該塊不在緩衝區時)。
  l 將結果返回給應用程式處理。
  系統為了使效能最好和協調多個使用者,在多程式系統中使用一些附加程式,稱為後臺程式。在許多作業系統中,後臺程式是在例項啟動時自動地建立。一個ORACLE例項可以有許多後臺程式,但它們不是一直存在。後臺程式的名字為:
  DBWR 資料庫寫入程式
  LGWR 日誌寫入程式
  CKPT 檢查點
  SMON 系統監控
  PMON 程式監控
  ARCH 歸檔
  RECO 恢復
  LCKn 封鎖
  Dnnn 排程程式
  Snnn 伺服器
  每個後臺程式與ORACLE資料庫的不同部分互動。
  下面對後臺程式的功能作簡單介紹:
  DBWR程式:該程式執行將緩衝區寫入資料檔案,是負責緩衝儲存區管理的一個ORACLE後臺程式。當緩衝區中的一緩衝區被修改,它被標誌為“弄髒”,DBWR的主要任務是將“弄髒”的緩衝區寫入磁碟,使緩衝區保持“乾淨”。由於緩衝儲存區的緩衝區填入資料庫或被使用者程式弄髒,未用的緩衝區的數目減少。當未用的緩衝區下降到很少,以致使用者程式要從磁碟讀入塊到記憶體儲存區時無法找到未用的緩衝區時,DBWR將管理緩衝儲存區,使使用者程式總可得到未用的緩衝區。
  ORACLE採用LRU(LEAST RECENTLY USED)演算法(最近最少使用演算法)保持記憶體中的資料塊是最近使用的,使I/O最小。在下列情況預示DBWR 要將弄髒的緩衝區寫入磁碟:
  l 當一個伺服器程式將一緩衝區移入“弄髒”表,該弄髒表達到臨界長度時,該服務程式將通知DBWR進行寫。該臨界長度是為引數DB-BLOCK-WRITE-BATCH的值的一半。
  l 當一個伺服器程式在LRU表中查詢DB-BLOCK-MAX-SCAN-CNT緩衝區時,沒有查到未用的緩衝區,它停止查詢並通知DBWR進行寫。
  l 出現超時(每次3秒),DBWR 將通知本身。
  l 當出現檢查點時,LGWR將通知DBWR
  在前兩種情況下,DBWR將弄髒表中的塊寫入磁碟,每次可寫的塊數由初始化引數DB-BLOCK-WRITE-BATCH所指定。如果弄髒表中沒有該引數指定塊數的緩衝區,DBWR從LUR表中查詢另外一個弄髒緩衝區。
  如果DBWR在三秒內未活動,則出現超時。在這種情況下DBWR對LRU表查詢指定數目的緩衝區,將所找到任何弄髒緩衝區寫入磁碟。每當出現超時,DBWR查詢一個新的緩衝區組。每次由DBWR查詢的緩衝區的數目是為寢化引數DB-BLOCK-WRITE-BATCH的值的二倍。如果資料庫空運轉,DBWR最終將全部緩衝區儲存區寫入磁碟。
  在出現檢查點時,LGWR指定一修改緩衝區表必須寫入到磁碟。DBWR將指定的緩衝區寫入磁碟。
  在有些平臺上,一個例項可有多個DBWR。在這樣的例項中,一些塊可寫入一磁碟,另一些塊可寫入其它磁碟。引數DB-WRITERS控制DBWR程式個數。
  LGWR程式:該程式將日誌緩衝區寫入磁碟上的一個日誌檔案,它是負責管理日誌緩衝區的一個ORACLE後臺程式。LGWR程式將自上次寫入磁碟以來的全部日誌項輸出,LGWR輸出:
  l 當使用者程式提交一事務時寫入一個提交記錄。
  l 每三秒將日誌緩衝區輸出。
  l 當日志緩衝區的1/3已滿時將日誌緩衝區輸出。
  l 當DBWR將修改緩衝區寫入磁碟時則將日誌緩衝區輸出。
  LGWR程式同步地寫入到活動的鏡象線上日誌檔案組。如果組中一個檔案被刪除或不可用,LGWR 可繼續地寫入該組的其它檔案。
  日誌緩衝區是一個迴圈緩衝區。當LGWR將日誌緩衝區的日誌項寫入日誌檔案後,伺服器程式可將新的日誌項寫入到該日誌緩衝區。LGWR 通常寫得很快,可確保日誌緩衝區總有空間可寫入新的日誌項。
  注意:有時候當需要更多的日誌緩衝區時,LWGR在一個事務提交前就將日誌項寫出,而這些日誌項僅當在以後事務提交後才永久化。
  ORACLE使用快速提交機制,當使用者發出COMMIT語句時,一個COMMIT記錄立即放入日誌緩衝區,但相應的資料緩衝區改變是被延遲,直到在更有效時才將它們寫入資料檔案。當一事務提交時,被賦給一個系統修改號(SCN),它同事務日誌項一起記錄在日誌中。由於SCN記錄在日誌中,以致在並行伺服器選項配置情況下,恢復操作可以同步。

CKPT程式:該程式在檢查點出現時,對全部資料檔案的標題進行修改,指示該檢查點。在通常的情況下,該任務由LGWR執行。然而,如果檢查點明顯地降低系統效能時,可使CKPT程式執行,將原來由LGWR程式執行的檢查點的工作分離出來,由CKPT程式實現。對於許多應用情況,CKPT程式是不必要的。只有當資料庫有許多資料檔案,LGWR在檢查點時明顯地降低效能才使CKPT執行。CKPT程式不將塊寫入磁碟,該工作是由DBWR完成的。

初始化引數CHECKPOINT-PROCESS控制CKPT程式的使能或使不能。預設時為FALSE,即為使不能。

SMON程式:該程式例項啟動時執行例項恢復,還負責清理不再使用的臨時段。在具有並行伺服器選項的環境下,SMON對有故障CPU或例項進行例項恢復。SMON程式有規律地被呼醒,檢查是否需要,或者其它程式發現需要時可以被呼叫。

PMON程式:該程式在使用者程式出現故障時執行程式恢復,負責清理記憶體儲區和釋放該程式所使用的資源。例:它要重置活動事務表的狀態,釋放封鎖,將該故障的程式的ID從活動程式表中移去。PMON還週期地檢查排程程式(DISPATCHER)和伺服器程式的狀態,如果已死,則重新啟動(不包括有意刪除的程式)。

PMON有規律地被呼醒,檢查是否需要,或者其它程式發現需要時可以被呼叫。

RECO程式:該程式是在具有分散式選項時所使用的一個程式,自動地解決在分散式事務中的故障。一個結點RECO後臺程式自動地連線到包含有懸而未決的分散式事務的其它資料庫中,RECO自動地解決所有的懸而不決的事務。任何相應於已處理的懸而不決的事務的行將從每一個資料庫的懸掛事務表中刪去。

當一資料庫伺服器的RECO後臺程式試圖建立同一遠端伺服器的通訊,如果遠端伺服器是不可用或者網路連線不能建立時,RECO自動地在一個時間間隔之後再次連線。

RECO後臺程式僅當在允許分散式事務的系統中出現,而且DISTRIBUTED – TRANSACTIONS引數是大於0。

ARCH程式:該程式將已填滿的線上日誌檔案複製到指定的儲存裝置。當日志是為ARCHIVELOG使用方式、並可自動地歸檔時ARCH程式才存在。

LCKn程式:是在具有並行伺服器選件環境下使用,可多至10個程式(LCK0,LCK1……,LCK9),用於例項間的封鎖。

Dnnn程式(排程程式):該程式允許使用者程式共享有限的伺服器程式(SERVER PROCESS)。沒有排程程式時,每個使用者程式需要一個專用服務程式(DEDICATEDSERVER PROCESS)。對於多線索伺服器(MULTI-THREADED SERVER)可支援多個使用者程式。如果在系統中具有大量使用者,多線索伺服器可支援大量使用者,尤其在客戶_伺服器環境中。

在一個資料庫例項中可建立多個排程程式。對每種網路協議至少建立一個排程程式。資料庫管理員根據作業系統中每個程式可連線數目的限制決定啟動的排程程式的最優數,在例項執行時可增加或刪除排程程式。多線索伺服器需要SQL*NET版本2或更後的版本。在多線索伺服器的配置下,一個網路接收器程式等待客戶應用連線請求,並將每一個傳送到一個排程程式。如果不能將客戶應用連線到一排程程式時,網路接收器程式將啟動一個專用伺服器程式。該網路接收器程式不是ORACLE例項的組成部分,它是處理與ORACLE有關的網路程式的組成部分。在例項啟動時,該網路接收器被開啟,為使用者連線到ORACLE建立一通訊路徑,然後每一個排程程式把連線請求的排程程式的地址給予於它的接收器。當一個使用者程式作連線請求時,網路接收器程式分析請求並決定該使用者是否可使用一排程程式。如果是,該網路接收器程式返回該排程程式的地址,之後使用者程式直接連線到該排程程式。有些使用者程式不能排程程式通訊(如果使用SQL*NET以前的版本的使用者),網路接收器程式不能將如此使用者連線到一排程程式。在這種情況下,網路接收器建立一個專用伺服器程式,建立一種合適的連線。

2)、ORACLE記憶體結構

ORACLE在記憶體儲存下列資訊:

執行的程式程式碼。

連線的會話資訊

程式執行期間所需資料和共享的資訊

儲存在外儲存上的緩衝資訊。

ORACLE具有下列基本的記憶體結構:

軟體程式碼區

系統全域性區,包括資料庫緩衝儲存區、日誌緩衝區和共享池.

程式全域性區,包括棧區和資料區.

排序區

軟體程式碼區

用於儲存正在執行的或可以執行的程式程式碼。

軟體區是隻讀,可安裝成共享或非共享。ORACLE系統程式是可共享的,以致多個ORACLE使用者可存取它,而不需要在記憶體有多個副本。使用者程式可以共享也可以不共享。

系統全域性區

為一組由ORACLE分配的共享的記憶體結構,可包含一個資料庫例項的資料或控制資訊。如果多個使用者同時連線到同一例項時,在例項的SGA中資料可為多個使用者所共享,所以又稱為共享全域性區。當例項起動時,SGA的儲存自動地被分配;當例項關閉時,該儲存被回收。所有連線到多程式資料庫例項的全部使用者可自動地被分配;當例項關閉時,該儲存被回收。所有連線到多程式資料庫例項的全部使用者可使用其SGA中的資訊,但僅僅有幾個程式可寫入資訊。在SGA中儲存資訊將記憶體劃分成幾個區:資料庫緩衝儲存區、日誌緩衝區、共享池、請求和響應佇列、資料字典儲存區和其它各種資訊。

程式全域性區

PGA是一個記憶體區,包含單個程式的資料和控制資訊,所以又稱為程式全域性區(PROCESS GLOBAL AREA)。

排序區

排序需要記憶體空間,ORACLE利用該記憶體排序資料,這部分空間稱為排序區。排序區存在於請求排序的使用者程式的記憶體中,該空間的大小為適就排序資料量的大小,可增長,但受初始化引數SORT-AREA-SIZER所限制。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1016777/,如需轉載,請註明出處,否則將追究法律責任。

相關文章