標籤:
一、Oracle體繫結構概述:
Oracle的體繫結構是指資料庫的組成、工作過程與原理,以及資料在資料庫中的組織與管理機制。要瞭解Oracle資料庫的體繫結構,必須理解Oracle系統的重要概念和主要組件。
Oracle系統體繫結構由三部分組成:記憶體結構,進程結構,儲存結構。。如所示:
1、記憶體結構(SGA、PAG)
記憶體結構包括系統全域區(System Global Area,SGA)和程式全域區(Program Gloabl Area,PGA)。
2、進程結構(process)
進程結構包括前台進程和後台進程。前台進程是指服務進程和使用者進程。前台進程是根據實際需要而啟動並執行,並在需要結束後立刻結束。後台進程是指在Oracle資料庫啟動後,自動啟動的幾個作業系統進程。
3、儲存結構(Database)
Oracle的儲存結構主要包含邏輯結構和物理結構。物理結構指系統中的一組檔案。邏輯結構是一種階層。主要由:資料表空間、段、區和資料區塊等概念組成。
二、記憶體結構
記憶體結構是Oracle中最為重要的部分,記憶體也是影響資料庫效能的第一因素。
Oracle的記憶體儲存的主要內容如下:
1、程式碼(PL-SQL、Java)。
2、關於已經串連的會話的資訊,包括當前所有活動和非活動會話。
3、程式運行時必須的相關資訊,如查詢計劃。
4、Oracle進程之間共用的資訊和相互交流的資訊,如鎖。
5、哪些別永久儲存在外圍儲存介質上,被緩衝在記憶體中的資料。(如資料區塊)。
按照記憶體的使用方法不同,又將Oracle的記憶體分為系統全域區(SGA),程式全域區(PGA)
1、SGA:(System Global Area,SGA)所有使用者都可以訪問的執行個體共用記憶體地區。資料區塊、交易處理日誌、資料詞典資訊等都儲存在SGA中。
SGA是Oracle系統為執行個體分配的一組共用緩衝儲存區,用於存放資料庫資料和控制資訊,以實現對資料庫資料的管理和操作。
SGA主要包括:
1)資料緩衝區:
資料區塊緩衝區(datablockbuffercache)是SGA中的一個快取地區,用來儲存從資料庫中讀取資料區段的資料區塊(如表、索引和簇)。資料區塊緩衝區的大小由資料庫伺服器init.ora檔案中的DB_LOCK_BUFFERS參數決定(用資料庫塊的個數表示)。在調整和管理資料庫時,調整資料區塊緩衝區的大小是一個重要的部分。
因為資料區塊緩衝區的大小固定,並且其大小通常小於資料庫段所使用的空間,所以它不能一次裝載下記憶體中所有的資料庫段。通常,資料區塊緩衝區只是資料庫大小的1%~2%,Oracle使用最近最少使用(LRU,leastrecentlyused)演算法來管理可用空間。當儲存區需要自由空間時,最近最少使用塊將被移出,新資料區塊將在儲存區代替它的位置。通過這種方法,將最頻繁使用的資料儲存在儲存區中。
然而,如果SGA的大小不足以容納所有最常使用的資料,那麼,不同的對象將爭用資料區塊緩衝區中的空間。當多個應用程式共用同一個SGA時,很有可能發生這種情況。此時,每個應用的最近使用段都將與其他應用的最近使用段爭奪SGA中的空間。其結果是,對資料區塊緩衝區的資料請求將出現較低的命中率,導致系統效能下降。
2)字典緩衝區:
資料庫物件的資訊儲存在資料字典表中,這些資訊包括使用者帳號資料、資料檔案名、段名、盤區位置、表說明和許可權,當資料庫需要這些資訊(如檢查使用者查詢一個表的授權)時,將讀取資料字典表並且將返回的資料存放區在字典緩衝區的SGA中。
資料字典緩衝區通過最近最少使用(LRU)演算法來管理。字典緩衝區的大小由資料庫內部管理。字典緩衝區是SQL共用池的一部分,共用池的大小由資料庫檔案init.ora中的SHARED_POOL_SIZE參數來設定。
如果字典緩衝區太小,資料庫就不得不反覆查詢資料字典表以訪問資料庫所需的資訊,這些查詢稱為迴圈調用(recuesivecall),這時的查詢速度相對字典緩衝區獨立完成查詢時要低。
3)日誌緩衝區:
重做項描述對資料庫進行的修改。它們寫到聯機重做記錄檔中,以便在資料庫恢複過程中用於向前滾動操作。然而,在被寫入聯機重做記錄檔之前,事務首先被記錄在稱作重做日誌緩衝區(redologbuffer)的SGA中。資料庫可以周期地分批向聯機重做記錄檔中寫重做項的內容,從而最佳化這個操作。重做日誌緩衝區的大小(以位元組為單位)由init.ora檔案中的LOG_BUFFER參數決定。
4)共用池:
SQL共用池儲存資料字典緩衝區及庫緩衝區(librarycache),即對資料庫進行操作的語句資訊。當資料區塊緩衝區和字典緩衝區能夠共用資料庫使用者間的結構及資料資訊時,庫緩衝區允許共用常用的SQL語句。
SQL共用池包括執行計畫及運行資料庫的SQL語句的文法分析樹。在第二次運行(由任何使用者)相同的SQL語句時,可以利用SQL共用池中可用的文法分析資訊來加快執行速度。
SQL共用池通過LRU演算法來管理。當SQL共用池填滿時,將從庫緩衝區中刪掉最近最少使用的執行路徑和文法分析樹,以便為新的條目騰出空間。如果SQL共用池太小,語句將被連續不斷地再裝入到庫緩衝區,從而影響操作效能。
SQL共用池的大小(以位元組為單位)由init.ora檔案參數SHARED_POOL_SIZE決定。
5)大池:
大池(LargePool)是一個可選記憶體區。如果使用線程伺服器選項或頻繁執行備份/恢複操作,只要建立一個大池,就可以更有效地管理這些操作。大池將致力於支援SQL大型命令。利用大池,就可以防止這些SQL大型命令把條目重寫入SQL共用池中,從而減少再裝入到庫緩衝區中的語句數量。大池的大小(以位元組為單位)通過init.ora檔案的LARGE_POOL_SIZE參數設定,使用者可以使用init.ora檔案的LARGE_POOL_MIN_ALLOC參數設定大池中的最小位置。Oracle8i已不用這個參數。作為使用LargePool的一種選擇方案,可以用init.ora檔案的SHARED_POOL_RESERVED_SIZE參數為SQL大型語句保留一部分SQL共用池。
6)Java池:
由其名字可知,Java池為Java命令提供文法分析。Java池的大小(以位元組為單位)通過在Oracle8i引入的init.ora檔案的JAVA_POOL_SIZE參數設定。init.ora檔案的JAVA_POOL_SIZE參數預設設定為10MB。
7)多緩衝池:
可以在SGA中建立多個緩衝池,能夠用多個緩衝池把大資料集與其他的應用程式分開,以減少它們爭奪資料區塊緩衝區內相同資源的可能性。對於建立的每一個緩衝池,都要規定其LRU鎖存器的大小和數量。緩衝區的數量必須至少比LRU鎖存器的數量多50倍。
建立緩衝池時,需要規定儲存區(keeparea)的大小和再迴圈區(recyclearea)的大小。與SQL共用池的保留區一樣,儲存區保持條目,而再迴圈區則被頻繁地再迴圈使用。可以通過BUFFER_POOL_KEEP參數規定來儲存區的大小。例如: 儲存和再迴圈緩衝池的容量減少了資料區塊緩衝儲存區中的可用空間(通過DB_BLOCK_BUFFERS參數設定)。對於使用一個新緩衝池的表,通過表的storage子句中的buffer_pool參數來規定緩衝池的名字。例如,如果需要從記憶體中快速刪除一個表,就把它賦予RECYCLE池。預設池叫作DEFAULT,這樣就能在以後用altertable命令把一個錶轉移到DEFAULT池。
2、PGA:(Program Gloabl Area,PGA)一類沒有共用的記憶體、專用於特定的伺服器處理序,並且只能由這個進程訪問。
PGA包含單個伺服器處理序或單個後台進程所需的資料和控制資訊。PGA是在使用者進程串連到資料庫並建立一個會話時自動分配的,該區內保留每個與Oracle資料庫連接的使用者進程所需的記憶體。PGA為非共用區,只能單個進程使用,但一個使用者會話結束後,PGA釋放。
注意:PGA和SGA的區別:
1、PGA與SGA類似,都是Oracle資料庫系統為會話在伺服器記憶體中分配的地區。兩者的作用不同,共用程度也不同。
2、SGA系統全域區是對系統內的所有進程都是共用的。PGA程式全域區主要是為了某個使用者進程所服務的。
3、UGA:(User Global Area,UGA)這個記憶體地區會為使用者進程儲存工作階段狀態。根據使用者資料庫是配置為專用伺服器模式還是共用伺服器模式,UGA可以作為SGA或者PGA的一部分。它為使用者會話儲存資料。
三、進程結構
在Oracle執行個體中,進程分為兩類:使用者進程和Oracle進程。Oracle進程又分為兩類:伺服器處理序和後台進程。下面分別來介紹這3種進程。
1、使用者進程
使用者進程在資料庫使用者請求串連Oracle伺服器時啟動。當一個使用者運行一個應用程式,Oracle為使用者建立一個使用者進程。
2、伺服器處理序
伺服器處理序用於處理串連到該執行個體的使用者進程的請求。客戶向資料庫發送的SQL語句最後都要由該進程接收並執行。伺服器處理序可以僅處理一個使用者進程的請求,也可以處理多個使用者進程的請求,所以分為專用伺服器和共用伺服器。
listener.ora檔案,代碼server=dedicated,含義就是設定為專用伺服器。
它可以執行下列任務:
1)對應用鎖發出的SQL語句進行文法分析和執行。
2)從磁碟(資料檔案)中讀入必要的資料區塊到SGA的共用資料庫緩衝區(該快不在緩衝區時)。
3)將結果返回給應用程式處理。
3、後台進程
後台進程隨資料庫而啟動,用於完成各種維護任務,如將快寫入磁碟,維護線上重做日誌、清理異常中止的進程等。一個Oracle執行個體可以用許多後台進程,但他們不是一直存在。
後台進程包括:
1)PMON進程監控進程
該進程在使用者進程出現故障時執行進程恢複,負責清理記憶體儲區和釋放該進程所使用的資源。例:它要重設活動事務表的狀態,釋放封鎖,將該故障的進程的ID從活動進程表中移去。PMON還周期地檢查調度進程(DISPATCHER)和伺服器處理序的狀態,如果已死,則重新啟動(不包括有意刪除的進程)。
PMON有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。
2)SMON系統監控進程
該進程執行個體啟動時,執行執行個體恢複,還負責清理不再使用的臨時段。在具有並行伺服器選項的環境下,SMON對有故障CPU或執行個體進行執行個體恢複。SMON進程有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。
3)DBWR資料庫寫入進程
該進程執行將緩衝區寫入資料檔案,是負責緩衝儲存區管理的一個Oracle後台進程。當緩衝區中的一緩衝區被修改,它被標誌為“弄髒”,DBWR的主要任務是將“弄髒”的緩衝區寫入磁碟,使緩衝區保持“乾淨”。由於緩衝儲存區的緩衝區填入資料庫或被使用者進程弄髒,未用的緩衝區的數目減少。當未用的緩衝區下降到很少,以致使用者進程要從磁碟讀入塊到記憶體儲存區時無法找到未用的緩衝區時,DBWR將管理緩衝儲存區,使使用者進程總可得到未用的緩衝區。
Oracle採用LRU(LEAST RECENTLY USED)演算法(最近最少使用演算法)保持記憶體中的資料區塊是最近使用的,使I/O最小。在下列情況預示DBWR 要將弄髒的緩衝區寫入磁碟:
當一個伺服器處理序將一緩衝區移入“弄髒”表,該弄髒表達到臨界長度時,該服務進程將通知DBWR進行寫。該臨界長度是為參數DB-BLOCK-WRITE-BATCH的值的一半。
當一個伺服器處理序在LRU表中尋找DB-BLOCK-MAX-SCAN-CNT緩衝區時,沒有查到未用的緩衝區,它停止尋找並通知DBWR進行寫。出現逾時(每次3秒),DBWR 將通知本身。當出現檢查點時,LGWR將通知DBWR.在前兩種情況下,DBWR將弄髒表中的塊寫入磁碟,每次可寫的塊數由初始化參數DB-BLOCK- WRITE-BATCH所指定。如果弄髒表中沒有該參數指定塊數的緩衝區,DBWR從LUR表中尋找另外一個弄髒緩衝區。
如果DBWR在三秒內未活動,則出現逾時。在這種情況下DBWR對LRU表尋找指定數目的緩衝區,將所找到任何弄髒緩衝區寫入磁碟。每當出現逾時,DBWR尋找一個新的緩衝區組。每次由DBWR尋找的緩衝區的數目是為寢化參數DB-BLOCK- WRITE-BATCH的值的二倍。如果資料庫空運轉,DBWR最終將全部緩衝區儲存區寫入磁碟。
在出現檢查點時,LGWR指定一修改緩衝區表必須寫入到磁碟。DBWR將指定的緩衝區寫入磁碟。
在有些平台上,一個執行個體可有多個DBWR.在這樣的執行個體中,一些塊可寫入一磁碟,另一些塊可寫入其它磁碟。參數DB-WRITERS控制DBWR進程個數。
4)LGWR日誌寫入進程
該進程將日誌緩衝區寫入磁碟上的一個記錄檔,它是負責管理日誌緩衝區的一個Oracle後台進程。LGWR進程將自上次寫入磁碟以來的全部日誌項輸出,LGWR輸出:
◆當使用者進程提交一事務時寫入一個提交記錄。
◆每三秒將日誌緩衝區輸出。
◆當日誌緩衝區的1/3已滿時將日誌緩衝區輸出。
◆當DBWR將修改緩衝區寫入磁碟時則將日誌緩衝區輸出。
LGWR進程同步地寫入到活動的鏡象線上記錄檔組。如果組中一個檔案被刪除或不可用,LGWR可繼續地寫入該組的其它檔案。
日誌緩衝區是一個迴圈緩衝區。當LGWR將日誌緩衝區的日誌項寫入記錄檔後,伺服器處理序可將新的日誌項寫入到該日誌緩衝區。LGWR 通常寫得很快,可確保日誌緩衝區總有空間可寫入新的日誌項。
注意:有時候當需要更多的日誌緩衝區時,LWGR在一個事務提交前就將日誌項寫出,而這些日誌項僅當在以後事務提交後才永久化。
ORACLE使用快速提交機制,當使用者發出COMMIT語句時,一個COMMIT記錄立即放入日誌緩衝區,但相應的資料緩衝區改變是被延遲,直到在更有效時才將它們寫入資料檔案。當一事務提交時,被賦給一個系統修改號(SCN),它同交易記錄項一起記錄在日誌中。由於SCN記錄在日誌中,以致在並行伺服器選項配置情況下,恢複操作可以同步。
5)ARCH歸檔進程。
該進程將已填滿的線上記錄檔拷貝到指定的存放裝置。當日誌是為ARCHIVELOG使用方式、並可自動地歸檔時ARCH進程才存在。
6)CKPT檢查點。
該進程在檢查點出現時,對全部資料檔案的標題進行修改,指示該檢查點。在通常的情況下,該任務由LGWR執行。然而,如果檢查點明顯地降低系統效能時,可使CKPT進程運行,將原來由LGWR進程執行的檢查點的工作分離出來,由CKPT進程實現。對於許多應用情況,CKPT進程是不必要的。只有當資料庫有許多資料檔案,LGWR在檢查點時明顯地降低效能才使CKPT運行。 CKPT進程不將塊寫入磁碟,該工作是由DBWR完成的。初始化參數CHECKPOINT-PROCESS控制CKPT進程的使能或使不能。預設時為FALSE,即為使不能。
由於Oracle中LGWR和DBWR工作的不一致,Oracle引入了檢查點的概念,用於同步資料庫,保證資料庫的一致性。在Oracle裡面,檢查點分為兩種:完全檢查點和增量檢查點。下面我們分別介紹這兩種檢查點的作用:
1、完全檢查點
在Oracle8i之前,資料庫的發生的檢查點都是完全檢查點,完全檢查點會將資料緩衝區裡面所有的髒資料區塊寫入相應的資料檔案中,並且同步資料檔案頭和控制檔案,保證資料庫的一致。完全檢查點在8i之後只有在下列兩種情況下才會發生:
(1)DBA手工執行alter system checkpoint的命令;
(2)資料庫正常shutdown(immediate,transcational,normal)。
由於完全檢查點會將所有的髒資料庫塊寫入,巨大的IO往往會影響到資料庫的效能。因此Oracle從8i開始引入了增量檢查點的概念。
2、 增量檢查點
Oracle從8i開始引入了檢查點隊列這麼一種概念,用於記錄資料庫裡面當前所有的髒資料區塊的資訊,DBWR根據這個隊列而將髒資料區塊寫入到資料檔案中。檢查點隊列按時間先後記錄著資料庫裡面髒資料區塊的資訊,裡面的條目包含RBA(Redo Block Address,重做日誌裡面用於標識檢查點期間資料區塊在重做日誌裡面第一次發生更改的編號)和資料區塊的資料檔案號和塊號。在檢查點期間不論資料區塊更改幾次,它在檢查點隊列裡面的位置始終保持不變,檢查點隊列也只會記錄它最早的RBA,從而保證最早更改的資料區塊能夠儘快寫入。當DBWR將檢查點隊列裡面的髒資料區塊寫入到資料檔案後,檢查點的位置也要相應地往後移,CKPT每三秒會在控制檔案中記錄檢查點的位置,以表示Instance Recovery時開始恢複的日誌條目,這個概念稱為檢查點的“心跳”(heartbeat)。檢查點位置發生變更後,Oracle裡面通過4個參數用於控制檢查點位置和最後的重做日誌條目之間的距離。在這裡面需要指出的是,多數人會將這4個參數看作控制增量檢查點發生的時間。事實上這是錯誤的,這4個參數是用於控制檢查點隊列裡面的條目數量,而不是控制檢查點的發生。
(1)fast_start_io_target
該參數用於表示資料庫發生Instance Recovery的時候需要產生的IO總數,它通過v$filestat的AVGIOTIM來估算的。比如我們一個資料庫在發生Instance Crash後需要在10分鐘內恢複完畢,假定OS的IO每秒為500個,那麼這個資料庫發生Instance Recovery的時候大概將產生500*10*60=30,000次IO,也就是我們將可以把fast_start_io_target設定為30000。
(2)fast_start_mttr_target
我們從上面可以看到fast_start_io_target來估算檢查點位置比較麻煩。Oracle為了簡化這個概念,從9i開始引入了fast_start_mttr_target這麼一個參數,用於表示資料庫發生Instance Recovery的時間,以秒為單位。這個參數我們從字面上也比較好理解,其中的mttr是mean time to recovery的簡寫,如上例中的情況我們可以將fast_start_mttr_target設定為600。當設定了fast_start_mttr_target後,fast_start_io_target這個參數將不再生效,從9i後fast_start_io_target這個參數被Oracle廢除了。
(3)log_checkpoint_timeout
該參數用於表示檢查點位置和重做記錄檔末尾之間的時間間隔,以秒為單位,預設情況下是1800秒。
(4)log_checkpoint_interval
該參數是表示檢查點位置和重做日誌末尾的重做日誌塊的數量,以OS塊表示。
(5)90% OF SMALLEST REDO LOG
除了以上4個初始化參數外,Oracle內部事實上還將重做記錄檔末尾前面90%的位置設為檢查點位置。在每個重做日誌中,這麼幾個參數指定的位置可能不盡相同,Oracle將離記錄檔末尾最近的那個位置確認為檢查點位置。
7)RECO恢複進程。
該進程是在具有分布式選項時所使用的一個進程,自動地解決在分散式交易中的故障。一個結點RECO後台進程自動地串連到包含有懸而未決的分散式交易的其它資料庫中,RECO自動地解決所有的懸而不決的事務。任何相應於已處理的懸而不決的事務的行將從每一個資料庫的懸掛事務表中刪去。
當一資料庫伺服器的RECO後台進程試圖建立同一遠程伺服器的通訊,如果遠程伺服器是不可用或者網路連接不能建立時,RECO自動地在一個時間間隔之後再次串連。
RECO後台進程僅當在允許分散式交易的系統中出現,而且DISTRIBUTED C TRANSACTIONS參數是大於0。
8)LCKn進程:是在具有並行伺服器選件環境下使用,可多至10個進程(LCK0,LCK1……,LCK9),用於執行個體間的封鎖。
9)Dnnn進程(調度進程):
該進程允許使用者進程共用有限的伺服器處理序(SERVER PROCESS)。沒有調度進程時,每個使用者進程需要一個專用服務進程(DEDICATEDSERVER PROCESS)。對於多線索伺服器(MULTI-THREADED SERVER)可支援多個使用者進程。如果在系統中具有大量使用者,多線索伺服器可支援大量使用者,尤其在客戶_伺服器環境中。
在一個資料庫執行個體中可建立多個調度進程。對每種網路通訊協定至少建立一個調度進程。資料庫管理員根據作業系統中每個進程可串連數目的限制決定啟動的發送器的最優數,在執行個體運行時可增加或刪除調度進程。多線索伺服器需要SQL*NET版本2或更後的版本。在多線索伺服器的配置下,一個網路接收器進程等待客戶應用串連請求,並將每一個發送到一個調度進程。如果不能將客戶應用串連到一調度進程時,網路接收器進程將啟動一個專用伺服器處理序。該網路接收器進程不是Oracle執行個體的組成部分,它是處理與Oracle有關的網路進程的組成部分。在執行個體啟動時,該網路接收器被開啟,為使用者串連到Oracle建立一通訊路徑,然後每一個調度進程把串連請求的調度進程的地址給予它的接收器。當一個使用者進程作串連請求時,網路接收器進程分析請求並決定該使用者是否可使用一調度進程。如果是,該網路接收器進程返回該調度進程的地址,之後使用者進程直接連接到該調度進程。有些使用者進程不能調度進程通訊(如果使用SQL*NET以前的版本的使用者),網路接收器進程不能將此使用者串連到一調度進程。在這種情況下,網路接收器建立一個專用伺服器處理序,建立一種合適的串連。
四、儲存結構
Oracle資料庫的儲存結構分為邏輯儲存結構和實體儲存體結構.
1、實體儲存體結構
實體儲存體結構主要描述Oracle資料庫的外部儲存結構,即在作業系統種如何組織、管理資料.
從物理上看,資料庫由控制檔案、資料檔案、重做記錄檔和參數檔案等作業系統檔案組成
因此,實體儲存體結構是和作業系統平台有關的。
1)資料檔案(Data File):
是實體儲存體Oracle資料庫資料的檔案。每一個資料檔案只與一個資料庫相聯絡。 資料檔案一旦被建立則不能修改其大小。一個資料表空間可包含一個或多個資料檔案。一個資料檔案只能屬於一個資料表空間.
2)重做記錄檔(Redo Log File)
記錄所有對資料庫資料的修改,以備恢複資料時使用。其特點如下:每一個資料庫至少包含兩個記錄檔組。 記錄檔組以迴圈方式進行寫操作。每一個記錄檔成員對應一個物理檔案。
日誌開關(Log Switch)是為實現記錄檔組的迴圈使用而設定的。出現日誌開關的情況如下:當一個記錄檔組被填滿時;關閉資料庫時; DBA手動轉移日誌開關;
鏡像記錄檔是為防止記錄檔的丟失,在不同磁碟上同時維護兩個或多個聯機記錄檔的副本。
其特點如下: 每個記錄檔組至少包含兩個記錄檔成員。每組的成員數目相同。同組的所有成員同時被修改。同組的成員大小相同,不同組的成員大小可不同。
3)控制檔案(Control File)
是一個較小的二進位檔案,用於描述資料庫結構。將資料庫的物理檔案對應到資料字典中的邏輯表格空間和聯機重做記錄檔。
4)參數檔案(Parameter File)
是一個文字檔,可直接使用作業系統下的文字編輯器對其內容進行修改。該檔案只在建立資料庫或啟動執行個體時才被訪問,在修改該檔案之前必須關閉執行個體。
2、邏輯結構
邏輯儲存結構主要描述Oracle資料庫的內部儲存結構,即從技術概念上描述在Oracle資料庫種如何組織、管理資料。
資料表空間是最大的邏輯單位,塊是最小的邏輯單位。因此,邏輯儲存結構是和作業系統平台無關的,是由Oracle資料庫建立和管理的。
1)資料表空間
資料表空間(tablespace)是最大的邏輯單位,對應一個或多個資料檔案,資料表空間的大小是它所對應的資料檔案大小的總和。
Oracle 10g自動建立的資料表空間有:
Example(執行個體資料表空間):樣本資料表空間。
Sysaux(輔助系統資料表空間):輔助系統資料表空間,用於減少系統負荷,提高系統的作業效率
System(系統資料表空間):系統資料表空間,存放關於資料表空間的名稱、控制檔案、資料檔案等管理資訊,是最重要的資料表空間.它屬於Sys、System兩個schema(方案),僅被這兩個或其他具有足夠許可權的使用者使用。但是均不可刪除或者重新命名System資料表空間。
Temp(暫存資料表空間):暫存資料表空間存放暫存資料表和臨時資料,用於排序。
Undotbs(撤銷資料表空間):當我們隊資料庫表資料進行增加、修改、刪除時,Oracle系統自動使用撤銷資料表空間來臨時存放修改前的資料。
Users(使用者的資料表空間): 使用者資料表空間,永久存放使用者物件和私人資訊,也被成為資料資料表空間。
一般地:系統使用者使用system資料表空間,非系統使用者使用Users資料表空間
2)段
段(Segment)是資料表空間中一個指定類型的邏輯儲存結構,它由一個或多個區組成,段將佔用並增長儲存空間。
引導段(Bootstrap Segment) : 儲存資料字典表的定義
臨時段(Temporary Segment): 儲存表排序操作期間簡曆的暫存資料表的資料
復原段(Rollback Segment) : 儲存修改之前的位置和值
索引段(Index Segment) : 儲存表上最佳查詢的所有索引資料
資料區段(Date Segment) : 儲存表中所有資料
3)區
區(Extent)是資料庫儲存空間分配的邏輯單位,一個區由一組資料庫塊組成,區是由段分配的,分配的第一個區稱初始區,以後分配的區稱增量區。
4)資料區塊
資料庫塊(Database Block)是資料庫使用的I/O最小單元,又稱邏輯塊或ORACLE塊。一個資料庫塊對應一個或多個物理塊,塊的大小由參數DB_BLOCK_SIZE確定。
塊的大小是作業系統塊大小的整數倍.
以Win2K為例,作業系統塊(OS block)的大小為4kb,所以Oracle Block的大小可以是4kb,8kb,16kb等等。
如果塊的大小為4kb,某表每行的資料是100 bytes.,如果某查詢語句只返回1行資料,那麼,在將資料讀入到資料快取時,讀取的資料量時4kb而不是100 bytes.
資料區塊由一下五部分組成
標題:包括通用的塊資訊,如塊地址/段類型等,最佳大小為85-100bytes。
表目錄:儲存聚集中表的資訊,這些資訊用於聚集段。
行目錄:包括這塊中的有效行資訊,允許使用每行開頭的2bytes。
自由空間:這塊中能插入或修改的一組空間。
行資料:儲存表或索引的資料。
以上內容來源於網路!
Oracle基礎 Oracle的體繫結構