1. 程式人生 > >Oracle的體系結構

Oracle的體系結構

[toc] 一、概述 ======== Oracle的體系結構是資料庫的組成、工作過程,以及資料庫中資料的組織和管理機制,包含一系列元件(軟體)、使用者程序(User process)、服務程序(Server process、PGA)、SGA(共享池、資料快取、日誌緩衝區)、後臺程序(SMON、DBWn、PMON、CKPT、LGWR、其它程序)、引數檔案(Parameter file)、密碼檔案(Password)、資料檔案(Data files)、控制檔案(Control files)、線上重做日誌檔案(Redo log files)、歸檔日誌檔案(Archived log files)。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200313101507515.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ1MTMzODk0,size_16,color_FFFFFF,t_70) 二、使用者程序和服務程序 ====================== 1、使用者程序 ----------- 使用者程序(User process),是指使用者通過客戶端,比如SQL Plus、PL/SQL Developer、SQL Load、應用程式等工具連線上Oracle資料庫而產生的程序。使用者程序處理使用者輸入並與伺服器程序通訊。使用者程序還負責表現使用者請求的資訊,必要時可以將資訊處置成更可用的形式。 2、服務程序 ----------- 服務程序(Server Process),當客戶端發起連線時,Oracle建立一個使用者程序來處理這個連線。 使用者程序啟動後,Oracle還會建立一個服務程序來處理連線到例項的使用者程序提交的請求。使用者程序連線到資料庫並建立一個會話時,Oracle伺服器程序會分配專門用於當前使用者會話的記憶體區,即PGA區,該區域是私有的,當程序建立時分配,程序結束後被釋放,只能被一個服務程序使用。 以客戶端執行一條SQL為例: 1)服務程序接收SQL語句; 2)服務程序去共享池找SQL和執行計劃,如果沒找到,則解析SQL; 3)服務程序根據執行計劃去資料快取中找相關的資料,如沒有才到資料檔案中取出資料放到資料快取中,再返給客戶端; 4)若需要修改資料,服務程序把資料讀取到資料快取後再修改資料,修改後返給客戶端。 使用者程序與伺服器程序可以是一對一的關係(配置為專用伺服器模式時)。一個伺服器也可連線多個使用者程序(配置為多執行緒伺服器時),但這樣做會減少對系統資源的佔用。 三、系統全域性區SGA ================= 系統全域性區SGA(System Global Area),是Oracle例項的重要組成部分,在例項啟動時分配,是一組包含Oracle資料和控制資訊的共享記憶體。一個SGA只屬於一個例項,也就是說,當一個伺服器上有多個例項執行時,每個例項都有一個自己的SGA,例項之間不能相互訪問。SGA包括共享池(Share pool)、資料快取(Data buffer cache)和重做日誌緩衝區(Redo log buffer),其中共享池又包括Library cache(庫快取)和Data dict cache(資料字典快取)。 四、後臺程序 ============ Oracle後臺程序是一組運行於Oracle伺服器端的後臺程式,也是Oracle例項的重要組成部分。這些後臺程序分別完成不同的功能。其中SMON、PMON、DBWR、LGWR和CKPT這5個後臺程序必須正常啟動,否則資料庫例項無法工作。此外,還有很多輔助程序,用於實現輔助的功能,如果這些輔助程序發生問題,只會使某些功能受到影響,資料庫例項仍是可用的。 1)資料寫入程序(DBWR) 資料寫入程序的主要任務是負責將記憶體中的“髒”資料塊回寫到資料檔案中。“髒”資料塊是指高速資料緩衝區中的被修改過的資料塊,這些資料塊的內容與資料檔案的資料塊內容不一致。但DBWR並不是隨時將所有的“髒”資料塊都寫入資料檔案,只有滿足一定的條件時,DBWR程序才開始成批量的將“髒”資料塊寫入資料檔案Oracle這樣做的目的是為了儘量減少I/O操作,提高Oracle伺服器效能。 2)檢查點程序(CKPT) 檢查點程序可以看作一個事件,當檢查點事件發生時,CKPT會要求DBWR將某些“髒”資料塊回寫到資料檔案。當用戶程序發出資料請求時,Oracle系統從資料檔案中讀取需要的資料並存放到高速資料緩衝區中,使用者對資料的操作時在緩衝區中進行的。當用戶操作資料時,就會產生大量的日誌資訊並存儲在重做日誌緩衝區,當Oracle系統滿足一定條件時,日誌寫入程序(LGWR)會將日誌資訊寫入到重做日誌檔案組中,當發生日誌切換時(寫入操作正要從一個日誌檔案組切換到另一組時),就會啟動檢查點程序。 另外,DBA還可以通過修改初始化引數檔案SPFILE中的CHECKPOINT_PROCESS引數為TRUE來啟動檢查點程序。 3)日誌寫入程序(LGWR) 日誌寫入程序用於將重做日誌緩衝區中的資料寫入重做日誌檔案。Oracle系統將使用者所做的修改日誌資訊寫入日誌檔案,然後將修改結果寫入資料檔案。 Oracle例項在執行中會產生大量日誌資訊,這些日誌資訊首先被記錄在SGA的重做日誌緩衝區中,當發生提交命令、或者重做日誌緩衝區的資訊滿1/3、或者日誌資訊存放超過3秒鐘時,LGWR程序就將日誌資訊從重做日誌緩衝區中讀出並寫入日誌檔案組中序號較小的檔案中,一個日誌組寫滿後接著寫另外一組。當LGWR程序將所有䣌日誌檔案都寫過一遍後,它將再次轉向第一個日誌檔案組重新覆蓋。 4)歸檔程序(ARCH) 歸檔程序是一個可選擇的程序,只有當Oracle資料庫處於歸檔模式時,該程序才可能起到作用。若Oracle資料庫處於歸檔模式,當各個日誌檔案組都被寫滿即將被覆蓋之前,先由歸檔程序(ARCH)把即將覆蓋的日誌檔案中的日誌資訊讀出,然後再把這些“讀出的日誌資訊”寫入到歸檔日誌檔案中。 當系統比較繁忙而導致LGWR程序處於等待ARCH程序時,可通過修改LOG_ARCHIVE_MAX_PROCESSES引數啟動多個歸檔程序,從而提高歸檔寫磁碟的速度。 5)系統監控程序(SMON) 系統監控程序是在資料庫啟動時執行恢復工作的強制性程序。比如,在並行伺服器模式下,SMON可以恢復另一個處於失敗的資料庫,使系統切換到另外一臺正常的伺服器上。 6)程序監控程序(PMON) 程序監控程序用於監控其他程序的狀態,當有程序啟動失敗時,PMON會清除失敗的使用者程序,用於資料不一致時進行恢復工作。 7)鎖定程序(LCKN) 這是一個可選程序,並行伺服器模式下可以出現多個鎖定程序以利於資料庫通訊。 8)恢復程序(RECO) 這是在分散式資料庫模式下使用的一個可選程序,用於資料不一致時進行恢復工作。 9)排程程序(DNNN) 這是一個可選程序,在共享伺服器模式下使用,可以啟動多個排程程序。 10)快照程序(SNPN): 快照程序用於處理資料庫快照的自動重新整理,並通過DBMS_JOB包執行預定的資料庫儲存過程。 五、儲存結構 ============ Oracle分為邏輯儲存結構和物理儲存結構,邏輯儲存結構用來描述Oracle內部組織和管理資料的方式,是一種層次結構,是面向使用者的;物理儲存結構是實際的資料儲存單元,就是資料庫存放在作業系統上的檔案。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200313101809756.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ1MTMzODk0,size_16,color_FFFFFF,t_70) 1、邏輯儲存結構 ------------ Oracle資料庫中的資料檔案被分組到一個或多個表空間中。在每個表空間中,邏輯資料庫結構(如表和索引)都是片段,被進一步細分為“盤區”(extent)和“塊”(block)。這種儲存的邏輯細分c讓Oracle更有效的控制磁碟。 1)表空間 表空間是Oracle資料庫的最大邏輯劃分區域,常用來存放資料表,索引等資料物件,任何實體物件在建立時必須指定表空間。 表空間與資料檔案相對應,一個表空間由一個或多個數據檔案組成,一個數據檔案只屬於一個表空間。 Oracle資料的儲存空間在邏輯上變現為表空間而在物理上表現為資料檔案,表空間相當於資料夾,資料檔案相當於資料夾中的檔案。 2)段 資料庫中的下一個邏輯分組級別是段。段是一組盤區,這組盤區組成了被Oracle視為一個單位的資料庫物件,如表或索引。因此,段一般是資料庫終端使用者要處理的最小儲存單位。Oracle資料庫中可看到4種類型的段:資料段(非分割槽表和分割槽表的每個分割槽)、索引段、臨時段和回滾段。 3)盤區 它由一個或多個數據庫塊組成。當擴大資料庫物件時,為該物件新增的空間將分配為一個盤區。 4)塊 資料庫塊是Oracle資料庫最小的儲存單位。塊的大小是資料庫內給定表空間中特定數量的儲存位元組。預設塊大小是8KB。 2、物理儲存結構 --------------- 1)資料檔案 資料檔案用於儲存資料庫中的所有資料,包含系統資料、資料字典資料、臨時資料、索引資料、應用資料等。 安裝Oracle資料庫時系統會自動為資料庫建立幾個資料檔案,使用者對資料庫的操作本質是對資料檔案的操作。一個表空間可以對應多個數據檔案,一個數據檔案只能從屬於一個表空間。在邏輯上,資料物件都存放在表空間中,實質上是存放在空間對應的資料檔案中。 2)控制檔案 每個Oracle資料庫有一組控制檔案(control file),用於記錄和描述資料庫的物理儲存結構資訊,包含資料庫名、資料庫資料檔案和日誌檔案的名字和位置和資料庫的時間戳。 3)引數檔案 引數檔案用於設定資料庫啟動時的引數初始值。 4)密碼檔案: 用於儲存具有SYSDBA、SYSOPER許可權的使用者名稱和SYS使用者密碼。 5)日誌檔案 Oracle以SQL指令碼的形式實時記錄了資料變化的詳細日誌,這些日誌儲存在重做日誌檔案中。根據重做日誌檔案,可以對資料庫進行備份和恢復。 日誌檔案有兩種:線上日誌和歸檔日誌。 建立Oracle資料庫例項的時候,預設建立三組線上日誌,每組一個日誌檔案。三組日誌中只有一組處於活動狀態,這組活動的日誌也稱為當前日誌,資料庫不斷的往當前日誌裡寫入SQL指令碼,當前日誌寫滿後,Oracle會切換到下一組日誌,繼續寫入,就這樣迴圈切換。 日誌組在切換時,如果資料庫是歸檔模式,則將當前日誌檔案的內容轉存為作業系統檔案,成為歸檔日誌;若當前資料庫是非歸檔模式,則不進行歸檔操作,當前日誌檔案中的內容會被下一次覆蓋。 如果資料庫執行在歸檔模式下,當資料庫出現介質失敗時,使用備份檔案、歸檔日誌和線上日誌可以完全恢復資料庫。 6)跟蹤檔案 使用者記錄使用者程序、資料庫後臺程序的執行情況。 六、版權宣告 ============ C語言技術網原創文章,轉載請說明文章的來源、作者和原文的連結。 來源:C語言技術網(www.freecplus.net) 作者:碼農有道 如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝