一、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)
用于啟動執行個體時候的配置資料庫。參數檔案主要分為兩種:
一種是當建立資料庫的時候,使用者就可以運作初始化檔案(也就是一種參數檔案),規定資料庫中所使用的各種設定值。文本參數檔案的字尾名是init<SID>.ora。
另一種是伺服器參數檔案,伺服器參數檔案的字尾名是SPFILE<SID>.ora,它可以管理資料庫的參數和值。
5)臨時檔案(Temporay File)
Oracle中臨時檔案(Temporay 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。
自由空間:這塊中能插入或修改的一組空間。
行資料:存儲表或索引的資料。
以上内容來源于網絡!
轉載于:https://www.cnblogs.com/zhengcheng/p/4179269.html