程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle基礎(九) Oracle的體系結構,oracle基礎體系結構

Oracle基礎(九) Oracle的體系結構,oracle基礎體系結構

編輯:Oracle教程

Oracle基礎(九) Oracle的體系結構,oracle基礎體系結構


一、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。 
       自由空間:這塊中能插入或修改的一組空間。
       行數據:存儲表或索引的數據。

 

  以上內容來源於網絡!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved