本篇文章給大家帶來了關于oracle的相關知識,其中主要介紹了數據庫體系結構的相關問題,oracle db 服務器由一個oracle db以及一個或多個數據庫實例組成,實例由內存結構和后臺進程構成,希望對大家有幫助。
推薦教程:《oracle》
概述
Oracle DB 服務器由一個 Oracle DB 以及一個或多個數據庫實例組成。實例由內存結構和后臺進程構成。每當啟動一個實例時,都會分配一個稱為系統全局區 (SGA) 的共享內存區,并啟動后臺進程。
數據庫包括物理結構和邏輯結構。由于物理結構和邏輯結構是分開的,因此管理數據的物理存儲時不會影響對邏輯存儲結構的訪問。
Oracle 實例使用內存結構和進程來管理和訪問數據庫。所有內存結構都存在于構成數據庫服務器的那些計算機的主內存中。進程是在這些計算機的內存中運行的作業。進程被定義為操作系統中可運行一系列步驟的“控制線程”或機制。
內存結構
Oracle實例有兩個關聯的基本內存結構:
1、系統全局區 (SGA)
稱為 SGA 組件的共享內存結構組,這些組件包含一個 Oracle DB實例的數據和控制信息。 SGA 由所有服務器和后臺進程共享。 SGA 中存儲的數據示例包括高速緩存的數據塊和共享 sql 區域。
SGA 是包含實例的數據和控制信息的內存區。 SGA 包含以下數據結構:
? 數據庫緩沖區高速緩存: 用于緩存從數據庫中檢索到的數據塊
? 重做日志緩沖區: 用來緩存用于實例恢復的重做信息,直到可以將其寫入磁盤中存儲的物理重做日志文件
? 共享池: 用于緩存可在用戶間共享的各種結構
? 大型池: 為某些大型進程(例如 Oracle 備份和恢復操作)和 I/O 服務器進程提供大型內存分配的可選區域。
? Java 池: 用于 Java 虛擬機 (jvm) 中特定于會話的所有 Java 代碼和數據
? 流池: Oracle Streams 使用它來存儲捕獲和應用操作所需的信息
2、程序全局區 (PGA)
包含某個服務器進程或后臺進程的數據及控制信息的內存區域。
PGA 是 Oracle DB 在服務器進程或后臺進程啟動時創建的非共享內存。服務器進程對PGA 的訪問是互斥的。每個服務器進程和后臺進程都具有自己的 PGA。
程序全局區 (PGA) 是一個內存區,其中包含每個服務器進程的數據及控制信息。 Oracle 服務器進程為客戶機請求提供服務。每個服務器進程都有自己專用的 PGA,其 PGA 在服務器進程啟動時創建,對 PGA 的訪問權限僅限于該服務器進程,并且只能由代表該服務器進程的 Oracle 代碼對 PGA 進行讀寫。
Oracle DB 使用初始化參數來創建和管理內存結構。管理內存的最簡單的方法是允許數據庫自動管理和優化內存。要做到這一點(以下操作適用于大多數平臺),只需設置目標內存大小初始化參數 (MEMORY_TARGET) 和最大內存大小初始化參數(MEMORY_MAX_TARGET)。
數據庫緩沖區高速緩存
數據庫緩沖區高速緩存是 SGA 的一部分,用于存放從數據文件讀取的數據塊的副本。并行連接到實例的所有用戶共享對數據庫緩沖區高速緩存的訪問。
Oracle DB 用戶進程第一次需要特定數據片段時,將在數據庫緩沖區高速緩存中搜索數據。
如果該進程在高速緩存中找到數據(稱為高速緩存命中),則直接從內存中讀取數據。如果進程在高速緩存中找不到數據(稱為高速緩存未命中),則在訪問數據之前,必須將磁盤上的數據文件中的數據塊復制到高速緩存中的緩沖區中。高速緩存命中時訪問數據要比高速緩存未命中時訪問數據快。
高速緩存中的緩沖區由一個復雜算法管理,該算法組合使用最近最少使用 (LRU) 列表和停靠計數機制。
重做日志緩沖區
重做日志緩沖區是 SGA 中的循環緩沖區,用于存放有關對數據庫所做更改的信息。此信息存儲在重做條目中。重做條目包含重建(或重做)由 DML、 DDL 或內部操作對數據庫進行的更改所需的信息。如果需要,將使用重做條目進行數據庫恢復。
服務器進程更改緩沖區高速緩存時,系統會生成重做條目,并將生成的重做條目寫入SGA 中的重做日志緩沖區。重做條目占用緩沖區中連續的順序空間。 LGWR 后臺進程將重做日志緩沖區寫入磁盤上的活動重做日志文件(或文件組)中。
共享池
SGA 的共享池部分包含庫高速緩存、數據字典高速緩存、 SQL 查詢結果高速緩存、PL/SQL 函數結果高速緩存、并行執行消息的緩沖區以及控制結構。
“數據字典”是數據庫表和視圖(它們包含有關數據庫、數據庫結構及其用戶的參考信息)的集合。在 SQL 語句語法分析期間, Oracle DB 會頻繁訪問數據字典。該訪問操作對于Oracle DB 的持續操作來說至關重要。
Oracle DB 對數據字典的訪問十分頻繁,因此在內存中指定了兩個特殊的位置來存放字典數據。
一個區域稱為“數據字典高速緩存”,也稱為“行高速緩存”,因為它以行的形式存放數據,而不是以緩沖區的形式存放數據(緩沖區用于存放完整的數據塊)。內存中的另一個用于存放字典數據的區域稱為“庫高速緩存”。所有 Oracle DB 用戶進程都共享這兩個高速緩存以便訪問數據字典信息。
Oracle DB 使用共享 SQL 區域(以及 PGA 中保留的專用 SQL 區域)來表示它所運行的每個 SQL 語句。 Oracle DB 可識別兩個用戶執行相同 SQL 語句的情況,從而為這些用戶重用共享 SQL 區域。
“共享 SQL 區域”包含給定 SQL 語句的語法分析樹和執行計劃。 Oracle DB 通過為多次運行的 SQL 語句使用一個共享 SQL 區域來節省內存。當許多用戶運行同一個應用程序時,同一 SQL 語句通常會多次運行。
對新的 SQL 語句進行語法分析時, Oracle DB 會從共享池中分配內存,以便在共享 SQL區域中存儲該語句。該內存的大小取決于語句的復雜性。
Oracle DB 處理 PL/SQL 程序單元(過程、函數、程序包、匿名塊和數據觸發器)的方式與它處理單個 SQL 語句的方式十分相似。 Oracle DB 分配一個共享區域以存放程序單元在經過語法分析和編譯之后的形式。 Oracle DB 分配一個專用區域,以便存放特定于運行程序單元的會話的值,包括局部變量、全局變量和程序包變量(也稱為“程序包實例化”),并且存放用于執行 SQL 的緩沖區。如果多個用戶運行同一個程序單元,則所有用戶都使用同一個共享區域,但維護其各自專用 SQL 區域的單獨副本,以便存放特定于其自身會話的值。
PL/SQL 程序單元中包含的單個 SQL 語句的處理方式與其它 SQL 語句的處理方式類似。
無論這些 SQL 語句在 PL/SQL 程序單元中的來源如何,它們都使用共享區域來存放其語法分析表示,并且為運行語句的每個會話使用一個專用區域。
SQL 查詢結果高速緩存和 PL/SQL 函數結果高速緩存是 Oracle database 11g 中新增的功能。
它們共享相同的基礎結構,出現在相同的動態性能 (V$) 視圖中,并且使用所提供的同一程序包進行管理。
查詢的結果和查詢片段的結果可以高速緩存在“ SQL 查詢結果高速緩存”的內存中。這樣,數據庫可以在以后執行這些查詢和查詢片段時使用高速緩存結果進行回答。由于從SQL 查詢結果高速緩存中檢索結果要比重新運行查詢快得多,因此將頻繁運行的查詢的
結果緩存起來可以大大提高這些查詢的性能。
如果計算的輸入是 PL/SQL 函數發出的一個或若干個參數化查詢,則有時會使用該函數來返回計算結果。在某些情況下,這些查詢訪問很少更改的數據(與調用函數的頻率相比)。
可以在 PL/SQL 函數的源文本中包括語法,以請求將函數結果緩存在“ PL/SQL 函數結果高速緩存”中,并且在表列表中的表遇到 DML 時清除高速緩存(以確保正確無誤)。
大型池
數據庫管理員可以配置稱為“大型池”的可選內存區,以便為以下對象提供大型內存分配:
? 共享服務器的會話內存和 Oracle XA 接口(在事務處理與多個數據庫交互時使用)
? I/O 服務器進程
? Oracle DB 備份和還原操作
通過從大型池中為共享服務器、 Oracle XA 或并行查詢緩沖區分配會話內存, Oracle DB可以主要使用共享池來緩存共享 SQL,并避免由于收縮共享 SQL 高速緩存而導致的性能開銷。
此外,用于 Oracle DB 備份和還原操作、 I/O 服務器進程以及并行緩沖區的內存以數百 KB的緩沖區進行分配。與共享池相比,大型池可以更好地滿足此類大型內存請求。
大型池沒有 LRU 列表。它與共享池中的保留空間不同,后者與從共享池中分配的其它內存使用相同的 LRU 列表。
java池和流池
存儲 JVM 中所有特定于會話的 Java 代碼和數據的服務器內存使用 Java 池內存。 Java 池內存的使用方式有多種,具體取決于 Oracle DB 的運行模式。
Java 池指導統計信息提供了用于 Java 的庫高速緩存內存的相關信息,并預測 Java 池大小的變化如何影響語法分析速率。當 statistics_level 設置為 TYPICAL 或更高值時,將在內部打開 Java 池指導。關閉該指導時,將重置這些統計信息。
流池由 Oracle Streams 獨占使用。流池存儲緩沖的隊列消息,并且為 Oracle Streams 捕獲進程和應用進程提供內存。
除非對流池進行專門配置,否則其大小從零開始。當使用 Oracle Streams 時,池大小會根據需要動態增長。
程序全局區(PGA)
程序全局區 (PGA) 是一個專用內存區,其中包含服務器進程的數據及控制信息。每個服務器進程都有獨立的 PGA。 PGA 只能由相應的服務器進程訪問,并且只有代表該服務器進程的 Oracle 代碼可以讀取它。開發人員的代碼不能訪問 PGA。
每個 PGA 都包含堆棧空間。在專用服務器環境中,連接到數據庫實例的每個用戶都有單獨的服務器進程。對于這種類型的連接, PGA 包含一個名為用戶全局區 (UGA) 的內存細分部分。 UGA 包括以下部分:
? 游標區,用于存儲游標的運行時信息
? 用戶會話數據存儲區,用于存儲有關會話的控制信息
? SQL 工作區,用于處理 SQL 語句,其中包括:
- 排序區,用于對數據排序的函數,如 ORDER BY 和 GROUP BY
- 散列區,用于執行表的散列聯接
- 位圖創建區,用于創建數據倉庫常用的位圖索引
- 位圖合并區,用于解析位圖索引計劃的執行
在共享服務器環境中,多個客戶機用戶共享服務器進程。在這種模式下, UGA 將移入SGA(共享池,如果經過配置也可是大型池), PGA 僅包含堆棧空間。
進程結構
Oracle DB 系統中的進程主要分為兩組:
1、運行應用程序或 Oracle 工具代碼的用戶進程
對于不同的 Oracle DB 配置,用戶進程結構有所不同,具體取決于操作系統和選擇的 OracleDB 選件。已連接用戶的代碼可以配置為專用服務器或共享服務器。
? 專用服務器: 對于每個用戶,運行數據庫應用程序的用戶進程都由執行 Oracle DB 服務器代碼的專用服務器進程提供服務。
? 共享服務器: 不必為每個連接都提供一個專用服務器進程。分派程序將多個傳入網絡會話請求引到共享服務器進程池。共享服務器進程為所有客戶機請求提供服務。
2、運行 Oracle DB 服務器代碼的 Oracle DB 進程(包括服務器進程和后臺進程)
2.1、服務器進程
Oracle DB 創建服務器進程以處理連接到實例的用戶進程的請求。用戶進程代表連接到Oracle DB 的應用程序或工具。它可以與 Oracle DB 在同一臺計算機上,也可以在遠程客戶機上利用網絡來訪問 Oracle DB。用戶進程首先與一個監聽程序進程通信,在專用環境中該進程會創建一個服務器進程。
所創建的代表每個用戶的應用程序的服務器進程可以執行以下一項或多項操作:
? 對通過應用程序發出的 SQL 語句進行語法分析并運行語句
? 從磁盤上的數據文件中將必要的數據塊讀取到 SGA 的共享數據庫緩沖區中(如果這些數據塊目前尚未在 SGA 中)
? 返回結果,使應用程序可以處理信息
2.2、后臺進程
為了最大限度地提高性能并滿足多個用戶的需要,多進程 Oracle DB 系統使用一些稱為“后臺進程”的附加 Oracle DB 進程。一個 Oracle DB 實例可以有多個后臺進程。
非 RAC、非 ASM 環境中的常見后臺進程包括:
? 數據庫寫進程 (DBWn)
? 日志寫進程 (LGWR)
? 檢查點進程 (CKPT)
? 系統監視器進程 (SMON)
? 進程監視器進程 (PMON)
? 恢復器進程 (RECO)
? 作業隊列協調程序 (CJQ0)
? 作業從屬進程 (Jnnn)
? 歸檔進程 (ARCn)
? 隊列監視器進程 (QMNn)
更高級的配置(如 RAC)中可能會有其它后臺進程。有關后臺進程的詳細信息,請參見V$BGPROCESS 視圖。
有些后臺進程是在啟動實例時自動創建的,而另外一些則是根據需要創建的。
其它進程結構不是特定于單個數據庫的,而是可以在同一個服務器上的多個數據庫間共享的。 Grid Infrastructure 進程和網絡進程即屬于此類。
linux 和 unix 系統上的 Oracle Grid Infrastructure 進程包括:
? ohasd: Oracle 高可用性服務守護程序,負責啟動 Oracle Clusterware 進程
? ocssd:集群同步服務守護程序
? diskmon:磁盤監視守護程序,負責監視 HP Oracle Exadata Storage Server 的輸入和輸出
? cssdagent:啟動、停止和檢查 CSS 守護程序 ocssd 的狀態
? oraagent:擴展集群件以支持 Oracle 特有的要求和復雜資源
? orarootagent:一種專用的 Oracle 代理進程,可幫助管理 root 用戶所擁有的資源(如網絡)
數據庫寫進程(DBWn)
數據庫寫進程 (DBWn) 可以將緩沖區的內容寫入數據文件。 DBWn 進程負責將數據庫緩沖區高速緩存中經過修改的緩沖區(灰數據緩沖區)寫入磁盤。雖然對于大多數系統來說,一個數據庫寫進程 (DBW0) 已經足夠;但是,如果系統需要頻繁修改數據,也可以配置附加進程( DBW1 到 DBW9 以及 DBWa 到 DBWz)來改進寫性能。這些附加 DBWn 進程在單處理器系統中沒有用。
當數據庫緩沖區高速緩存中的某個緩沖區被修改時,系統會將其標記為灰數據緩沖區,并將其添加到按 SCN 順序排列的檢查點隊列的頭中。因此,該順序與這些更改的緩沖區的重做條目寫入重做日志的順序一致。當緩沖區高速緩存中的可用緩沖區的數量低于某個內部閾值(達到服務器進程認為很難獲取可用緩沖區的程度)時, DBWn 會將不經常使用的緩沖區寫入數據文件,寫入順序是從 LRU 列表的尾部開始,從而使進程可以在需要緩沖區時替換它們。 DBWn 也會從檢查點隊列的尾部寫入,以保護檢查點向前推進。
SGA 中有一個內存結構保存了重做流中位置的重做字節地址 (RBA),當實例發生故障時,將從該位置開始恢復。此結構充當指向重做的指針,并且由 CKPT 進程按照每三秒一次的頻率寫入控制文件。由于 DBWn 按照 SCN 順序寫入灰數據緩沖區,而重做按照 SCN順序執行,因此每當 DBWn 從 LRUW 列表寫灰數據緩沖區時,還會將 SGA 內存結構中保持的指針前移,以便實例恢復(如果需要)從近似正確的位置開始讀取重做,并避免不必要的 I/O。這稱為“增量檢查點”。
注: 還有其它一些 DBWn 可能執行寫操作的情況(例如,當表空間被設置為只讀或被置于脫機狀態時)。在這些情況下,不會出現增量檢查點,因為僅屬于相應數據文件的灰數據緩沖區在寫入數據庫時的順序與 SCN 順序無關。
LRU 算法將更頻繁訪問的塊保存在緩沖區高速緩存中,以盡可能地減少磁盤讀取。可對表使用 CACHE 選項,以幫助延長塊在內存中的保留時間。
DB_WRITER_PROCESSES 初始化參數指定了 DBWn 進程的數量。 DBWn 進程的最大數量為 36。如果用戶在啟動過程中未指定該進程數, Oracle DB 將根據 CPU 和處理器組的數量來決定如何設置 DB_WRITER_PROCESSES。
在以下情況下, DBWn 進程將灰數據緩沖區寫入磁盤:
? 當服務器進程在掃描閾值數目的緩沖區之后找不到干凈的可重用緩沖區時,會通知DBWn 執行寫操作。 DBWn 在執行其它處理的同時,將灰數據緩沖區異步寫入磁盤。
? DBWn 寫緩沖區以推進檢查點。檢查點是重做線程(日志)中用于執行實例恢復的起始位置。該日志位置由緩沖區高速緩存中最舊的灰數據緩沖區確定。在所有情況下, DBWn 均執行成批(多塊)寫操作以提高效率。多塊寫操作中寫入的塊數因操作系統而異。
日志寫進程(LGWR)
日志寫進程 (LGWR) 負責管理重做日志緩沖區,方法是將重做日志緩沖區條目寫入磁盤上的重做日志文件。 LGWR 會寫入自上次寫入以來復制到緩沖區中的所有重做條目。
重做日志緩沖區是循環緩沖區。當 LGWR 將重做日志緩沖區中的重做條目寫入重做日志文件后,服務器進程可以將新條目復制到重做日志緩沖區中的那些已寫入磁盤的條目之上。LGWR 的寫入速度通常足夠快,可以確保緩沖區中始終有空間可供新條目使用,即使對重做日志的訪問量很大時也是如此。 LGWR 將緩沖區的一個連續部分寫入磁盤。
LGWR 在以下情況下執行寫操作:
? 用戶進程提交事務處理時
? 重做日志緩沖區的三分之一已滿時
? 在 DBWn 進程將經過修改的緩沖區寫入磁盤(如果需要)之前
? 每隔 3 秒
必須在與緩沖區更改相關聯的所有重做記錄寫入磁盤后, DBWn 才可以向磁盤寫入經過修改的緩沖區(先行寫協議)。如果 DBWn 發現一些重做記錄尚未寫入,則會通知 LGWR
將這些重做記錄寫入磁盤,并等待 LGWR 完成重做日志緩沖區的寫入操作,然后再寫數據緩沖區。 LGWR 將向當前的日志組進行寫入。如果該組中的某個文件已損壞或不可用,LGWR 將繼續寫入該組中的其它文件,并在 LGWR 跟蹤文件和系統預警日志中記錄一個錯誤。如果某個組中的所有文件均已損壞,或者該組由于尚未歸檔而不可用,則 LGWR無法繼續工作。
當用戶發出 COMMIT 語句時, LGWR 會將一條提交記錄放在重做日志緩沖區中,并立即將該記錄隨同事務處理的重做日志一起寫入磁盤中。對數據塊進行的相應更改將延遲,直到能夠更為高效地寫入這些更改時才會執行。這稱為“快速提交機制”。包含事務處理提交記錄的重做條目的原子寫是單個事件,該事件可以確定事務處理是否已提交。
Oracle DB 為提交的事務處理返回一個成功代碼,盡管數據緩沖區尚未寫入磁盤中。
如果需要更多緩沖區空間, LGWR 有時會在提交事務處理之前寫入重做日志條目。僅當稍后提交了該事務處理之后,這些條目才會成為永久條目。當用戶提交事務處理時,該事務處理將被分配一個系統更改號 (SCN), Oracle DB 將該號碼與事務處理的重做條目一起記錄在重做日志中。 SCN 記錄在重做日志中,以便可以在 Real Application Clusters 和分布
式數據庫之間同步恢復操作。
當活動比較頻繁時, LGWR 可以通過使用組提交來寫入重做日志文件。例如,假設用戶提交一個事務處理。 LGWR 必須將該事務處理的重做條目寫入磁盤。發生該情況時,其他用戶將發出 COMMIT 語句。但是, LGWR 在完成其上一個寫操作之前,無法寫入重做日志文件以提交這些事務處理。在第一個事務處理的條目寫入重做日志文件之后,可以在一次操作中將正在等待(尚未提交)的事務處理的整個重做條目列表寫入磁盤,這比分別處理各個事務處理條目所需的 I/O 要少。因此, Oracle DB 可以將磁盤 I/O 降至最少,并最大限度地提高 LGWR 的性能。如果提交請求的速率一直較高,則從重做日志緩沖區進行的每個寫操作(由 LGWR 執行)都可能包含多個提交記錄。
檢查點進程(CKPT)
“檢查點”是一種數據結構,用于定義數據庫的重做線程中的系統更改號 (SCN)。檢查點被記錄在控制文件和每個數據文件頭中。它們是恢復操作的關鍵元素。
出現檢查點時, Oracle DB 必須更新所有數據文件的頭,以記錄該檢查點的詳細信息。這是由 CKPT 進程完成的。 CKPT 進程不會將塊寫入磁盤;該工作都是由 DBWn 執行。文件頭中記錄的 SCN 可保證將該 SCN 之前對數據庫塊進行的所有更改寫入到磁盤中。
Oracle Enterprise Manager 中的 SYSTEM_STATISTICS 監視器將顯示統計信息 DBWR 檢查點,由其指示已完成的檢查點請求的數目。
系統監視器進程(SMON)
系統監視器進程 (SMON) 在實例啟動時執行恢復(如果需要)。 SMON 還負責清除不再使用的臨時段。如果在實例恢復過程中由于文件讀取或脫機錯誤跳過任何已終止的事務處理,則 SMON 將在表空間或文件重新聯機時恢復這些事務處理。
SMON 定期檢查以查看是否需要該進程。其它進程在檢測到需要 SMON 時也可以調用它。
進程監視器進程
進程監視器進程 (PMON) 在用戶進程失敗時執行進程恢復。 PMON 負責清除數據庫緩沖區高速緩存和釋放該用戶進程占用的資源。例如, PMON 會重置活動事務處理表的狀態,釋放鎖,并從活動進程列表中刪除該進程 ID。
PMON 定期檢查分派程序和服務器進程的狀態,并重新啟動任何已停止運行(除了 OracleDB 故意終止)的分派程序和服務器進程。 PMON 還會在網絡監聽程序中注冊有關實例和分派程序進程的信息。
與 SMON 一樣, PMON 定期檢查以查看是否需要運行;如果其它進程檢測到需要該進程,也可以調用它。
恢復器進程
恢復器進程 (RECO) 是用于分布式數據庫配置的后臺進程,自動解決涉及分布式事務處理的故障。實例的 RECO 進程會自動連接到其它那些與有問題的分布式事務處理有關的數據庫。當 RECO 進程在涉及到的數據庫服務器之間重新建立連接時,它會自動解決所有有問題的事務處理,從每個數據庫的暫掛事務處理表中刪除所有對應于已解決的有問題事務處理的行。
如果 RECO 進程無法與遠程服務器連接, RECO 會在某個計時間隔之后自動嘗試重新連接。但是, RECO 在重新嘗試連接之前,會等待一段時間,此時間會不斷增加(呈冪指數增長)。
歸檔進程(ARCn)
發生日志切換之后,歸檔進程 (ARCn) 會將重做日志文件復制到指定的存儲設備。僅當數據庫處于 ARCHIVELOG 模式且已啟用自動歸檔時,才會存在 ARCn 進程。
如果您預計歸檔的工作負荷很重(例如在成批加載數據期間),則可以使用LOG_ARCHIVE_MAX_PROCESSES 初始化參數增加最大歸檔進程數。 ALTER SYSTEM 語句可以動態更改該參數的值,以增加或減少 ARCn 進程數。
存儲結構
構成 Oracle DB 的文件可劃分為以下類別:
? 控制文件: 包含與數據庫本身相關的數據,即物理數據庫結構信息。這些文件對數據庫至關重要。沒有這些文件,就無法打開數據文件以訪問數據庫中的數據。
? 數據文件: 包含數據庫的用戶或應用程序數據,以及元數據和數據字典
? 聯機重做日志文件: 用于進行數據庫的實例恢復。如果數據庫服務器發生崩潰,但未丟失任何數據文件,那么實例便可使用這些文件中的信息恢復數據庫。
下列附加文件對成功運行數據庫非常重要:
? 參數文件: 用于定義實例啟動時的配置
? 口令文件: 允許 sysdba、 sysoper 和 sysasm 遠程連接到實例并執行管理任務
? 備份文件: 用于進行數據庫恢復。如果原始文件在發生介質故障或用戶錯誤時被損壞或刪除,通常要還原備份文件。
? 歸檔重做日志文件: 包含實例發生的數據更改(重做)的實時歷史記錄。使用這些文件和數據庫備份,可以恢復丟失的數據文件。也就是說,歸檔日志能夠恢復還原的數據文件。
? 跟蹤文件: 每個服務器和后臺進程都可以寫入關聯的跟蹤文件。當進程檢測到內部錯誤時,進程會將有關該錯誤的信息轉儲到相應的跟蹤文件中。寫入跟蹤文件的一些信息是為數據庫管理員提供的,而其它信息是為 Oracle Support Services 提供的。
? 預警日志文件: 這些文件包含特殊的跟蹤條目。數據庫的預警日志是按時間順序列出的消息日志和錯誤日志。 Oracle 建議您定期查看預警日志。
邏輯和物理數據庫結構
數據庫、表空間和數據文件
本幻燈片對數據庫、表空間和數據文件之間的關系進行了說明。每個數據庫都在邏輯上分為兩個或多個表空間。在每個表空間均顯式創建一個或多個數據文件,以在物理上存儲表空間中所有邏輯結構的數據。對于 TEMPORARY 表空間,不創建數據文件,而是創建臨時
文件。表空間的數據文件可以采用任何受支持的存儲技術進行物理存儲。
表空間
數據庫分為多個邏輯存儲單元,這些單元稱為“表空間”,用于對相關邏輯結構或數據文件進行分組。例如,表空間一般會將一個應用程序的所有段分成一組,以簡化一些管理操作。
數據庫被劃分為多個“表空間”,表空間是可用于將相關邏輯結構組合在一起的邏輯存儲單元。每個數據庫都在邏輯上分為兩個或多個表空間: SYSTEM 和 SYSAUX 表空間。在每個表空間均顯式創建一個或多個數據文件,以在物理上存儲表空間中所有邏輯結構的數據。
一個大小為 160 KB 的段跨越兩個數據文件,由兩個區組成。第一個區位于第一個數據文件中,大小為 64 KB;第二個區位于第二個數據文件中,大小為 96 KB。兩個區都由若干相鄰的 8Kb Oracle 塊組成。
注: 可以創建大文件表空間,這種表空間只有一個通常非常大的文件。該文件的大小可達到行 ID 體系結構允許的最大大小。此最大大小是表空間的塊大小乘以 236,如果塊大小為 32 KB,則最大大小為 128 TB。傳統的小文件表空間(默認值)可以包含多個數據文件,但這些文件都不大。
數據塊
Oracle DB 的數據存儲在“數據塊”中,數據塊是粒度最低的一級。一個數據塊對應于磁盤中特定字節數的物理空間。每個表空間的數據塊大小是在表空間創建時指定的。數據庫以 Oracle 數據塊為單位使用和分配空閑數據庫空間。
區
邏輯數據庫空間的下一級是“區”。區是特定數量的相鄰 Oracle 數據塊(通過一次分配獲得),用于存儲特定類型的信息。區中的 Oracle 數據塊在邏輯上是相鄰的,但在物理上可以分布在磁盤上的不同位置( RAID 條帶化和文件系統實施會導致此現象)。
段
邏輯數據庫存儲中區的上一級稱為“段”。一個段是為某個邏輯結構分配的一組區。例如:
? 數據段: 每個非集群的、不按索引組織的表都有一個數據段,但外部表、全局臨時表和分區表除外,這些表中的每個表都有一個或多個段。表中的所有數據都存儲在相應數據段的區中。對于分區表,每個分區都有一個數據段。每個集群也都有一個數據段。集群中每個表的數據都存儲在集群的數據段中。
? 索引段: 每個索引都有一個索引段,存儲其所有數據。對于分區索引,每個分區都有一個索引段。
? 還原段: 系統會為每個數據庫實例創建一個 UNDO 表空間。該表空間包含大量用于臨時存儲還原信息的還原段。還原段中的信息用于生成讀一致性數據庫信息,以便在數據庫恢復過程中回退用戶未提交的事務處理。
? 臨時段: 臨時段是 SQL 語句需要臨時工作區來完成執行時由 Oracle DB 創建的。語句完成執行后,臨時段的區將返回到實例以備將來使用。您可以為每個用戶指定一個默認臨時表空間,或指定一個在數據庫范圍內使用的默認臨時表空間。
注: 另外還有一些上面未列出的其它類型的段。此外,還有一些方案對象,如視圖、程序包和觸發器等,雖然它們是數據庫對象,但不被視為段。段擁有單獨的磁盤空間分配。其它對象則以行的形式存儲在系統元數據段中。
Oracle DB 服務器對空間進行動態分配。如果段中的現有區已滿,則會再增加一些區。因為區是根據需要來分配的,因此段中的區在磁盤上可能是相鄰的,也可能是不相鄰的,它們可以來自屬于同一個表空間的不同數據文件。
自動存儲管理
自動存儲管理 (ASM) 為 Oracle DB 文件提供文件系統與卷管理器縱向集成。 ASM 可管理單個對稱多處理 (SMP) 計算機,或管理集群的多個節點來支持 Oracle Real Application Clusters (RAC)。
Oracle ASM 集群文件系統 (ACFS) 是一種多平臺、可伸縮的文件系統和存儲管理技術,該技術擴展了 ASM 的功能,可支持 Oracle DB 外部的應用程序文件,如可執行文件、報表、BFILE、視頻、音頻、文本、圖像以及其它一般用途的應用程序文件數據。
ASM 在所有可用資源中分布輸入/輸出 (I/O) 負載,既免除了手動優化 I/O 又優化了性能。ASM 幫助 DBA 管理動態數據庫環境,讓 DBA 在不關閉數據庫的情況下,通過增加數據庫的大小來調整存儲分配。
ASM 可以維護數據的冗余副本來提供容錯能力,也可以構建在供應商提供的存儲機制之上。數據管理是通過為各類數據選擇所需的可靠性和性能指標來實現的,而不是逐個文件地進行人工交互。
通過使手動完成的存儲工作自動化, ASM 功能節省了 DBA 的時間,從而提高了管理員的能力,使其可以管理更多和更大的數據庫,而且效率也更高。
ASM 不會妨礙任何現有的數據庫功能。現有數據庫能夠像平常一樣工作。新文件可以被創建為 ASM 文件,而現有文件既可以按原有方式進行管理,也可以移植至 ASM。
上圖說明了 Oracle DB 數據文件與 ASM 存儲組件之間的關系。鴉腳標記代表一對多關系。Oracle DB 數據文件與存儲在操作系統的文件系統中的文件或 ASM 文件之間是一對一關系。
Oracle ASM 磁盤組是作為一個邏輯單元進行管理的一個或多個 Oracle ASM 磁盤的集合。磁盤組中的數據結構是自包含的,使用部分空間來滿足元數據需求。 Oracle ASM 磁盤是為 Oracle ASM 磁盤組預配的存儲設備,可以是物理磁盤,也可以是分區、存儲陣列中的
邏輯單元號 (LUN)、邏輯卷 (LV) 或連接到網絡的文件。每個 ASM 磁盤被分成許多 ASM分配單元 (AU),該單元是 ASM 可以分配的最小相鄰磁盤空間量。在創建 ASM 磁盤組時,可以將 ASM 分配單元的大小設置為 1、 2、 4、 8、 16、 32 或 64 MB,具體取決于磁盤組的兼容級別。一個或多個 ASM 分配單元即形成一個 ASM 區。 Oracle ASM 區是用于存放Oracle ASM 文件內容的裸存儲。 Oracle ASM 文件由一個或多個文件區組成。為了支持非常大的 ASM 文件,可以使用可變大小區,區大小可等于 AU 大小的 1 倍、 4 倍和 16 倍。
推薦教程:《oracle》