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資料塊大小一般是作業系統塊的整數倍。
Created by Tony.Tang[TangYun]2015.03
-------------End-----------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-1873605/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle體系結構Oracle
- 論軟體體系結構的演化
- ORACLE體系結構小結Oracle
- oracle體系結構總結Oracle
- Oracle體系結構之-物理結構Oracle
- Oracle體系結構之-記憶體結構Oracle記憶體
- oracle體系結構(轉)Oracle
- ORACLE-體系結構Oracle
- Oracle體系結構梳理Oracle
- Oracle 體系結構圖Oracle
- oracle體系結構(1)Oracle
- oracle體系結構(2)Oracle
- oracle體系結構(3)Oracle
- Oracle體系結構:記憶體結構和程式結構(轉)Oracle記憶體
- 3:Oracle體系結構(邏輯結構)Oracle
- Oracle記憶體體系結構Oracle記憶體
- 【Oracle體系結構】 Oracle19C 系統結構介紹Oracle
- Oracle記憶體結構研究-PGA篇Oracle記憶體
- Oracle記憶體結構研究-SGA篇Oracle記憶體
- oracle體系結構概覽Oracle
- Oracle 體系結構介紹Oracle
- Oracle體系結構之記憶體結構(SGA、PGA)Oracle記憶體
- Oracle體系結構部落格連結Oracle
- Oracle面試寶典-記憶體結構篇Oracle面試記憶體
- 設計模式總結(理論篇)設計模式
- Oracle OCP(37):Database 體系結構OracleDatabase
- Oracle 11g體系結構Oracle
- Oracle 12C 體系結構Oracle
- Oracle資料庫體系結構Oracle資料庫
- 【00】Oracle體系結構詳解Oracle
- Oracle RAC 體系結構--儲存Oracle
- Oracle 體系結構介紹(轉)Oracle
- Oracle 體系結構 SGA 和PGA 總結Oracle
- Oracle系列:Oracle RAC叢集體系結構Oracle
- Oracle體系結構之-Oracle後臺程式Oracle
- [ADMIN]oracle入門-oracle體系結構Oracle
- 【基礎篇記憶體結構】oracle10g記憶體結構(一)記憶體Oracle
- Oracle Data block 的物理結構-體系架構OracleBloC架構