Oracle 和 DB2,比較和相容性/架構/Oracle
構成磁碟上物理資料庫的主要結構是
• 資料檔案
• 控制檔案
• 撤銷日誌
• 臨時檔案
資料檔案儲存資料、索引、撤銷段和臨時資料。資料和索引可以儲存在不同的檔案或同一個資料檔案中。
控制檔案包含資料庫的結構。控制檔案是一個二進位制檔案,每個資料庫至少應有 3 個(出於冗餘目的)。控制檔案看起來完全相同,它們應該位於不同的驅動器和控制器上。控制檔案的內容包括資料庫名稱、建立日期以及所有資料檔案和每個資料庫的檢查點資訊的規範路徑。它們用於掛載資料庫、開啟資料庫以及訪問資料庫。它們在資料庫需要恢復時儲存同步資料。
撤銷/重做日誌有 3 個主要元件。
• 所有 DML(插入、選擇、更新和刪除)。對索引和表所做的所有更改都儲存在此處。
• 所有 DDL(即建立、刪除、修改)
• 所有提交
聯機撤銷日誌是資料庫中所有更改的記錄。因為這些檔案對於在恢復時維護資料庫完整性至關重要,所以每個撤銷日誌檔案都被複制,並且資訊被寫入兩個成員(多路複用)。然後,日誌檔案被組織成組,因此,當一組日誌檔案填滿時,Oracle 會執行檢查點和日誌切換,之後,組中的下一組檔案將被寫入。每個資料庫至少會有兩組日誌檔案組,但可能會有更多(最多 255 組)。日誌檔案迴圈寫入,當一組日誌檔案填滿時,將寫入系列中的下一組檔案。這些檔案應該位於不同的驅動器和控制器上(同樣,為了冗餘)。當寫入系列中的最後一組檔案時,該過程將從系列中的第一組檔案重新開始。透過在日誌檔案填滿時對其進行歸檔可以獲得額外的安全級別,以便在再次寫入它們時不會覆蓋任何資料 - 這稱為在歸檔日誌 (ARCHIVELOG) 模式下執行。您需要確保有足夠的儲存空間來儲存已歸檔的日誌檔案,因為如果資料庫嘗試歸檔到已滿的目錄,則會掛起。
上面提到的 3 種結構,重做/撤銷日誌檔案、控制檔案和資料檔案,以及在資料庫操作期間建立的臨時檔案共同定義了資料庫。
在資料庫本身之外是伺服器引數檔案 (SP 檔案)。這是一個使用 ALTER SYSTEM 命令維護的二進位制檔案。此檔案中大約有 300 個引數。還有由 ORAPWD 維護的 Oracle 密碼檔案。
Oracle 以三種不同的塊管理記憶體。如果我們認為記憶體是從“頂向下”組織的,那麼在最上面是為資料庫例項和後臺程序分配的記憶體 - 共享全域性區域 (SGA)。SGA 是一個包含一個 Oracle 資料庫例項的資料和控制資訊的共享記憶體結構集合。每個資料庫例項都有一個 SGA,當例項啟動時,緩衝區將在其中分配。SGA 應適合真實記憶體,以避免記憶體分頁。它在 DBMS 啟動時分配(啟動),並在停止時釋放(關閉)。它是 SGA 和針對這些結構執行的程序,被稱為資料庫例項。
在它下面,為每個伺服器和後臺程序分配了記憶體,即程式全域性區域 (PGA)。每個 PGA 在伺服器程序啟動時在非共享記憶體中分配,它包含伺服器程序的資料和控制資訊。這意味著對 PGA 的訪問僅限於該伺服器程序。當使用術語例項 PGA 時,它指的是所有正在使用的單個記憶體段,即使它們不可共享。
對於每段程式碼,無論是 Oracle 資料庫程式碼還是使用者程式碼,都有一個軟體程式碼區域 (SCA)。Oracle 資料庫程式碼和使用者程式碼儲存在不同的記憶體位置,Oracle 程式碼隔離在一個更安全的位置。
因此,從上到下,我們有
• 共享全域性區域(每個 DBMS 例項一個)
• 程式全域性區域(每個伺服器和後臺程序一個)
• 軟體程式碼區域(每個 Oracle 或使用者程式一個)
系統全域性區域中的主要記憶體池是
• 緩衝區快取
• 共享池
• 重做緩衝區
• 大型池
• Java 池
• 流池
緩衝區快取對連線到 Oracle 例項的所有使用者可見。資料庫緩衝區快取包含四個主要段 - 資料、索引(以及帶有索引的資料)、撤銷日誌和臨時檔案。臨時檔案是在記憶體中構建的用於儲存瞬態資料的結構,例如排序的中間結果。因為緩衝池儲存從磁碟讀取的塊,所以如果緩衝池塊大小是作業系統塊大小的倍數,則效率最高。對於執行大量磁碟 I/O 的應用程式,例如聯機事務處理 (OLTP) 應用程式,資料庫緩衝池也必須足夠大。
Oracle 使用緩衝區快取的方式是,當它需要一個數據塊時,它首先查詢緩衝區快取,因為 a) 記憶體讀取比磁碟讀取更快,並且 b) Oracle 努力將最常用的資料和最有可能使用的資料儲存在記憶體中。如果資料不存在於緩衝區快取中,那麼 Oracle 將從穩定儲存(磁碟)讀取所需資料。讀取資料後,它會被放置到緩衝區快取中,以便對相同資料的任何後續訪問都能利用快取的資料。
緩衝區快取被組織成兩個區域,寫入列表和最近最少使用 (LRU) 列表。寫入列表儲存等待寫入磁碟的已修改塊。由於磁碟 I/O 代價很高,因此塊不會在修改後立即重新整理到磁碟,而是收集在寫入列表中,作為一次更便宜的寫入的候選,該寫入可以一次移動多個塊(延遲寫入)。
LRU 列表儲存空緩衝區(空閒緩衝區)、正在使用的緩衝區(稱為“固定緩衝區”,因為它們固定在記憶體中以防止在使用期間被驅逐),以及等待移至寫入列表的髒(修改)緩衝區。當程序訪問緩衝區時,緩衝區將被移至 LRU 列表的末尾,該末尾恰如其分地稱為最近使用端。這個將緩衝區透過 LRU 列表遷移以供訪問的過程意味著那些不常訪問的緩衝區將移動到最不常用端,併成為 LRU 演算法從快取中驅逐的候選者。由於希望將最常訪問的資料保留在共享記憶體中(即資料、索引、SQL 語句和查詢計劃),因此當存在一組持續訪問且將被固定在記憶體中且不會寫入磁碟的資料集時,會出現一種情況。為了確保此資料被寫入磁碟(以保持永續性)並在撤銷日誌中儲存,有一個定期執行的檢查點程序 (CKPT) 來執行此操作,方法是向資料庫寫入程序 (DBW0、DBW1 等...) 發出訊號(為了效率,可以有多個數據庫寫入程式,我們將在後面看到)。
瞭解了緩衝區的組織方式後,程序使用緩衝區快取的方式是,首先在緩衝區快取中搜索資料。當在緩衝區快取中找到所需資料時,這稱為“快取命中”。在“快取未命中”情況下,必須從磁碟讀取所需資料。在快取未命中時,Oracle 將從 LRU 列表的最不常用端開始搜尋空閒緩衝區,並將其遇到的任何髒緩衝區移至寫入列表。該程序將繼續搜尋,直到找到空閒緩衝區或到達列表的 MRU 端。如果該程序找到了空閒緩衝區,它將從磁碟將所需的資料塊讀取到緩衝區中,然後將緩衝區移至列表的 MRU 端。如果沒有可用的空閒緩衝區,該程序將向資料庫寫入程序發出訊號以將修改後的緩衝區寫入磁碟。
共享池
[edit | edit source]共享池是 SGA 的主要組成部分,它包含許多結構,主要結構如下所示。這些結構的一個示例是用於儲存已解析 SQL 語句的區域。這些語句定期載入和解除安裝到記憶體中,因此需要記憶體分配和釋放。為了管理共享池記憶體,使用類似於緩衝池中的 LRU 演算法。
此演算法即使在建立它們的程序終止後也會在共享池中維護經常訪問的項。與緩衝池 LRU 演算法類似,資料庫伺服器將檢查共享池以查詢提交執行的任何 SQL 語句的現有已解析例項。如果找到,它將被使用。如果沒有,將在共享池中分配一個新的 SQL 區域,並且一旦 SQL 被解析並構建執行計劃,它將被使用。如果 SQL 區域中的結構引用的資料庫物件被修改,則 SQL 區域將被失效,這將導致該語句在下次執行時被重新解析和載入。
共享池由以下部分組成:
• 庫快取
• 結果快取
• 字典快取
庫快取
[edit | edit source]庫快取是所有併發使用者都可以使用的例項級記憶體結構。它儲存共享和私有 SQL 區域、PL/SQL 過程和包。
共享 SQL 區域和私有 SQL 區域
[edit | edit source]共享 SQL 區域用於使用者程序 SQL 語句,並且根據定義,許多使用者程序可以共享此程式碼。在某些情況下,例如共享伺服器配置(下面提到)和 PL/SQL 程式碼塊,其中有關正在執行的 SQL 單元的的資訊需要隔離以防止併發使用者踩到彼此的包變數,這些單元使用私有 SQL 區域。每個在例項中執行的 SQL 語句都有一個共享 SQL 區域和一個私有 SQL 區域。SQL 區域包含 SQL 語句的解析樹和執行計劃。每次解析 SQL 語句時,資料庫伺服器都會分配記憶體,這種分配是動態的,基於 SQL 語句的大小和複雜性。如果 SQL 區域被釋放,則 SQL 語句將在下次執行時被重新解析。這樣,資料庫可以減少頻繁執行的 SQL 的解析開銷。這是可能的,因為 SQL 往往很少更改。由於所有例項使用者都可以使用單個共享 SQL 語句,因此這也可以節省記憶體。
在共享伺服器配置中,許多使用者程序可以共享少量伺服器程序,有效地增加了例項的併發使用者數量。實現這一點的方法是,使用者程序連線到排程程式,排程程式透過公共佇列在共享的空閒伺服器程序池中為使用者程序請求進行代理。但是,在這種情況下,每個使用者都必須擁有語句的私有 SQL 區域的單獨副本。
PL/SQL 程式單元和共享池
[edit | edit source]PL/SQL 語句(函式、觸發器、過程、包和匿名塊)的處理方式類似於單個 SQL 語句。共享 SQL 區域儲存已解析的語句,私有 SQL 區域儲存特定於執行 PL/SQL 塊的使用者程序的資訊,例如區域性和全域性變數、包變數和 SQL 緩衝區。這樣,每個執行 PL/SQL 程式單元的使用者都會使用相同的共享 SQL 區域,但在私有 SQL 區域中保留特定於其會話的值。
結果快取
[edit | edit source]結果快取由兩個區域組成:SQL 查詢結果快取和 PL/SQL 函式結果快取。
SQL 查詢結果快取和 PL/SQL 函式結果快取
這些區域用於儲存已執行的 SQL 語句和 PL/SQL 函式的結果以供後續重複使用。可以使用引數設定來控制它們的使用,該引數設定可以開啟此功能,或者可以使用 SQL 中的提示。如果結果快取引用了被更改的物件,則資料庫將使結果集失效,以使後續查詢或函式不會返回過時資訊 - 它們將再次執行以重新整理快取。
字典快取
[edit | edit source]資料字典是包含有關資料庫、其結構及其使用者的參考資訊的資料庫表和檢視的集合。Oracle 資料庫在解析 SQL 語句期間經常訪問資料字典。此訪問對於 Oracle 資料庫的持續執行至關重要。Oracle 資料庫如此頻繁地訪問資料字典,以至於記憶體中被指定了兩個特殊位置來儲存字典資料。一個區域稱為資料字典快取,也稱為行快取,因為它以行的形式儲存資料,而不是緩衝區(緩衝區儲存完整的資料塊)。記憶體中用於儲存字典資料的另一個區域是庫快取。所有 Oracle 資料庫使用者程序都共享這兩個快取以訪問資料字典資訊。
重做緩衝區
[edit | edit source]重做日誌緩衝區儲存有關透過 INSERT、UPDATE、DELETE、CREATE、ALTER 或 DROP 操作對資料庫進行的更改的資訊,作為重做條目。條目是從使用者的記憶體副本中新增到重做日誌緩衝區的。這些條目用於在發生恢復時重建資料庫。由於條目對於維護資料庫的一致性非常重要,因此它們也會由日誌寫入程式 (LGWR) 程序寫入磁碟上的活動重做日誌組。由於重做緩衝區被寫入磁碟,因此重做日誌緩衝區會迴圈覆蓋 - 當程序到達重做日誌緩衝區的末尾時,它會從開頭繼續寫入。因此,重做日誌緩衝區在記憶體中分配為一個連續空間。
大池
[edit | edit source]大池是可選區域,可以在 SGA 中為需要大量記憶體的程序和操作分配。例如,在前面提到的共享伺服器配置中,跨多個數據庫的事務可以使用大池來儲存這些事務的共享 SQL,而不是共享 SQL 區域。大池更適合用於需要大量記憶體的定期資料庫維護實用程式(例如備份和恢復)、伺服器 I/O 程序和並行操作的緩衝區(其中查詢被分解為單獨的單元並同時執行)。在這些情況下,大池可以防止這些記憶體密集型程序影響共享池。
Java 池
[edit | edit source]Java 池儲存 Java 程式碼和資料以用於 Java 虛擬機器 - 本質上是使用者編寫的 Java 程式和資料。
流池
[edit | edit source]Oracle Streams 是一個內建的資料庫複製功能,用於在資料庫之間或單個數據庫內傳播資料、事務和事件流。Streams 透過“捕獲”資訊、將其排隊為訊息,然後在其他地方“應用”該資訊來工作。Streams 在複製中用於捕獲資料庫更改並在其他地方應用它們,但 Streams 可用於傳播資料庫中的任何其他資訊。Streams 池儲存緩衝的佇列訊息,併為 Streams 捕獲和應用程序分配記憶體。
![]() |
程式全域性區 (PGA) 是為每個伺服器程序分配的記憶體,它包含兩個區域:會話記憶體和私有 SQL 區域。PGA 的內容會有所不同,具體取決於共享伺服器的執行位置。持久區域用於儲存有關繫結變數的資訊,在共享伺服器操作中儲存在 SGA 中。對於專用伺服器操作,持久區域儲存在 PGA 中。
會話記憶體是儲存會話相關變數(如登入資訊)的位置。如果伺服器是專用伺服器,會話記憶體是私有的,如果伺服器是共享的,會話記憶體也是共享的。
私有 SQL 區域
私有 SQL 區域在 SGA 和 PGA 之間存在使用重疊。私有 SQL 區域在 PGA 中的操作方式與在 SGA 中的操作方式相同,唯一的區別在於伺服器的配置方式。如果伺服器是專用的,私有 SQL 區域儲存在 PGA 中,如果伺服器是共享的,則儲存在 SGA 中。
每個發出 SQL 語句的會話都有自己的私有 SQL 區域,其中包含繫結變數、查詢執行狀態變數和查詢執行工作區。如果多個使用者提交相同的 SQL 語句,他們都會使用一個共享 SQL 區域。共享 SQL 區域和私有 SQL 區域之間存在 1:n 關係。
私有 SQL 區域有 3 個獨立的區域,一個用於遊標和 SQL,私有 SQL 區域本身以及 SQL 工作區。
• 遊標和 SQL 區域
• 私有 SQL 區域元件
• SQL 工作區
遊標是用於操作多個獲取資料的行的強大構造。遊標儲存這些行,並允許以序列或分層方式導航它們。需要儲存有關遊標的資訊,例如您在獲取的行塊中的位置,Oracle 允許您命名遊標並在程式執行期間使用此引用。同樣,特定私有 SQL 區域部分的控制代碼可以用作命名資源。儲存遊標和 SQL 區域命名資源的記憶體結構是遊標和 SQL 區域。
各個使用者程序負責管理私有 SQL。私有 SQL 區域保留在記憶體中,直到 SQL 語句控制代碼被釋放或遊標被關閉,此時分配給執行時區域的記憶體將被釋放,但持久區域保留在記憶體中。持久區域包含查詢執行狀態資訊(即用於跟蹤表掃描的進度),以及 SQL 工作區。
SQL 工作區用於記憶體密集型操作,例如
• 基於排序的運算子(按順序排序、分組、彙總、視窗函式)
• 雜湊連線
• 點陣圖合併
• 點陣圖建立
排序將使用一個工作區(稱為排序區域)來執行記憶體中的排序。雜湊連線使用一個工作區(稱為雜湊區域)來構建雜湊表。如果要由這兩個運算子處理的資料量不適合工作區,它將被拆分,溢位部分將寫入磁碟上的臨時儲存。一般來說,較大的 SQL 工作區可以提高效能,但會佔用更多記憶體,較小的工作區存在溢位到磁碟並影響效能的風險。因此,工作區的尺寸可以控制,如果啟用了自動 PGA 記憶體管理,資料庫將自動為您執行此操作。
軟體程式碼區域是儲存 Oracle 資料庫程式碼(用於執行實際資料庫的程式碼)和使用者程式碼(使用者編寫的應用程式程式碼)的位置。這些區域是隻讀的,可以是共享的也可以是非共享的。由於程式碼本身通常不會在時間推移過程中發生變化,因此這些區域通常是靜態的,只有在軟體更新時才會發生變化。Oracle 資料庫特定程式碼通常儲存在比使用者程式碼更排他性和更受保護的記憶體部分。只有 Oracle 可以更改其程式碼,但使用者可以根據需要更新自己的程式碼。在儘可能的情況下,Oracle 努力實現共享程式碼以提高效能,但不可能以這種方式實現整個資料庫程式碼集,因此其中一部分必須是非共享的,但是多個 Oracle 例項可以共享相同的 Oracle 程式碼區域,如果它執行在同一臺機器上(如 圖 2.3 中 Oracle 記憶體模型的 3 個主要區域所示)
記憶體中的其他結構是系統檢視,它們是有用資訊的虛擬表,例如 dba_datafiles,它將為您提供有關物理資料檔案以及它們如何對映到表空間的資訊。還有您可以編寫查詢的動態效能檢視(以 V$ 為字首)。(以及 dba_datafiles)檢視共享池中的結構。V$_SQLAREA 和 V$_SQL 將為您提供對 SGA 的動態檢視,而 V$_Controlfile 將提供控制檔案的完整路徑名
圖例
• D000 - 排程器
• DBWn - 資料庫寫入器(可能有多個,指定為 DBW1 → DBW9 和 DBWa → DBWj)
• LGWR – 日誌寫入器程序
• CKPT – 檢查點程序
• ARCn – 歸檔程序(可能有多個,指定為 ARC0 → ARCn)
• RECO – 恢復程序
• PMON – 程序監視器
• SMON – 系統監視器
Oracle 使用程序來執行其核心資料庫元件以及針對資料庫及其資料工作的使用者程式和工具。每個連線的使用者都會執行兩個程序,即使用者程序(應用程式和資料庫工具和實用程式)和資料庫程序。Oracle 可以作為專用伺服器執行,其中每個使用者程序都有一個專門的伺服器程序為其提供服務,或者作為共享伺服器執行,其中多個使用者程序連線到排程器,共享伺服器程序使用請求和響應佇列為使用者程序請求提供服務。在這兩種情況下,多個使用者都可以同時使用資料庫,但在專用模式下,每個使用者程序都有一個專用伺服器程序。在多程序模式下,多個 Oracle 伺服器程序執行 Oracle 資料庫程式碼。
使用者程序
沒有連線使用者的資料庫只是學術上的興趣,擁有資料庫的目的是為了為使用者請求提供服務,因此從使用者的角度出發,我們將看一下 Oracle 如何處理併發使用者。如前所述,Oracle 可以配置為執行為專用伺服器或共享伺服器。共享使用者程序和專用使用者程序執行相同的函式,主要區別在於處理使用者程序的方式。執行資料庫的 Oracle 資料庫程序保持不變(例如,無論使用者程序如何連線到資料庫,相同的資料庫程序,如日誌寫入和檢查點,都會執行實際的資料庫本身)。根據配置,可以有多個 Oracle 程序執行以執行資料庫操作(如將資料從緩衝區快取記憶體寫入磁碟),但同樣,這些是同一程序的多個例項,它們在每種情況下都不是不同的程序。
從使用者的角度來看,他們的程序連線到一個 Oracle 例項。如果使用者在同一個物理伺服器上,連線由程序間通訊 (IPC) 處理。如果使用者在遠端機器上,連線由網路軟體(如 TCP/IP)處理。連線是無狀態的,可以認為是使用者程序和資料庫例項之間的管道。當用戶開始透過此連線工作時,他們會建立一個會話,並且會話是有狀態的。如果使用者使用客戶端程式來管理資料庫,會話將以登入開始,並將持續到登出或使用者斷開與資料庫的連線。連線和會話由程序處理,因此它們都會消耗資源。連線處理使用者到資料庫的連線,並且它們的操作與維護此路徑相關,無論是否正在發生任何事情。會話是使用者程序用來執行工作的,並且會話程序的維護和操作不需要考慮連線(這由連線程序處理),會話程序確保維護會話的狀態。單個使用者可以對一個數據庫例項執行多個會話 - 同一個使用者可能在多個會話中登入多次並執行不同的操作。
為了支援共享伺服器連線,使用以下流程: - 網路監聽器會將使用者程序連線到排程程式或專用伺服器程序 - 排程程式會將使用者會話引導到共享伺服器程序池 - 共享伺服器程序 對於資料庫支援的每種網路協議,至少需要執行一個排程程式程序。監聽器會確定使用者程序是否可以使用共享使用者程序,並將其引導到排程程式。如果使用者程序無法使用共享連線,監聽器會建立專用伺服器程序並將使用者程序連線到該程序。共享伺服器連線是 Oracle 資料庫中的可擴充套件性功能,不需要對連線到例項的使用者應用程式進行任何更改。
如果使用者程序使用排程程式,排程程式會將使用者請求放入請求佇列,等待下一個可用的伺服器程序進行處理。此佇列位於 SGA 中,由單個共享使用者程序按照“先進先出”原則進行處理。當伺服器程序完成時,它會將響應放入響應佇列,供處理此請求的排程程式處理,排程程式會將其返回給關聯的使用者程序。請求佇列和響應佇列都專用於排程程式例項,並且是共享全域性區 (SGA) 中的記憶體結構。
Oracle 程序
Oracle 使用兩類程序來執行資料庫伺服器:伺服器程序(處理使用者請求)和後臺程序(執行資料庫本身)。
代表使用者應用程式執行的伺服器程序用於解析和執行 SQL 語句,並將資料從磁碟檢索到 SGA 中。
與使用者程序協同工作的是許多後臺程序。Oracle 資料庫例項中可以執行大量後臺程序,但並非所有程序都是必需的。以下是圖 n(主要 Oracle 程序)中標識的與 Oracle 例項相關的主要程序概述。
• 資料庫寫入程序 (DBWn)
資料庫寫入程序從資料庫緩衝區快取中獲取資料,並將其寫入資料庫資料檔案。可以執行多個此類後臺寫入任務 (DBW1 到 DBW9,以及 DBWa 到 DBWj)。通常一個寫入程序就足夠了,但在大量修改資料的系統中,可以透過引數檔案配置要啟動的寫入程序的數量。如果未設定寫入程序數量的值,Oracle 會根據可用 CPU 的數量確定要啟動的寫入程序數量。資料庫寫入程序執行非同步寫入以提高效能。寫入也會延遲。資料不會在使用插入、更新或刪除進行資料更改後提交時從緩衝區寫入。這可以防止頻繁訪問的資料從緩衝區快取中彈出,並且還允許寫入程序不頻繁地將較大塊的資料寫入磁碟,而不是在更改發生後立即寫入少量更改。這就是所謂的“批處理多塊”寫入。如果需要一組不在資料庫緩衝區池中的塊,則會將最近未訪問的修改過的緩衝區(稱為冷髒緩衝區)從記憶體寫入磁碟以釋放空間。這會釋放用於從磁碟讀取資料到記憶體的冷乾淨緩衝區。LRU 演算法將最近訪問的緩衝區儲存在記憶體中,以最大限度地提高快取命中的可能性。
• 日誌寫入程序 (LGWR)
日誌寫入程序負責將資訊從撤消日誌緩衝區池中獲取並寫入當前的一組聯機撤消日誌。當事務提交時,日誌寫入程序會寫入重做日誌條目提交記錄,並將提交以及與該提交關聯的所有更改寫入磁碟。當重做日誌條目寫入磁碟時,只會寫入自上次 LGWR 寫入以來新增到緩衝區的條目(這樣就不會將重複條目記錄到磁碟)。LGWR 每 3 秒寫入一次磁碟,以及當撤消日誌已滿三分之一時。如果資料庫寫入程序 (DBWn) 將髒緩衝區寫入磁碟,LGWR 也會寫入磁碟。在 DBWn 寫入磁碟之前,LGWR 會寫入與已更改資料關聯的所有重做條目。
• 檢查點程序 (CKPT)
頻繁更新的塊有可能長時間保留在記憶體中,它們永遠不會被 LRU 選擇。檢查點程序會發出訊號,指示後臺寫入 (DBWn) 將更新的已提交塊寫入磁碟資料檔案。可以安排檢查點程序的頻率(透過伺服器引數 (SP) 檔案),也可以強制執行檢查點。
• 系統監視器程序 (SMON)
系統監視器與所有後臺程序通訊。系統監視器管理資料庫,並在發生崩潰時執行例項和崩潰恢復。它執行其他維護工作,例如回收未使用臨時段中的空間,以及合併資料檔案中的空閒空間。
• 程序監視器程序 (PMON)
PMON - 程序監視器監視其他程序,並處理死鎖以及清理已中止的程序。程序監視器會將有關例項和排程程式程序的資訊儲存在網路監聽器中。它會檢查任何排程程式和共享伺服器程序的狀態,並重新啟動任何已停止的程序。
PMON 和 SMON 都會定期檢查自己是否需要,如果需要,其他程序也可以呼叫它們。
• 恢復程序 (RECO)
恢復程序僅存在於具有分散式資料庫配置的例項中。RECO 解決分散式事務失敗。如果分散式事務的狀態為“不確定”,則節點的恢復程序會自動連線到參與該事務的其他資料庫。RECO 然後透過從每個資料庫的掛起事務表中刪除與解決不確定事務相關的任何行來解決所有不確定事務。如果 RECO 無法連線到遠端伺服器,它會超時並在以後重試。
• 歸檔程序 (ARCn)
歸檔程序 (ARCn) 在每次日誌切換時將重做日誌檔案複製到離線儲存。歸檔程序 (ARCn) 僅存在於啟用了日誌歸檔的例項中。例項上最多可以執行 10 個 ARCn 程序,這些程序由 LGWR 根據系統負載啟動。
• 排程程式程序 (Dnnn)
資料庫例項中可以存在多個排程程式程序。每個支援的網路協議(例如 TCP/IP)至少需要一個排程程式。由於排程程式用於處理多個使用者程序,因此 DBA 可以最初啟動多個排程程式,並在資料庫執行時根據需要增加或減少此數量。
• 共享伺服器程序 (Snnn)
在共享伺服器配置中,每個共享伺服器程序都會處理多個客戶端請求。
共享伺服器程序的程式全域性區不包含使用者資料,因為它需要供所有共享伺服器程序訪問,它只包含堆疊空間和程序特定的變數。與會話相關的資料(以及使用者資料)儲存在 SGA 中。Oracle 會根據請求佇列的長度動態調整共享伺服器程序的數量。




