1. 程式人生 > >Oracle--資料庫體系結構(物理結構、邏輯結構、記憶體結構及後臺程序)

Oracle--資料庫體系結構(物理結構、邏輯結構、記憶體結構及後臺程序)

Oracle資料庫的體系結構包括四個方面:資料庫的物理結構、邏輯結構、記憶體結構及程序。  

1. 物理結構  

   物理資料庫結構是由構成資料庫的作業系統檔案所決定,Oracle資料庫檔案包括:  
1.1.資料檔案(Data File) 
   資料檔案用來儲存資料庫中的全部資料,例如資料庫表中的資料和索引資料.通常以為*.dbf格式,例如:userCIMS.dbf 。
1.2.日誌檔案(Redo Log File) 
   日誌檔案用於記錄資料庫所做的全部變更(如增加、刪除、修改)、以便在系統發生故障時,用它對資料庫進行恢復。名字通常為Log*.dbf格式,如:Log1CIMS.dbf,Log2CIMS.dbf 。  
1.3.控制檔案(Control File) 

    每個Oracle資料庫都有相應的控制檔案,它們是較小的二進位制檔案,用於記錄資料庫的物理結構,如:資料庫名、資料庫的資料檔案和日誌檔案的名字和位置等資訊。用於開啟、存取資料庫。名字通常為Ctrl*ctl 格式,如Ctrl1CIMS.ctl。  
1.4.配置檔案 
   配置檔案記錄Oracle資料庫執行時的一些重要引數,如:資料塊的大小,記憶體結構的配置等。名字通常為init*.ora 格式,如:initCIMS.ora 。  

2 邏輯結構  

  Oracle資料庫的邏輯結構描述了資料庫從邏輯上如何來儲存資料庫中的資料。邏輯結構包括表空間、段、區、資料塊和模式物件。資料庫的邏輯結構將支配一個數據庫如何使用系統的物理空間.模式物件及其之間的聯絡則描述了關係資料庫之間的設計.  
  一個數據庫從邏輯上說是由一個或多個表空間所組成,表空間是資料庫中物理編組的資料倉庫,每一個表空間是由段(segment)組成,一個段是由一組區(extent)所組成,一個區是由一組連續的資料庫塊(database block)組成,而一個數據庫塊對應硬碟上的一個或多個物理塊。一個表空間存放一個或多個數據庫的物理檔案(即資料檔案).一個數據庫中的資料被邏輯地儲存在表空間上。  
2.1表空間(tablespace) 

  Oracle資料庫被劃分為一個或多個稱為表空間的邏輯結構,它包括兩類表空間,System表空間和非System表空間,其中,System表空間是安裝資料庫時自動建立的,它包含資料庫的全部資料字典,儲存過程、包、函式和觸發器的定義以及系統回滾段。除此之外,還能包含使用者資料。。
  一個表空間包含許多段,每個段有一些可以不連續的區組成,每個區由一組連續的資料塊組成,資料塊是資料庫進行操作的最小單位。  
  每個表空間對應一個或多個數據檔案,每個資料檔案只能屬於一個表空間。  
2.2.資料庫塊(database block) 
  資料庫塊也稱邏輯塊或ORACLE塊,它對應磁碟上一個或多個物理塊,它的大小由初始化引數db-block-size(在檔案init.ora中)決定,典型的大小是2k。Pckfree 和pctused 兩個引數用來優化資料塊空間的使用。  
2.3.區(extent) 

  區是由一組連續的資料塊所組成的資料庫儲存空間分配的邏輯單位。  
2.4.段(segment) 
  段是一個或多個不連續的區的集合,它包括一個表空間內特定邏輯結構的所有資料,段不能跨表空間存放。Oracle資料庫包括資料段、索引段、臨時段、回滾段等。  
2.5.模式物件(schema object) 
  Oracle資料庫的模式物件包括表、檢視、序列、同意詞、索引、觸發器、儲存.過程等,關於它們將重點在後面章節介紹。  

3.Oracle Server系統程序與記憶體結構  

  當在計算機伺服器上啟動Oracle資料庫後,稱伺服器上啟動了一個Oracle例項(Instance)。ORACLE 例項(Instance)是存取和控制資料庫的軟體機制,它包含系統全域性區(SGA)和ORACLE程序兩部分。SGA是系統為例項分配的一組共享記憶體緩衝區,用於存放資料庫例項和控制資訊,以實現對資料庫中資料的治理和操作。  
  程序是作業系統中一個極為重要的概念。一個程序執行一組操作,完成一個特定的任務.對ORACLE資料庫治理系統來說,程序由使用者程序、伺服器程序和後臺程序所組成。  
  當用戶執行一個應用程式時,系統就為它建立一個使用者程序。伺服器程序處理與之相連的使用者程序的請求,它與使用者程序相通訊,為相連的使用者程序的ORACLE請求服務。  
  為了提高系統性能,更好地實現多使用者功能,ORACLE還在系統後臺啟動一些後臺程序,用於資料庫資料操作。  

4.系統程序的後臺程序主要包括:

  SMON 系統監控程序:(system monitor)負責完成自動例項恢復和回收分類(sort)表空間。 
  PMON 程序監控程序:(PRocess monitor)實現使用者程序故障恢復、清理記憶體區和釋放該程序所需資源等。 
  DBWR 資料庫寫程序:資料庫緩衝區的治理程序。
在它的治理下,資料庫緩衝區中總保持有一定數量的自由緩衝塊,以確保使用者程序總能找到供其使用的自由緩衝塊。 
  LGWR 日誌檔案寫程序:是日誌緩衝區的治理程序,負責把日誌緩衝區中的日誌項寫入磁碟中的日誌檔案上。每個例項只有一個LGWR程序。
  ARCH 歸檔程序:(archiver process)把已經填滿的線上日誌檔案拷貝到一個指定的儲存裝置上。僅當日志文件組開關(switch)出現時,才進行ARCH操作。ARCH不是必須的,而只有當自動歸檔可使用或者當手工歸檔請求時才發出。
  RECO 恢復程序:是在具有分散式選項時使用的一個程序,主要用於解決引用分散式事務時所出現的故障。它只能在答應分散式事務的系統中出現。
  LCKn 封鎖程序:用於並行伺服器系統,主要完成例項之間的封鎖。 

5.記憶體結構(SGA)

  SGA是Oracle為一個例項分配的一組共享記憶體緩衝區,它包含該例項的資料和控制資訊。SGA在例項啟動時被自動分配,當例項關閉時被收回。資料庫的所有資料操作都要通過SGA來進行。  
  SGA中記憶體根據存放資訊的不同,可以分為如下幾個區域:
5.1.Buffer Cache:存放資料庫中資料庫塊的拷貝。
    它是由一組緩衝塊所組成,這些緩衝塊為所有與該例項相連結的使用者程序所共享。緩衝塊的數目由初始化引數DB_BLOCK_BUFFERS確定,緩衝塊的大小由初始化引數DB_BLOCK_SIZE確定。大的資料塊可提高查詢速度。它由DBWR操作。

5.2.日誌緩衝區Redo Log Buffer:存放資料操作的更改資訊。
    它們以日誌項(redo entry)的形式存放在日誌緩衝區中。當需要進行資料庫恢復時,日誌項用於重構或回滾對資料庫所做的變更。日誌緩衝區的大小由初始化引數LOG_BUFFER確定。大的日誌緩衝區可減少日誌檔案I/O的次數。後臺程序LGWR將日誌緩衝區中的資訊寫入磁碟的日誌檔案中,可啟動ARCH後臺程序進行日誌資訊歸檔。
  
5.3.共享池Shared Pool:包含用來處理的SQL語句資訊。
    它包含共享SQL區和資料字典儲存區。共享SQL區包含執行特定的SQL語句所用的資訊。資料字典區用於存放資料字典,它為所有使用者程序所共享。
  
5.4.Cursors
:一些記憶體指標,執行待處理的SQL語句 
5.5.其他資訊區:除了上述幾個資訊區外,還包括一些程序之間的通訊資訊(如封鎖資訊);在多線索伺服器配置下,還有一些程式全域性區的資訊,請求佇列和響應佇列等。

--------------------------------------------------------------------------

後臺程序詳解

oracle中的程序共分為三類:使用者程序、服務程序、後臺程序。其中後臺程序伴隨例項的啟動而啟動,他們主要是維護資料庫的穩定,相當於一個企業中的管理者及內部服務人員。他們並不會直接給使用者提供服務。
一:database write(DBWn(n代表數字1..n,表示可能有幾個DBW在執行) )--資料寫入
   作用:把SGA中被修改的資料同步到磁碟檔案中。保證Buffer Cache中有足夠的空閒資料塊數量。
   觸發條件: 1、檢查點
             2、一個服務程序在設定的時間內沒有找到空閒塊
             3、每三秒自動喚醒一次。
   設定:DB_WRITER_PROCESS用來定義DBWn程序數量。(commit命令只是把記錄修改寫入日誌檔案,不是把修改後的資料寫入資料檔案)

二:log write(LGWR)--日誌檔案寫入
   作用:把log buffer中的日誌內容寫入聯機的日誌檔案中,釋放log使用者buffer空間。
   觸發條件:1、使用者發出commit命令。(在oracle中稱為快速提交機制(fast commit)):把redo log buffer中的記錄寫入日誌檔案,寫入一條提交的記錄
            2、三秒定時喚醒。
            3、log buffer超過1/3,或日誌數量超過1M。
            4、DBWR程序觸發:DBWn檢視將髒資料塊寫入磁碟先檢測他的相關redo記錄是否寫入聯機日誌檔案,如果沒有就通知LGWR程序。在oracle中成為提前寫機制(write ahead):redo記錄先於資料記錄被寫入磁碟

三:checkpoint(CKPT)-檢查點事件
   作用:維護資料庫一致性狀態。檢測點時刻資料檔案與SGA中的內容一致,這不是一個單獨的程序,要和前兩個程序一起工作呦。DBWR寫入髒資料,同時觸發LGWR程序。
      CKPT更新控制檔案中的檢查點記錄。
   觸發條件:日誌切換(log switch)會觸發檢查點。

四:process monitor(PMON)--程序監控
   作用:1、發現使用者程序異常終止,並進行清理。釋放佔用資源。(清理異常終止使用者使用的鎖)
        2、向監聽程式動態的註冊例項。
   觸發條件:定時被喚醒,其他程序也會主動喚醒它。

五:system monitor:(SMON)--系統監控
   作用:1、負責例項恢復,前滾(Roll Forward)恢復到例項關閉的狀態,使用最後一次檢查點後的日誌程序重做。這時包括提交和未提交的事務。開啟資料庫,進行回滾(Roll Back):回滾未提交的事務。(oracle承諾commit之後資料不會丟失,現在我們可以大致的瞭解是如何實現這個承諾,以及在資料的安全性和資料庫效能之間的平衡選擇。)
        2、負責清理臨時段,以釋放空間
   觸發條件:定期被喚醒或者被其他事務主動喚醒。

六:archive:(ARCn)--歸檔操作
   作用:發生日誌切換時把寫滿的聯機日誌檔案拷貝到歸檔目錄中。
   觸發條件:日誌切換時被LGWR喚醒。
   設定:LOG_ARCHIVE_MAX_PROCESSES可以設定oracle啟動的時候ARCn的個數。

七:manageability monitor:MMON--AWR主要的程序
   作用:1、收集AWR必須的統計資料,把統計資料寫入磁碟。10g中儲存在SYSAUX表空間中。
        2、生成server--generated報警
   每小時把shared pool中的統計資訊寫入磁碟,或者shared pool佔用超過15%。

八:manageability monitor light:MMNL:輕量級的MMON

九:memory manager:MMAN:自動內容管理
   作用:每分鐘都檢查AWR效能資訊,並根據這些資訊來決定SGA元件最佳分佈。
   設定:STATISTICS_LEVEL:統計級別
        SGA_TARGET:SGA總大小

十:job queue coordinator:CJQ0--資料庫定時任務

十一:recover writer:RVWR
   作用:為flashback database提供日誌記錄。把資料塊的前映象寫入日誌。

十二:change tarcking writer:CTWR
   作用:跟蹤資料塊的變化,把資料塊地址記錄到 change_tracking file檔案中。RMAN的增量備份將使用這個檔案來確定那些資料塊發生了變化,並進行備份。

以上是oracle中比較常見的後臺程序,不是所有的程序。其中DBWn,ARCn可以設定資料庫啟動時的數量。這些程序在系統中可以不止一個。