您好,登錄后才能下訂單哦!
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.
SQL> SELECT *
2 FROM database_properties
3 WHERE property_name = 'DEFAULT_TBS_TYPE';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
-------------------- --------------- ----------------------------------------
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
*
ERROR at line 1:
ORA-12913: Cannot create dictionary managed tablespace
SQL> CREATE BIGFILE TABLESPACE bftbs02
2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M
3 SEGMENT SPACE MANAGEMENT MANUAL;
CREATE BIGFILE TABLESPACE bftbs02
*
ERROR at line 1:
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.
SQL>
http://www.51CTO提醒您,請勿濫發廣告!/xueyuanzhuanqu/jishuwenzhang/201110/jishuwenzhang-1107.html
========================
oracle10g中的bigfile tablespace
http://www.ixpub.net/blog-25038273-410563.html
bigfile tablespace是Oracle10g的新特性。Bigfile tablespaces包含1個最大4G個blocks 的datafile。因此,使用8KBdata blocks 的bigfile tablespace 最大可以達到32TB。
Bigfile tablespaces 常用于非常大的DB。 如果很大的DB有成千的 read/write datafiles, 那么checkpoints之類的操作將非常費時。如果用一個很大的datafile,減少datafiles的數量,將會提高效率。
創建時使用BIGFILE關鍵字如下:
CREATE BIGFILE TABLESPACE BIG_DEMO
DATAFILE '/ORADATA/PROD/BIG_DEMO.DBF' SIZE 25G;
Smallfile tablespace是原Oracle tablespace datafile 選項的新名字。 smallfile tablespace中,你可以包含多個datafiles。每個datafile 有最多4M個data blocks。因此, 使用8KB data blocks的smallfile tablespace 中的datafiles 最大32GB。smallfile tablespace最多有1,023 個datafiles。SYSTEM和SYSAUX tablespaces總是smallfile tablespaces。
1.問題:大文件表空間和只有一個數據文件的小文件表空間(也就是我們常用的)區別在哪?
一下是關于BIGFILE網友的解釋:
bigfile tablespace是Oracle10g的新特性。Bigfile tablespaces包含1個最大4G個blocks 的datafile。因此,使用8KBdata blocks 的bigfile tablespace 最大可以達到32TB。
Bigfile tablespaces 常用于非常大的DB。 如果很大的DB有成千的 read/write datafiles, 那么checkpoints之類的操作將非常費時。如果用一個很大的datafile,減少datafiles的數量,將會提高效率。
創建時使用BIGFILE關鍵字如下:
CREATE BIGFILE TABLESPACE BIG_DEMO
DATAFILE '/ORADATA/PROD/BIG_DEMO.DBF' SIZE 25G;
Smallfile tablespace是原Oracle tablespace datafile 選項的新名字。 smallfile tablespace中,你可以包含多個datafiles。每個datafile 有最多4M個data blocks。因此, 使用8KB data blocks的smallfile tablespace 中的datafiles 最大32GB。smallfile tablespace最多有1,023 個datafiles。SYSTEM和SYSAUX tablespaces總是smallfile tablespaces。
根據ROWID關于上面紅字部分的理解
ROWID rfile# block# row#分別為 10BIT,22BIT,16BIT
所以單個數據文件最大包含2^22-1(4194303)個數據塊 ,一個數據塊8K算 8*最大是32G
Bigfile tablespaces包含1個最大4G個blocks 的datafile
2.問題ORACLE 最多可以見多少個表空間?每個表空間可以建多少個數據文件?
也是根據ROWID格式分析:
8I之前表空間數 ==數據文件最大數 1024個
8i之后,表空間數2^32-1 ,數據文件數 表空間數*1023
rowid就是唯一標志記錄物理位置的一個id,在oracle 8版本以前,rowid由file# block# row#組成,占用6個bytes的空間,10 bit 的 file# ,22bit 的 block# ,16 bit 的 row#。
從oracle 8開始rowid變成了extend rowid,由data_object_id# rfile# block# row#組成,占用10個bytes的空間, 32bit的 data_object_id#,10 bit 的 rfile#,22bit 的 block#,16 bit 的 row#.由于rowid的組成從file#變成了rfile#,所以數據文件數的限制也從整個庫不能超過1023個變成了每個表空間不能超過1023個 數據文件。
說了rowid的組成,那么我們再來看看rowid在索引里面占用的字節數又是什么樣子的。在oracle 8以前索引中存儲的rowid占用字節數也是6bytes,在oracle8之后,雖然oracle使用了extend rowid,但是在普通索引里面依然存儲了bytes的rowid,只有在global index中存儲的是10bytes的extend rowid,而extend rowid也是global index出現的一個必要條件,下面我們會解釋原因。
為什么golbal index需要把data_object_id#也包含在index rowid entry中呢?如果不包含會這么樣?首先我們需要知道index的rowid entry的存在是為了能根據它找到表的這條記錄存在哪個具體的物理位置,我們需要知道它在哪個數據文件,在哪個block,在那一行,普通的索引 oracle根據rfile#,block#,row#就可以知道了,但是partition table可以分布在多個表空間,也就是可以分布在多個數據文件,當我們建立local index時,index rowid entry并不包含data_object_id#,因為oracle可以知道這個index對應的是哪一個table分區,并可以得到table分區的 ts#(tablespace號),那么oracle根據ts#和rfile#就可以找到具體的數據文件。但是如果換成是golbal index,如果不包含data_object_id#,那么我們并不能知道這個索引對應著哪個表分區,也自然不能知道它的rfile#和file#的轉 換關系,所以它將找不到所對應的記錄。包含data_object_id#后,oracle可以根據data_object_id#實現rfile#和 file#的轉換然后找到記錄對應的物理位置。需要注意的是要理解以上概念我們還是需要了解file#和rfile#的區別
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。