Database 是由一個或多個被稱為表空間(tablespace)的邏輯存儲機關構成。表空間内的邏輯存儲機關為段(segment),段又可以繼續劃分為資料擴充(extent)。而資料擴充是由一組連續的資料塊(datablock)構成。
大檔案表空間
在Oracle中使用者可以建立大檔案表空間(bigfile tablespace)。這樣Oracle資料庫使用的表空間(tablespace)可以由一個單一的大檔案構成,而不是若幹個小資料檔案。這使Oracle可以發揮64位系統的能力,建立、管理超大的檔案。在64位系統中,Oracle資料庫的存儲能力被擴充到了8 EB(1EB =1024PB,1PB = 1024TB,1TB=1024GB)。
當資料庫檔案由Oracle管理(Oracle-managed files),且使用大檔案表空間(bigfile tablespace)時,資料檔案對使用者完全透明。換句話說,使用者隻須針對表空間(tablespace)執行管理操作,而無須關心處于底層的資料檔案(datafile)。使用大檔案表空間,使表空間成為磁盤空間管理,備份,和恢複等操作的主要對象。使用大檔案表空間,并與由Oracle管理資料庫檔案(Oracle-managed files)技術以及自動存儲管理(Automatic Storage Management)技術相結合,就不再需要管理者手工建立新的資料檔案(datafile)并維護衆多資料庫檔案,是以簡化了資料庫檔案管理工作。
資料庫預設建立的是小檔案表空間(smallfile tablespace),即Oracle中傳統的表空間(tablespace)類型。資料庫中 SYSTEM 和 SYSAUX 表空間在建立時總是使用傳統類型隻有本地管理的(locally managed),且段空間自動管理(automatic segmentspace management)的表空間(tablespace)才能使用大檔案表空間(bigfile tablespace)。但是有兩個例外:本地管理的撤銷表空間(undo tablespace)和臨時表空間(temporary tablespace),即使其段(segment)為手工管理(manually managed),也可以使用大檔案表空間。一個Oracle資料庫可以同時包含大檔案/小檔案表空間(bigfile/smallfile tablespace)。SQL語句執行時無需考慮表空間(tablespace)的類型,除非語句中顯式地引用了資料檔案(datafile)名。
管理者可以建立一組臨時表空間(temporary tablespace),使用者在需要時可以利用組内各個表空間(tablespace)提供的臨時空間。管理者還可以指定表空間組(tablespace group)為資料庫預設的臨時表空間。當使用者需要大量臨時空間進行排序操作時,就可以利用大檔案表空間及表空間組。
使用大檔案表空間的優勢
● 使用大檔案表空間(bigfile tablespace)可以顯著地增強Oracle資料庫的存儲能力。一個小檔案表空間(smallfile tablespace)最多可以包含1024個資料檔案(datafile),而一個大檔案表空間中隻包含一個檔案,這個資料檔案的最大容量是小資料檔案的1024倍。這樣看來,大檔案表空間和小檔案表空間的最大容量是相同的。但是由于每個資料庫最多使用64K個資料檔案,是以使用大檔案表空間時資料庫中表空間的極限個數是使用小檔案表空間時的1024倍,使用大檔案表空間時的總資料庫容量比使用小檔案表空間時高出三個數量級。換言之,當一個Oracle資料庫使用大檔案表空間,且使用最大的資料塊容量時(32K),其總容量可以達到8EB。
● 在超大型資料庫中使用大檔案表空間減少了資料檔案的數量,是以也簡化了對資料檔案的管理工作。由于資料檔案的減少,SGA中關于資料檔案的資訊,以及控制檔案(control file)的容量也得以減小。
● 由于資料檔案對使用者透明,由此簡化了資料庫管理工作。
使用大檔案表空間時需要考慮的因素
● 大檔案表空間(bigfile tablespace)應該和自動存儲管理(Automatic Storage Management)或其他邏輯卷管理工具(logical volume manager)配合使用,這些工具應該能夠支援動态擴充邏輯卷,也能支援striping(資料跨磁盤分布)或RAID。
● 應該避免在不支援striping的系統上使用大檔案表空間,因為這将不利于并行執行(parallel execution)及 RMAN 的并行備份(backup
parallelization)。
● 當表空間正在使用的磁盤組(disk group)可能沒有足夠的空間,且擴充表空間的唯一辦法是向另一個磁盤組加入資料檔案時,應避免使用大檔案表空間。
● 不建議在不支援大檔案的平台上使用大檔案表空間,這會限制表空間(tablespace)的容量。參考相關的作業系統文檔了解其支援的最大檔案容量。
● 如果使用大檔案表空間替代傳統的表空間,資料庫開啟(open),checkpoints,以及 DBWR 程序的性能會得到提高。但是增大資料檔案
(datafile)容量可能會增加備份與恢複的時間。
提示:
當使用者在建立表空間(tablespace)時沒有指定資料擴充
(extent)的管理方式,預設使用本地管理(locally managed)。
10g 新增的表空間類型:大檔案 (Bigfile) 表空間。
大檔案表空間從某種角度來說提高了 Oracle 在 VLDB 上的管理能力。隻有自動段空間管理的 LMT (Locally Managed Tablespaces ) 支援 BIGFILE 表空間。 大檔案表空間隻能包含一個檔案,但是檔案可以達到 4G 個資料塊大小。(以下用 BFT 指代 BIGFILE Tablespace。
BFT 可以和以下存儲技術結合使用:
自動存儲管理(ASM)
LVM
OMF
理論上的 BFT 可以達到下面所列的值:
資料塊大小(機關:K) BFT 最大值(機關:T)
2k 8T
4k 16T
8k 32T
16k 64T
32k 128T
在實際環境中,這還受到作業系統的檔案系統的限制。
BFT基本操作
10g 資料庫在建立的時候,會指定預設的表空間類型。如果不特殊指定的話,預設為 SMALLFILE 類型的表空間。
SQL> SELECT *
2 FROM database_properties
3 WHERE property_name = 'DEFAULT_TBS_TYPE';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
-------------------- --------------- ----------------------------------------
DEFAULT_TBS_TYPE SMALLFILE Default tablespace type
這種情況下,如果我們建立表空間的時候不指定類型,那麼預設建立的都是 SMALLFILE 類型的表空間。可以通過 ALTER DATABASE 指令來修改資料庫預設的表空間類型:
SQL> ALTER DATABASE SET DEFAULT bigfile TABLESPACE;
Database altered.
2 FROM database_properties
3 WHERE property_name = 'DEFAULT_TBS_TYPE';
DEFAULT_TBS_TYPE BIGFILE Default tablespace type
SQL>
SQL> ALTER DATABASE SET DEFAULT smallfile TABLESPACE;
建立 BIGFILE 類型的表空間,隻需指定額外的一個參數 BIGFILE 即可,其他和原有建立表空間文法類似:
CREATE BIGFILE TABLESPACE bftbs
DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs01.dbf' SIZE 5M;
DBA_TABLESPACES (USER_TABLESPACES)與 V$TABLESPACE 這兩個視圖可以檢視 BIGFILE 表空間的相關資訊。先看看 DBA_TABLESPACES 在 10g 中有了什麼變化:
SQL> SELECT tablespace_name, bigfile
2 FROM dba_tablespaces;
TABLESPACE_NAME BIG
------------------------------ ---
SYSTEM NO
UNDOTBS NO
SYSAUX NO
TEMP NO
USERS NO
EXAMPLE NO
TEST NO
BFTBS YES
8 rows selected.
BFT 屬性
BFT有一些特有的屬性。
1.每個表空間隻能包含一個資料檔案。如果試圖添加新的檔案,則會報告 ORA-32771 錯誤:
SQL> ALTER TABLESPACE bftbs
2 ADD DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M;
ALTER TABLESPACE bftbs
*
ERROR at line 1:
ORA-32771: cannot add file to bigfile tablespace
2.隻有自動段空間管理的 LMT (locally managed tablespaces ) 支援 BFT
SQL> CREATE BIGFILE TABLESPACE bftbs02
2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M
3 EXTENT MANAGEMENT DICTIONARY;
CREATE BIGFILE TABLESPACE bftbs02
ORA-12913: Cannot create dictionary managed tablespace
2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M
3 SEGMENT SPACE MANAGEMENT MANUAL;
ORA-32772: BIGFILE is invalid option for this type of tablespace
3.相對檔案号(RELATIVE_FNO)為1024 ( 4096 on OS/390)
因為BFT隻有一個資料檔案,是以其相對檔案号也是固定的:1024
SQL> SELECT tablespace_name, file_id, relative_fno
2 FROM dba_data_files;
TABLESPACE_NAME FILE_ID RELATIVE_FNO
------------------------------ ---------- ------------
USERS 4 4
SYSAUX 3 3
UNDOTBS 2 2
SYSTEM 1 1
EXAMPLE 5 5
TEST 6 6
BFTBS 7 1024
7 rows selected.