Oracle在邏輯上以資料表空間儲存資料,而實際上是以資料檔案儲存資料。
資料表空間和資料檔案
資料表空間:某一時刻只屬於一個資料庫;由一個或多個資料檔案組成;可近一步劃分邏輯儲存單元
資料檔案:只能屬於一個資料表空間和一個資料庫
資料表空間類型
system資料表空間:
– 隨資料庫建立
– 包含資料字典
– 包含 SYSTEM 還原段
非SYSTEM資料表空間:
– 用於分開儲存段
– 易於空間管理
– 控制分配給使用者的空間量
建立資料表空間
建立資料表空間的命令:create tablespace
CREATE TABLESPACE tablespace
[DATAFILE clause]
[MINIMUM EXTENT integer[K|M]]
[BLOCKSIZE integer [K]]
[LOGGING|NOLOGGING]
[DEFAULT storage_clause ]
[ONLINE|OFFLINE]
[PERMANENT|TEMPORARY]
[extent_management_clause]
[segment_management_clause]
其中:
Tablespace:是要建立的資料表空間的名稱
DATAFILE:指定組成資料表空間的一個或多個資料檔案
MINIMUM EXTENT:確保資料表空間內每個佔用區的大小是整數 (integer) 的倍數。使用 K 或M以KB或MB為單位指定該大小。
BLOCKSIZE:BLOCKSIZE 指定資料表空間的非標準塊大小。要指定該子句,必須具有DB_CACHE_SIZE,並至少設定一個 DB_nK_CACHE_SIZE參數,在該 子句中指定的整數(integer) 必須與一個DB_nK_CACHE_SIZE 參數設定相對應。
LOGGING:指定在預設情況下,資料表空間內的所有表、索引和分區的所有更改都寫入重做記錄檔。LOGGING為預設設定。
NOLOGGING:指定在預設情況下,資料表空間內的所有表、索引和分區的所有更改都不寫入重做記錄檔。
NOLOGGING隻影響某些DML 和DDL 命令,如直接載入。
DEFAULT:DEFAULT指定資料表空間內建立的所有對象的預設儲存參數。
OFFLINE:指定資料表空間從建立後就不可用。
PERMANENT:指定資料表空間可用於保留永久對象。
TEMPORARY:指定資料表空間僅用於保留臨時對象,如:由 ORDER BY子句引起的隱式排序所使用的段。不能指定 EXTENT MANAGEMENT LOCAL BLOCKSIZE 子句。
extent_management_clause:該子句指定如何管理資料表空間內的區。
segment_management_clause:這隻與永久的、且在本地管理的資料表空間相關。通過它可指定Oracle 是否應使用空閑列表或位元影像來跟蹤資料表空間段中的已佔用空間和空閑空間
datafile_clause:== filename [SIZE integer[K|M] [REUSE] [ autoextend_clause ]
filename:是資料表空間中的資料檔案的名稱。
SIZE:指定檔案大小。使用K 或 M 以KB或MB為單位指定大小。
REUSE:允許 Oracle 伺服器重新使用現有檔案。
autoextend_clause:該子句啟用或禁用資料檔案的自動擴充。
NEXT:以位元組為單位指定在需要更多區時自動分配的磁碟空間下一增量的大小
其中:
MAXSIZE:指定資料檔案可以自動擴充到的最大磁碟空間。
UNLIMITED:指定可分配給資料檔案或Tempfile 的磁碟空間是不受限制的。
驗證上述參數,樣本如下:
SQL> CREATE TABLESPACE userdata DATAFILE '/disk4/ora10/oradata/ora1/userdata01.dbf' SIZE 20M
2 AUTOEXTEND ON NEXT 500K MAXSIZE 100M
3 LOGGING ONLINE
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
Tablespace created.
資料表空間的空間管理
資料表空間以區(extent)為單位分配空間。可使用以下兩種不同方法來跟蹤建立的資料表空間中的空閑空間和已佔用空間
本地管理的資料表空間:在資料表空間內通過位元影像管理區。位元影像中的每個位對應於一個塊或一組塊。分配了某個區或釋放了某個區可重新使用時,Oracle 伺服器已變更位元 圖值以顯示塊的新狀態。從 Oracle9i 開始,在本地管理已成為預設設定。
字典管理的資料表空間:由資料字典管理區。Oracle 伺服器將在分配或回收區時更新資料字典中對應的表。
本地管理的資料表空間:減少了對資料字典表的爭用;分配或回收空間時不產生還原資料
樣本:
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
EXTENT MANAGEMENT 子句的 LOCAL 選項指定資料表空間在本地管理。預設情況下,資料表空間在本地管理。
extent_management_clause:
[ EXTENT MANAGEMENT [ DICTIONARY | LOCAL
[ AUTOALLOCATE | UNIFORM [SIZE integer[K|M]] ] ] ]
其中:
DICTIONARY:指定使用字典表來管理資料表空間。
LOCAL:指定在本地通過位元影像管理資料表空間。如果指定了LOCAL,則不能再指定 DEFAULT
storage_clause、MINIMUM EXTENT或 TEMPORARY。
AUTOALLOCATE:指定資料表空間由系統管理。使用者無法指定區大小。這是預設設定。
UNIFORM:指定按照大小統一為 SIZE 位元組數的各個區來管理資料表空間。使用K 或 M 以KB或MB來指定區大小。預設大小為 1 MB
在本地管理資料表空間的優點:
1.本地管理的資料表空間相對於字典管理的資料表空間有如下優點:
2.本地管理可以避免迴圈空間管理操作,但是這種操作在字典管理的資料表空間中卻有可能發生。一旦消耗或釋放某個區的空間會
3.產生另一個消耗或釋放操作(消耗或釋放還原段或資料字典表內的空間)時,它就會發生。
4.由於本地管理的資料表空間在資料字典表中不記錄空閑空間,從而減少了對這些表的爭用。
5.區的本地管理可自動跟蹤鄰近的空閑空間,因而無須合并空閑區。
6.本地管理的區大小可由系統自動確定。
7.對區的位元影像變更不會產生還原資訊,因為它們不更新資料字典中的表(資料表空間限額資訊等特殊情況除外)。