表空間是 Oracle 資料庫架構中的核心概念,掌握其建立語法對資料庫管理員至關重要。本文將詳細解析 CREATE TABLESPACE 語法的各項選項與參數,幫助您深入理解表空間建立機制。
CREATE [UNDO] TABLESPACE tablespace_name
[DATAFILE datafile_spec1 [, datafile_spec2] ...]
[ { MINIMUM EXTENT integer [K|M]
| BLOCKSIZE integer [K]
| logging_clause
| FORCE LOGGING
| DEFAULT {data_segment_compression} storage_clause
| [ONLINE|OFFLINE]
| [PERMANENT|TEMPORARY]
| extent_management_clause
| segment_management_clause } ]
指定建立回滾表空間。Oracle 9i 之後,建立 UNDO 表空間後系統會自動管理回滾段的分配與回收,大幅降低 DBA 管理負擔。若未指定 UNDO 表空間,系統將使用 SYSTEM 表空間的回滾段處理交易。
定義表空間的唯一識別名稱,需遵循 Oracle 命名規範。
指定表空間包含的物理數據檔案。語法格式:'filename' [SIZE integer [K|M]] [REUSE] [AUTOEXTEND {OFF|ON [NEXT integer [K|M]] [MAXSIZE {UNLIMITED|integer [K|M]}]}]
範例:DATAFILE 'D:\Oracle\oradata\IMAGEDATA01.dbf' SIZE 2000M, 'D:\Oracle\oradata\IMAGEDATA02.dbf' SIZE 2000M
設定表空間中區段的最小擴展大小,有助減少空間碎片,確保所有擴展大小為該值的整數倍。
設定非標準區塊大小。使用前須先設定 db_block_size 及至少一個 db_nk_block_size 參數,且指定值必須等於對應的 db_nk_block_size。注意:臨時表空間不可設定此參數。
定義表空間上物件的預設日誌屬性(預設 LOGGING),影響表、索引、分區、物化視圖等物件的重做日誌產生行為。
強制表空間進入強制日誌模式,記錄所有物件變更(臨時段除外),優先級高於物件層級的 NOLOGGING 設定。限制:資料庫必須處於開啟且讀寫模式;UNDO 與臨時表空間不可使用。
宣告表空間內物件的預設儲存參數。
控制表空間建立後的狀態。ONLINE(預設)立即可用;OFFLINE 需手動上線。可透過 DBA_TABLESPACES 查詢狀態。
指定表空間類型。永久表空間存放持久物件;臨時表空間存放 Session 期間的暫存物件。注意:宣告 TEMPORARY 後不可設定 BLOCKSIZE,且此類表空間僅支援字典管理,若需本地管理請使用 CREATE TEMPORARY TABLESPACE。
決定表空間採用本地或字典管理模式,一旦設定只能透過遷移方式變更。
AUTOALLOCATE(系統自動決定擴展大小,9.0+ 版本)與 UNIFORM [SIZE integer](固定大小,預設 1M)。Oracle 強烈建議使用本地管理表空間。若未指定此子句,系統依 COMPATIBLE 參數與儲存子句自動決定預設模式。
SEGMENT SPACE MANAGEMENT AUTO 啟用自動段空間管理(ASSM),以位圖取代自由列表管理區段空間,提升並發效能。