oracle 表空間、段、資料擴充和資料塊——來自網路

ForTechnology發表於2011-08-04
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 oracle之邏輯資料庫結構概述(表空間、段、資料擴充和資料塊收藏

oracle之邏輯資料庫結構概述

 

資料庫空間的分配單位有資料塊Data Block),資料擴充套件(Extent),和段(Segment

具體概念可以看:http://hi.baidu.com/feixianxxx/blog/item/8d5429028d05dc091d95838a.html

我這裡寫幾個注意點

1.塊是n塊作業系統塊。是連續的。資料擴充套件因為是連續的一組資料塊,所以也是連續的,是位於一個資料檔案裡。段的擴充是以資料擴充套件為單位的,但是因為資料擴充套件是隨需分配的,所以段不可能是連續的,不一定位於一個資料檔案裡,但是位於一個表空間

 

2.Oracle每次獲取資料時,總是訪問整數個(Oracle資料塊,而不是按照作業系統塊的容量訪問資料。所以合理的控制資料塊大小對磁碟I/O有很大影響。

3.注意行連結和行遷移:前者當一行資料被插入時一個資料塊就無法容納。在這種情況下Oracle將這行資料儲存在段內的一個資料塊鏈(chain)中。在插入資料量大的行時常會發生行連結(row chaining)。後者原本儲存在一個資料塊data block)內的資料行,因為更新操作導致長度增長,而所在資料塊的可用空間也不能容納增長後的資料行。在這種情況下,Oracle將此行資料遷移(migrate)到新的資料塊中。Oracle在被遷移資料行原來所在位置儲存一個指向新資料塊的指標。被遷移資料行的 rowid 保持不變。

4.在新分配的資料塊中(data block,可用於插入(insert)資料的空間等於資料塊總容量減去資料塊頭(block overhead)再減去預留可用空間(PCTFREE)。而更新(update資料塊內已有資料可使用資料塊中的所有可用空 間。

5.對於使用本地管理的表空間,其中所分配的資料擴充套件(extent)的容量既可以是使用者設定的固定值,也可以是由系統自動決定的可變值。 對於固定容量(UNIFORM)的資料擴充套件,使用者可以為資料擴充套件設定容量或使用預設大小(1 MB)。使用者須確保每個資料擴充套件的容量至少能包含5資料塊database block)。本地管理(locally managed)的臨時表空間(temporary tablespace)在分配資料擴充套件時只能使用此種方式。對於由系統管理(AUTOALLOCATE)的資料擴充套件,由Oracle決定新增資料擴充套件的最佳容量,其最小容量為 64 KB。對於永久表空間(permanent tablespace)上述引數均為預設值。

6.資料擴充套件如何被分配:首先選擇一個屬於此表空間的資料檔案(datafile),再搜尋此資料檔案的點陣圖(bitmap)查詢連續的資料塊free block)。如果此資料塊中沒有足夠的連續可用空間,Oracle將查詢其他資料檔案。

7.只要使用者沒有移除(drop)或清空(truncate)表(nonclustered table)或索引,那麼對應資料段(data segment)內的任何資料塊data block)都不會被回收。當然可以重用。

 為什麼我刪除了一個表的資料但是它空間沒釋放呢?參看oracle的高水位線http://tylgl.**.com/blog/319585

8.涉及到臨時段的操作

CREATE INDEX

SELECT ... ORDER BY  

SELECT DISTINCT ...

SELECT ... GROUP BY

SELECT . . . UNION  

SELECT ... INTERSECT  

SELECT ... MINUS

9.Oracle為查詢(query)與臨時表(temporary table)分配臨時段(temporary segment)的過程是不同的。

 為查詢分配臨時段:Oracle可以在使用者的臨時表空間(temporary tablespace)內為使用者建立臨時段(temporary segment)。在語句結束時Oracle負責移除(drop)臨時段.為臨時表及臨時索引分配臨時段:當首個 INSERT 執行時,Oracle為臨時表及其索引分配臨時段,建立索引的root page,同時建立所有的 LOB 段(LOB segment)。當事務或會話結束時,Oracle負責移除屬於此事務或會話的臨   時表使用的段。

10.對於段的管理,涉及一個自動撤銷管理。

        作用:

        回滾(rollback)一個活動的事務 

恢復(recover)一個已結束的事務 

實現讀完整性(read consistency 

恢復語句的邏輯錯誤(logical corruptions 

oracle推薦使用自動撤銷管理(automatic undo management)模式,但有一個需要注意的問題:一個存在問題的事務(ill-behaved transaction)有可能消耗大量撤銷空間(undo space),甚至導致整個系統癱瘓。解決    方法;在資源管理器(Resource Manager)中可以設定 UNDO_POOL 引數,從而以更直接的方式控制大事務(large transaction)的管理。動撤銷資訊儲存週期管理對閃回操作很有深淵意義。

我們再來了解下表空間,它與資料庫物理檔案緊密相連,也是最重要的邏輯結構。

表空間是一個容器,其中包含有段。每個段都只屬於一個表空間。一個表空間中可能有多個段。

表空間本身可以有一個或多個相關的資料檔案。表空間中給定段的一個區段完全包含在一個資料檔案中。不過,段可以有來自多個不同資料檔案的區段。

資料庫(database),表空間(tablespace),及資料檔案(datafile)關係密切,但是她們又具有以下重要區別: 

1.一個Oracle資料庫是由一個或多個被稱為表空間(tablespace)的邏輯儲存單位構成的,這些表空間共同用於儲存資料庫的資料 

2.Oracle資料庫的每個表空間由一個或多個被稱為資料檔案(datafile)的物理檔案構成,這些檔案由Oracle所在的作業系統管理。 

3.資料庫的資料實際儲存在構成各個表空間的資料檔案中。

關於更多表空間的內容,可以參看:http://hi.baidu.com/feixianxxx/blog/item/8d5429028d05dc091d95838a.html

提幾個表空間的點:

1.只有本地管理的(locally managed),且段空間自動管理(automatic segment-space management)的表空間(tablespace)才能使用大檔案表空間(bigfile tablespace)。

但是有兩個例外:本地管理的撤銷表空間(undo tablespace)和臨時表空間(temporary tablespace),即使其段(segment)為手工管理(manually managed),也可以使用大檔案表空間。

2.使用大檔案表空間的幾個優勢:

a.顯著地增強Oracle資料庫的儲存能力。使用大檔案表空間時資料庫中表空間的極限個數是使用小檔案表空間時的1024,當一個Oracle資料庫使用大檔案表空間,且使用最大的資料塊容量時(32K),其總容量可以達到8EB 

b.在超大型資料庫中使用大檔案表空間減少了資料檔案的數量,因此也簡化了對資料檔案的管理工作.

c.由於資料檔案對使用者透明,由此簡化了資料庫管理工作。

3.不建議在不支援大檔案的平臺上使用大檔案表空間,這會限制表空間(tablespace)的容量。如果使用大檔案表空間替代傳統的表空間,資料庫開啟(open),checkpoints,以及 DBWR 程式的效能會得到提高。但是增大資料檔案(datafile)容量可能會增加備份與恢復的時間。 

4.如果資料庫中的 SYSTEM 表空間(tablespace)為本地管理的(locally managed),那麼此資料庫中就不能建立資料字典管理的(dictionary managed)表空間。

 

5.在自動撤銷管理模式(automatic undo management mode)下,每個Oracle例項(instance)有(且僅有)一個撤銷表空間。

 

6.使用者可以利用多個表空間(multiple tablespace)完成以下任務: 

控制資料庫內的磁碟空間分配 

為資料庫使用者設定空間使用配額(quota 

通過將某個表空間置於聯機/離線(online/offline)狀態來控制資料的可訪問性(availability 

執行對資料庫的某部分的備份與恢復 

使資料儲存可以跨多個裝置,提升系統效能 

7.本地管理的表空間與資料字典管理的表空間相比有如下優勢:

a.易於查詢連續的可用空間[此處指資料塊],避免了資料擴充套件合併(coalesce free extents)。 

b.能夠避免產生遞迴(recursive)的空間管理操作。

8.使用者只能將一個表空間聯機到建立她的資料庫中,因為只有這個資料庫的 SYSTEM 表空間中才儲存著與此表空間相關的必要的資料字典資訊。一個離線(offline)的表空間不能被Oracle之外的工具開啟或編輯。因此離線表空間不能被移動到其他資料庫中。

9.一個 SQL 語句可以同時使用多個臨時表空間(temporary tablespace)進行排序。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-704150/,如需轉載,請註明出處,否則將追究法律責任。

相關文章