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