oracle數據庫體系結構理論

我們先看下面幾個我們實際工作中經常會遇到的問題:

1、通常說Oracle數據庫是什麼?

2、如何理解Oracle實例?

3、Oracle實例由哪些部分組成,它們之間的作用是什麼?

4、如何理解Oracle的物理結構?

5、Oracle的物理結構由哪些部分組成,它們之間的作用是什麼?

6、如何理解Oracle的邏輯結構?

7、Oracle的邏輯結構由哪些部分組成,它們之間的作用是什麼?

一、Oracle數據庫服務器

數據庫在各個行業都會有使用到;其實,我們平時無論是在與客戶溝通或者交流中,所說的Oracle數據庫是指Oracle數據庫服務器(Oracle Server),它由Oracle實例(Oracle Instance)和Oracle數據庫(Oracle Database)組成。

Oracle實例:就是用於與數據庫進行交互的一片內存區域和後臺進程的集合;實例啓動時,系統首先在服務器內存中分配系統全局區(System Global Area),構成Oracle內存結構,然後啓動必須的常駐內存的操作系統進程,組成Oracle的進程結構,內存結構和進程結構即構成Oracle實例。

Oracle數據庫:物理文件的集合,包括數據文件、重做日誌文件、控制文件、參數文件、密碼文件、歸檔日誌文件、備份文件、告警日誌文件、跟蹤文件等等;其中數據文件、控制文件、重做日誌文件和參數文件是必須的,其他文件可選。

一個實例只能對應/操作一個數據庫,一個數據庫可以由一個或多個實例操作(比如RAC)。

二、Oracle實例

下圖爲Oracle實例結構圖:

\

Oracle實例就是用於與數據庫進行交互的一片內存區域和後臺進程的集合,一個單獨的數據庫可以被多個實例訪問,Oracle早期的並行服務器OPS演變到現在普遍使用RAC集羣架構。

實例啓動時,系統首先在服務器內存中分配系統全局區(System Global Area),構成Oracle內存結構,然後啓動必須的常駐內存的操作系統進程,組成Oracle的進程結構,內存結構和進程結構即構成Oracle實例。實例在操作系統中用ORACLE_SID來標識,在Oracle中用參數實例名(Instance Name)來標識, 它們兩個的值是相同的。下面介紹實例的組成和作用:

1、系統全局區(System Global Area)

系統全局區System Global Area(SGA)是系統分配的共享的內存結構,當數據庫實例啓動時,SGA的內存被自動分配;當數據庫實例關閉時,SGA內存被回收;SGA可以包含一個數據庫實例的數據或控制信息。當多個用戶連接到同一個數據庫實例時,在實例的SGA中,數據可以被多個用戶共享;SGA是佔用內存最大的一個區域,同時也是影響數據庫性能的重要因素。SGA主要包括:

1)、共享緩衝區(Shared Pool)

共享池(Shared Pool)就是我們常說的SQL共享池,它還包括庫緩衝區(Library Cache)和數據字典緩衝區(Data Dictionary Cache);共享緩衝區大小由參數SHARED_POOL_SIZE設定。

a)、庫緩衝區:存儲對數據庫進行操作的語句信息,包括執行計劃及運行數據庫的SQL語句的語法分析樹,所有用戶在第二次運行相同的SQL語句時,可以利用SQL共享池中可用的語法分析信息來加快執行速度;庫緩衝區通過最近最少使用(LRU,LeastRecentlyUsed)算法來管理可用空間,當SQL共享池填滿時,將從庫緩存區中刪掉最近最少使用的執行路徑和語法分析樹,以便爲新的條目騰出空間;如果SQL共享池太小,語句將被連續不斷地再裝入到庫緩存區,從而影響操作性能。

b)、數據字典緩衝區(Database Buffer Cache):數據庫對象的信息存儲在數據字典表中,這些信息包括用戶帳號數據、權限、數據文件名、段名、表結構及表說明等,當數據庫需要這些信息(如用戶對錶是否有讀寫權限)時,將讀取數據字典表且將返回的數據存儲在字典緩存區中。數據字典緩衝區使用最近最少使用(LRU,LeastRecentlyUsed)算法來管理,數據字典緩存區的大小由數據庫內部管理,如果字典緩存區太小,數據庫需要反覆查詢數據字典表以獲取訪問數據庫所需的信息,這些查詢由循環調用(recuesivecall)事件完成。

2)、數據庫緩衝區(Database Buffer Cache)

數據庫緩衝區由DB_CACHE_SIZE參數設定,Oracle使用最近最少使用(LRU,LeastRecentlyUsed)算法來管理數據庫緩衝區可用空間;當存儲區需要空閒空間時,最近最少使用塊將被移出,新數據塊將在存儲區代替它的位置,通過這種方法,將最頻繁使用的數據保存在存儲區中;如果SGA的大小不足以容納所有最常使用的數據,那麼,不同的對象將爭用數據庫緩存區中的空間;當多個應用程序共享同一個SGA時,很有可能發生這種情況。此時,每個應用的最近使用段都將與其他應用的最近使用段爭奪SGA中的空間,這樣,數據庫緩衝區的數據請求將出現較低的命中率,導致系統性能下降。

3)、重做日誌緩衝區(Redo Log Buffer Cache)
Redo log包含所有的數據庫變化歷史,數據庫的所有操作變化,均按照寫入重做日誌緩衝區先於數據塊緩衝區、寫入重做日誌文件先於寫入數據文件;當發生提交動作時,將重做日誌緩衝區變化刷到重做日誌文件。在被寫入聯機重做日誌文件之前,事務首先被記錄在稱作重做日誌緩衝區(Redo Log Buffer)的SGA中,數據庫可以週期地分批向聯機重做日誌文件中寫重做項的內容,從而優化這個操作。重做日誌緩衝區的大小(以字節爲單位)由LOG_BUFFER參數決定。

4)、大池(Large Pool)

大池屬於一個可選內存區,如果數據庫使用線程服務器選項或頻繁執行備份、恢復操作,只要創建一個大池,就可以更有效地管理這些操作。大池將致力於支持大型SQL命令,利用大池,就可以防止這些大型SQL命令爭用SQL共享池,從而減少再裝入到庫緩存區中的語句數量。大池的大小(以字節爲單位)由LARGE_POOL_SIZE參數設置,可以使用LARGE_POOL_MIN_ALLOC參數設置大池的最小分配,可以使用SHARED_POOL_RESERVED_SIZE參數爲SQL大型語句保留一部分SQL共享池。

5)、Java池(Java Pool)
Java池爲Java命令提供語法分析,Java池的大小(以字節爲單位)由JAVA_POOL_SIZE參數設置,缺省值爲10MB。

6)、多緩衝池
可以在SGA中創建多個緩衝池,能夠用多個緩衝池把大數據集與其他的應用程序分開,以減少數據庫緩存區內相同資源爭用;對於創建的每一個緩衝池,都要設定LRU鎖存器的大小和數量,緩衝區的數量必須至少比LRU鎖存器的數量多50倍。創建緩衝池時,需要設定保存區(KeepArea)的大小和再循環區(RecycleArea)的大小,與SQL共享池的保留區一樣,保存區保持條目,而再循環區則被頻繁地再循環使用。使用BUFFER_POOL_KEEP參數規定來保存區的大小。

2、後臺進程(Background Process)

數據庫實例由內存結構和後臺進程,應用與數據庫的所有操作和交互都由數據庫實例中完成,SGA可以理解爲交互平臺,後臺進程則可以理解爲SGA與數據庫交互的橋樑。PMON、SMON、DBWRn、LGWRn、CKPT進程爲必須的後臺進程,ARCHn、LCKn等爲可選後臺進程。

\

1)、PMON (Process Monitor,進程監控進程)

PMON用於在用戶進程出現故障時進行恢復,清除失效的用戶進程,負責清理內存區域和釋放該進程所使用的資源,如果會話不正常終止時,PMON負責Rollback未提交的事務,釋放資源;同時監控Oracle所有後臺進程(Background Process)。PMON有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。PMON進程要重置活動事務表的狀態,釋放鎖,將該故障的進程的ID從活動進程表中移去。PMON還週期地檢查調度進程(DISPATCHER)和服務器進程的狀態,如果已死,則重新啓動(不包括有意刪除的進程)。

2)、SMON(System Monitor Process,系統監控進程)

SMON進程在實例啓動時,如果有需要則執行實例恢復,在實例恢復過程中,如果由於文件讀取錯誤或所需文件處於脫機狀態而導致某些異常終止的事務未被恢復,SMON將在表空間或文件恢復聯機狀態後再次恢復這些事務。SMON還負責清理不再使用的臨時段(temporary segment)以及爲數據字典管理的表空間(dictionary managed tablespace)合併相鄰的可用數據擴展(extent)。在具有並行服務器選項的環境下(RAC),SMON對有故障CPU或實例進行實例恢復(Instance Recovery)。SMON進程有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。

3)、DBWn (database writer,數據庫寫入進程)

DBWn進程是負責緩衝存儲區管理的一個Oracle後臺進程,通過使用最近最少使用(LRU,LeastRecentlyUsed)算法來管理,保持內存中的數據塊是最近使用的,使I/O最小,將dirty buffer寫入到datafile中,維護數據緩衝區的清理,以使用戶進程總能找到足夠的空閒緩衝區。DBWn進程用於將數據緩衝的數據寫入數據文件,是負責數據緩衝區管理的一個Background Process,默認數量1個,最多10個,由參數爲db_writer_processes設置。DBWn進程在以下情況觸發:

a)、沒有空閒緩衝區(no free buffers)

b)、達到髒緩衝區閥值(dirty buffer threshold reached)

c)、檢查點(checkpoint)

d)、表空間offline(tablespace offline)

e)、超時,每次3秒(time out)

f)、drop/truncate表(drop table/truncate table)

4)、LGWR(Log writer,日誌寫入進程)

LGWR進程將日誌緩衝區寫入磁盤上的一個日誌文件,它是負責管理日誌緩衝區的一個Oracle後臺進程。LGWR進程同步地寫入到活動的鏡象在線日誌文件組。如果組中一個文件被刪除或不可用,LGWR可繼續地寫入該組的其它文件。日誌緩衝區是一個循環緩衝區,當LGWR將日誌緩衝區的日誌項寫入日誌文件後,服務器進程可將新的日誌項寫入到該日誌緩衝區。LGWR通常寫得很快,可確保日誌緩衝區總有空間可寫入新的日誌項。

Oracle使用快速提交機制,當用戶發出Commit語句時,一個Commit記錄立即放入日誌緩衝區,但相應的數據緩衝區改變是被延遲,直到在更有效時纔將它們寫入數據文件。當一事務提交時,被賦給一個系統修改號(SCN),它同事務日誌項一起記錄在日誌中。由於SCN記錄在日誌中,以致在並行服務器選項配置情況下,恢復操作可以同步。有時候當需要更多的日誌緩衝區時,LWGR在一個事務提交前就將日誌項寫出,而這些日誌項僅當在以後事務提交後才永久化。LGWR進程管理日誌緩衝區,將數據庫的更改寫入日誌文件,以便維護數據的一致性,併爲數據丟失後進行恢復提供依據。Oracle通過延遲寫日誌來優化disk I/O讀寫,以下4種情況之一Oracle會觸發LGWR進程寫日誌:

a)、當用戶進程提交一事務時寫入一個提交記錄。
b)、每三秒將日誌緩衝區輸出。
c)、當日志緩衝區的1/3已滿時將日誌緩衝區輸出。
d)、當DBWR將修改緩衝區寫入磁盤時則將日誌緩衝區輸出。

5)、CKPT(CheckPoint,檢查點進程)

CKPT進程負責通知DBWRn和LGWRn將髒緩衝區寫入磁盤,以及時消除因DBWRn/LGWRn延遲寫所造成的數據不一致情況,確保內存中的數據塊被規律地寫入文件,並對數據庫數據庫控制文件和數據文件進行更新同步(修改文件時間頭部),以記錄下當前的數據庫結構和狀態。檢查點(CheckPoint)的作用是及時保證進行延遲寫,防止數據庫出現不一致情況;及時同步各類數據文件,防止各類數據文件出現不一致情況。LGWR後臺進程是將log buffer中的數據寫到日誌文件的進程,是oracle相當重要的一個後臺進程,LGWR進程觸發的條件爲以下4種情況之一:

a)、每3秒鐘;也就是該進程最多休眠3秒鐘,休眠時觸發rdbms ipc message事件;LGWR將buffer中的數據寫到日誌文件時,觸發log file parallel write事件;

b)、在事務提交時(COMMIT),此時會觸發LGWR進程寫完後才返回提交成功,在等待LGWR進程寫的過程中將觸發log file sync事件;

c)、DBWn進程寫入數據文件之前;

d)、Redo log Buffer三分之一滿時,這個數字是有一個隱含參數_log_io_size控制,該值的默認值是log buffer大小的1/3;該值的最大值爲3MB,所以Redo log buffer多於1MB的變化記錄時也會觸發LGWR進程寫;

由於Oracle中LGWR和DBWR工作的不一致,Oracle引入了檢查點的概念,用於同步數據庫,保證數據庫的一致性。在Oracle裏面,檢查點分爲兩種:完全檢查點和增量檢查點。下面我們分別介紹這兩種檢查點的作用:

a)、完全檢查點

在Oracle8i之前,數據庫的發生的檢查點都是完全檢查點,完全檢查點會將數據緩衝區裏面所有的髒數據塊寫入相應的數據文件中,並且同步數據文件頭和控制文件,保證數據庫的一致。完全檢查點在8i之後只有在下列兩種情況下才會發生:

1)、DBA手工執行alter system checkpoint的命令;

2)、數據庫正常shutdown(immediate,transcational,normal)。

由於完全檢查點會將所有的髒數據庫塊寫入,巨大的IO往往會影響到數據庫的性能。因此Oracle從8i開始引入了增量檢查點的概念。

b)、 增量檢查點

Oracle從8i開始引入了檢查點隊列這麼一種概念,用於記錄數據庫裏面當前所有的髒數據塊的信息,DBWR根據這個隊列而將髒數據塊寫入到數據文件中。檢查點隊列按時間先後記錄着數據庫裏面髒數據塊的信息,裏面的條目包含RBA(Redo Block Address,重做日誌裏面用於標識檢查點期間數據塊在重做日誌裏面第一次發生更改的編號)和數據塊的數據文件號和塊號。在檢查點期間不論數據塊更改幾次,它在檢查點隊列裏面的位置始終保持不變,檢查點隊列也只會記錄它最早的RBA,從而保證最早更改的數據塊能夠儘快寫入。當DBWR將檢查點隊列裏面的髒數據塊寫入到數據文件後,檢查點的位置也要相應地往後移,CKPT每三秒會在控制文件中記錄檢查點的位置,以表示Instance Recovery時開始恢復的日誌條目,這個概念稱爲檢查點的“心跳”(heartbeat)。檢查點位置發生變更後,Oracle裏面通過4個參數用於控制檢查點位置和最後的重做日誌條目之間的距離。在這裏面需要指出的是,多數人會將這4個參數看作控制增量檢查點發生的時間。事實上這是錯誤的,這4個參數是用於控制檢查點隊列裏面的條目數量,而不是控制檢查點的發生。

6)、ARCH(archiver,歸檔進程)

ARCH進程用於管理歸檔日誌文件,當數據庫運行在archivelog模式下時,將循環使用的redo log文件組在被複寫覆蓋前進行歸檔備份到其他指定存儲設備,爲數據丟失後進行數據恢復。當Redo Log日誌切換時觸發ARCH進程進行日誌歸檔。

7)、RECO(Recovery,恢復進程)

RECO進程是在具有分佈式選項時所使用的一個進程,自動地解決在分佈式事務中的故障,維持在分佈式環境中的數據的一致性。主要工作,就是recover那些兩階段提交的但由於網絡或其它原因造成狀態爲prepared的掛起事務。一個結點RECO後臺進程自動地連接到包含有懸而未決的分佈式事務的其它數據庫中,RECO自動地解決所有的懸而不決的事務。任何相應於已處理的懸而不決的事務的行將從每一個數據庫的懸掛事務表中刪去。當某些節點反饋yes給事務協調器可以提交時,但事務協調器還未正式發出可以提交的最後指示時,由於網絡的原因,這些節點失去了和事務協調節點的聯繫,此時這些事務就成爲了一個in-doubt distributed transaction。此時,RECO就負責定期的聯繫事務協調器,當聯繫到時,就會提交或者回滾這些事務了。RECO後臺進程僅當在允許分佈式事務的系統,而且DISTRIBUTED_TRANSACTIONS參數是大於0時會用到該後臺進程。

8)、LCKn(lock,鎖進程)

LCKn進程是在具有並行服務器選件環境下使用,用於實例間的封鎖,可多至10個進程(LCK0,LCK1……,LCK9)。

9)、Dnnn(dispatcher,調度進程)

Dnnn進程允許用戶進程共享有限的服務器進程(SERVER PROCESS)。沒有調度進程時,每個用戶進程需要一個專用服務進程(DEDICATEDSERVER PROCESS)。對於多線索服務器(MULTI-THREADED SERVER)可支持多個用戶進程。如果在系統中具有大量用戶,多線索服務器可支持大量用戶,尤其在客戶_服務器環境中。在一個數據庫實例中可建立多個調度進程,對每種網絡協議至少建立一個調度進程,數據庫管理員根據操作系統中每個進程可連接數目的限制決定啓動的調度程序的最優數,在實例運行時可增加或刪除調度進程。如果不能將客戶應用連接到一調度進程時,網絡接收器進程將啓動一個專用服務器進程。該網絡接收器進程不是Oracle實例的組成部分,它是處理與Oracle有關的網絡進程的組成部分。在實例啓動時,該網絡接收器被打開,爲用戶連接到Oracle建立一通信路徑,然後每一個調度進程把連接請求的調度進程的地址給予它的接收器。當一個用戶進程作連接請求時,網絡接收器進程分析請求並決定該用戶是否可使用一調度進程。如果是,該網絡接收器進程返回該調度進程的地址,之後用戶進程直接連接到該調度進程。有些用戶進程不能調度進程通信(如果使用SQL*NET以前的版本的用戶),網絡接收器進程不能將此用戶連接到一調度進程。在這種情況下,網絡接收器建立一個專用服務器進程,建立一種合適的連接。

三、Oracle數據庫的物理結構

Oracle物理結構包含了數據文件、重做日誌文件、控制文件、參數文件、密碼文件、歸檔日誌文件、備份文件、告警日誌文件、跟蹤文件等等;其中數據文件、控制文件、重做日誌文件和參數文件是必須的,其他文件可選。

1、數據文件(Datafiles)

每一個Oracle數據庫有一個或多個物理的數據文件(data file),數據文件包含全部數據庫數據,邏輯數據庫結構(如表、索引、視圖、函數)的數據物理地存儲在數據庫的數據文件中。數據文件中的數據在需要時可以讀取並存儲在Oracle內存儲區中。如用戶要存取數據庫一表的某些數據,如果請求信息不在數據庫的內存存儲區內,則從相應的數據文件中讀取並存儲在內存,當修改或插入新數據時,爲了減少磁盤輸出的總數,提高性能,不必立刻寫入數據文件,數據存儲在內存,然後由Oracle後臺進程DBWRn決定如何將其寫入到相應的數據文件。數據文件有下列特徵:
a)、一個數據文件僅與一個數據庫聯繫;

b)、一個表空間(數據庫存儲的邏輯單位)由一個或多個數據文件組成。

2、日誌文件(Redo Log Files)

每一個數據庫實例有兩組或以上日誌文件組,爲了防止日誌文件本身的故障,每個日誌文件組可以有一個或以上日誌成員。日誌的主要功能是記錄對數據所作的修改,用於在出現故障時,如果不能將修改數據永久地寫入數據文件,則可利用日誌得到該修改,從而保證數據不丟失。日誌文件中的信息僅在系統故障或介質故障恢復數據庫時使用。任何丟失的數據在下一次數據庫打開時,Oracle自動地應用日誌文件中的信息來恢復數據庫數據文件。Oralce日誌文件有聯機日誌文件和歸檔日誌文件兩種,聯機日誌文件用來循環記錄數據庫改變的操作系統文件;歸檔日誌文件是爲避免聯機日誌文件重寫時丟失重複數據而對聯機日誌文件所做的備份;Oracle數據庫可以選擇歸檔(ARCHIVELOG)或非歸檔(NOARCHIVELOG)模式。

3、控制文件(Control files)

每一Oracle數據庫有一個控制文件(Control File)或同一個控制文件的多個拷貝,它記錄數據庫的物理結構信息,包括數據庫名、數據庫數據文件和日誌文件的名字和位置、數據庫建立日期等。由於控制文件記錄數據庫的物理結構信息,對數據庫運行至關重要,爲了安全起見,Oracle建議保存兩份以上的控制文件鏡像於不同的存儲設備。 當Oracle數據庫的實例啓動時,它的控制文件用於標識數據庫和日誌文件,當着手數據庫操作時它們必須被打開,當數據庫的物理組成更改時,Oracle自動更改該數據庫的控制文件;當然,在數據恢復時,自然會使用控制文件以確定數據庫物理文件的名字和位置。

4、參數文件(Parameter Files)

除了構成Oracle數據庫物理結構的三類主要文件外,參數文件也是Oracle數據庫較爲重要的一種文件結構。參數文件記錄了Oracle數據庫的基本參數信息,主要包括數據庫名、控制文件所在路徑、進程等。在Oracle9i之前,都只有pfile一種文本格式的參數文件,在9i之後,新增了服務器二進制參數文件spfile;通過修改pfile以修改數據庫參數,必須要求重啓數據庫後才能生效,通過修改spfile以修改數據庫參數時,根據參數類型分爲靜態參數需要重啓和動態參數無需重啓立即生效,可以通過查詢v$parameter視圖確定參數類型。由於多種參數文件類型的存在,而Oracle的正常運行只使用一種參數文件,Oracle啓動過程加載文件順序爲spfilesid.ora -> spfile.ora -> initsid.ora。

5.其他文件(Other Files)

Oracle數據的運行除了以上重要的必須文件以外,還有其他雖然非必須但一樣重要的文件結構,比如密碼文件、歸檔日誌文件、alter告警日誌文件、Trace跟蹤文件等等。

四、Oracle數據庫的邏輯結構

Oracle數據庫的邏輯結構是一種層次結構,主要由表空間、段、區和數據塊等概念組成。邏輯結構是面向用戶的,用戶使用Oracle開發應用程序使用的就是邏輯結構。數據庫存儲層次結構及其構成關係,結構對象也從數據塊到表空間形成了不同層次的粒度關係。

\

我們按照上圖的結構自上而下描述Oracle數據庫的邏輯結構。

1、表空間(Tablespace)

表空間是數據庫的邏輯劃分,任何數據庫邏輯對象在存儲時都必須存儲在某個表空間中;從上圖中我們可以知道每個表空間由多個段組成。表空間一般由一個或多個數據文件構成的,每個數據文件只能屬於某一個表空間,也就是說表空間和數據文件時1對N的關係;每個數據庫至少有一個表空間(system tablespace),表空間大小等於從屬於它的所有數據文件大小的總和;在Oracle 10g中初始創建的只有5個表空間system、temp、undotbs1、sysaux、users。

a、系統表空間(System Tablespace)

System表空間是每個Oracle數據庫都必須具備的,數據庫創建時自動創建,用於存儲數據庫系統對象、數據字典、存儲過程、觸發器和系統回滾段及數據庫管理所需的信息;系統表空間的名稱是不可更改,系統表空間必須在任何時候都可以用,也是數據庫運行的必要條件。因此,系統表空間是不能脫機的。爲避免系統表空間產生存儲碎片以及爭用系統資源的問題,建議創建獨立的用戶表空間用來單獨存儲用戶對象及數據。

b、臨時表空間(Temp Tablespace)

Temp表空間相對於其他表空間而言,臨時表空間主要用於存儲Oracle數據庫運行期間所產生的臨時數據,比如SQL排序等。數據庫可以建立多個臨時表空間。當數據庫關閉後,臨時表空間中所有數據將全部被清除。

c、回滾表空間(undo tablespace)

回滾表空間是Oracle特有的概念,用於保存Oracle數據庫變化前的記錄,在對數據庫中的記錄進行DML操作時,Oracle數據庫會將變化前的記錄副本保存到回滾表空間中,在rollback,實例恢復(前滾),一致性讀CR塊的構造時會使用到undo信息,同時保證事務讀一致性。在Oracle8i中是rollback tablespace,從Oracle9i開始改爲undo tablespace。其中temp是臨時表空間,undotbs1是undo回滾表空間。

d、SYSAUX表空間
SYSAUX表空間是隨着數據庫的創建而創建的,它充當SYSTEM的輔助表空間,主要存儲除數據字典以外的其他對象,如果啓用EM或Gird Control時,該表空間用於存放EM採集的監控信息。

e、USERS表空間

用戶表空間,在創建數據庫是自動創建的用戶表空間,一般用於維護賬戶使用的表空間,應用程序表空間一般另外根據應用需求創建。

2、段(Segment)

段是由多個數據區(Extent)構成的,它是爲特定的數據庫對象(如數據段、索引段、回滾段、臨時段)分配的一系列數據區;段內包含的數據區可以不連續,而且可以跨越多個數據文件,使用段的目的是用來保存特定對象。Oracle數據庫分爲數據段、索引段、回滾段和臨時段4種類型。
數據段:數據段也稱爲表段,它包含數據與表和簇相關,當創建一個表時,系統自動創建一個以該表的名字命名的數據段。
索引段:包含索引相關信息,創建索引時,系統自動創建一個以該索引的名字命名的索引段。
回滾段:包含了回滾信息,DML操作時,Oracle數據庫會將變化前的記錄副本保存到回滾段中,在rollback,實例恢復(前滾),一致性讀CR塊的構造時會使用到回滾段信息,同時用於保證事務讀一致性。創建數據庫時,Oracle會創建默認的回滾段,其管理方式既可以是自動的,也可以是手工的。
臨時段:它是Oracle在運行過程中自行創建的段,當一個SQL語句需要臨時工作區(比如排序)時,由Oracle創建臨時段,一旦語句執行完畢,臨時段會自動釋放。

3、數據區(Extent)

區是一組連續的數據塊,當一個表、回滾段或臨時段創建或需要附加空間時,系統總是爲之分配一個新的數據區。一個數據區不能跨越多個文件,因爲它包含連續的數據塊。使用區的目的是用來保存特定數據類型的數據,也是表中數據增長的基本單位,在Oracle數據庫中,分配空間就是以數據區爲單位的。一個Oracle對象包含至少一個數據區,設置一個表或索引的存儲參數包含設置它的數據區大小。

4、數據塊(Data Blocks)

數據塊是Oracle最小的存儲單位,Oracle數據存放在“塊”中,Oracle每次請求數據的時候,都是以塊爲單位,也就是說,Oracle每次請求的數據是塊的整數倍;如果Oracle請求的數據量不到一塊,Oracle也會讀取整個塊,“塊”是Oracle讀寫數據的最小單位或者最基本的單位。特別需要注意的是,這裏的“塊”是Oracle的“數據塊”,不是操作系統的“塊”。Oracle塊的標準大小由初始化參數DB_BLOCK_SIZE指定,默認標準塊大小爲8k。具有標準大小的塊稱爲標準塊(Standard Block),塊的大小和標準塊的大小不同的塊叫非標準塊(Nonstandard Block),同一個數據庫實例可以同時存在多種不同的塊大小,由初始化參數DB_BLOCK_SIZE指定一個標準塊大小。操作系統每次執行I/O的時候,是以操作系統的塊爲單位;Oracle每次執行I/O的時候,都是以Oracle的塊爲單位,Oracle數據塊大小一般是操作系統塊的整數倍。

發佈了4 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章