基礎知識5——表空間和資料檔案

與刃爭鋒發表於2014-01-07
表空間和資料檔案
邏輯上資料儲存在段(一般是表)中,物理上講,資料儲存在資料檔案(datafile)中.
表空間是二者的抽象,一個表空間可能包含多個段,並由多個資料檔案組成,段和資料檔案沒有直接關係.資料檔案可以作為檔案系統中的檔案存在,10g開始也可以作為自動儲存管理(automatic storage management ASM)裝置上的檔案而存在.

虛線表示段和資料檔案的多對多關係,應避免這種情況存在.

典型的段是表一個段可以僅存在於一個表空間中.

oracle塊是資料庫的基本I/O單元,資料檔案設定為連續編號的oracle塊.對於表空間來說,oracle塊大小固定不變,預設8KB

多個塊組成了區間extent,區間是一個資料檔案中一組連續編號的oracle塊.

一定要避免作業系統塊大小超過oracle塊大小!

資料儲存在段中,檢視DBA_SEGMENTS描述資料庫中每個段:

select segment_type,count(1) from dba_segments group by segment_type order by segment_type

SEGMENT_TYPE    COUNT(1)
----------------------------------------
CLUSTER    10
INDEX    1698
INDEX PARTITION    276
LOB PARTITION    1
LOBINDEX    551
LOBSEGMENT    551
NESTED TABLE    11
ROLLBACK    1
TABLE    1332
TABLE PARTITION    128
TYPE2 UNDO    10


TABLE   包含資料行的堆結構表,典型的段是表,但不能說表就是段,還有更復雜的表組織使用其他段型別.
INDEX   索引是鍵值的有序列表,相應的指標rowid指向每行的物理位置,rowid指定行位於哪個資料檔案的哪個oracle塊中,並指定行在塊中的編號
TYPE2 UNDO  撤銷段,儲存資料的更改前版本,為了提供完整性(回滾,讀取一致性和隔離),這些是必須的.
ROLLBACK    9i開始,引入了基於撤銷段的自動撤銷管理,總有一個回滾段保護用於建立資料庫的事務
TABLE PARTITION 可將表分成多個區,可將一個表分不到多個表空間中.
INDEX PARTITION 預設是一個索引在一個段中,但也可對索引進行分割槽,如果對錶進行分割槽,通常也會對這些表上的索引進行分割槽.
LOBSEGMENT LOBINDEX LOB PARTITION   如果將列定義為大物件資料型別,那麼僅在表本身儲存一個指標,指向列資料實際所在的不同段中的條目,
LOB可以擁有在此基礎上構建的索引以便快速訪問物件中的資料,也可以對LOB進行分割槽.
CLUSTER cluster段包含多個表,分割槽將一個表分佈在多個段中,而cluster相反,允許將多個表反規範化(denormalize)為一個段.
NESTED TABLE    如果一個表列定義為本身就具有的列使用者定義的物件型別,那麼列可以作為巢狀表,儲存在自身的段中.


每個段都有一個或多個區間,建立段時oracle將在指定的任何表空間中為其分配區間,最後隨著資料的輸入,區間被填滿.此後oracle將在同一表空間(不一定在同一個資料檔案中)分配第二個區間.

一個區間由一組連續編號的塊組成.

檔案儲存技術
資料檔案可儲存在四類裝置上:本地檔案系統,群集檔案系統,原始裝置和ASM磁碟組.

本地檔案系統上的檔案:最簡單的資料檔案,磁碟目錄結構的普通作業系統檔案.
群集檔案系統上的檔案:群集檔案系統是外部磁碟,同時安裝在多個計算機上.群集檔案系統調停群集中所有計算機上執行的程式到磁碟的訪問.使用群集檔案系統是一種RAC實現方法:資料庫必須位於要開啟它的所有例項可以訪問的磁碟上. oracle公司的OCFS(oracleclustered file system oracle群集檔案系統)是個好選擇,OCFS最先為沒有適當群集檔案系統的linux和windows編寫,10g被遷移到其它所有主流作業系統上.
原始裝置上的檔案:還可能在根本沒有檔案系統的磁碟上建立資料檔案.
ASM裝置上的檔案:ASM是10g引入的功能,是檔案系統的替代品,基於資料檔案儲存.

有人認為原始裝置效能最好,在現代磁碟和檔案系統技術前,此觀點無法立足,而且難以管理,會被淘汰.

ASM:oracle提供的邏輯卷管理器,與資料庫繫結在一起,通常的做法是購買一組原始磁碟,將磁碟交給oracle,讓oracle處理,系統管理員根本不需要考慮如何建立檔案系統.ASM只能儲存資料庫檔案,不能儲存二進位制檔案,始終必須將oracle主目錄儲存在常規檔案系統上.



練習,看看資料庫的物理結構

控制檔案的名稱和大小
select name,block_size*file_size_blks bytes from v$controlfile

NAME    BYTES

-------------------------------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL01.CTL    7340032
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL02.CTL    7340032
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL03.CTL    7340032
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL04.CTL    7340032

確定聯機重做日誌檔案成員名稱,大小:
select member,bytes from v$log join v$logfile using (group#);

MEMBER    BYTES
----------------------------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO03.LOG    52428800

D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO02.LOG    52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO01.LOG    52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO01A.LOG    52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO02A.LOG    52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO03A.LOG    52428800


確定資料檔案和臨時檔案的名稱,大小:

select name,bytes from v$datafile
union all
select name,bytes from v$tempfile

NAME    BYTES
----------------------------------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\SYSTEM01.DBF    503316480
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\UNDOTBS01.DBF    36700160
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\SYSAUX01.DBF    272629760
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\USERS01.DBF    5242880
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\EXAMPLE01.DBF    104857600
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\BOBTEST.DBF    1048576
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\TEMP01.DBF    20971520
















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

相關文章