首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 表空間管理實戰:建立、刪除、臨時表空間與最佳實踐

     編輯:Oracle 資料庫基礎

前言:表空間是資料庫儲存的邏輯容器

掌握表空間的建立、調整、刪除操作,是 DBA 日常維運的核心技能。本文提供生產級標準範本,涵蓋永久表空間、臨時表空間、Undo 表空間、Bigfile 表空間、自動擴展策略、刪除級聯處理,並針對常見錯誤(ORA-01543、ORA-03297、ORA-02260)給出預防與解法。

一、永久表空間建立標準範本

Smallfile (傳統) 表空間

CREATE TABLESPACE app_data
  DATAFILE '/u01/oradata/ORCL/app_data01.dbf' SIZE 1G
  AUTOEXTEND ON NEXT 512M MAXSIZE 32G
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE
  SEGMENT SPACE MANAGEMENT AUTO
  DEFAULT COMPRESS FOR OLTP
  ONLINE;

Bigfile 表空間(超大資料倉儲、單檔案管理)

CREATE BIGFILE TABLESPACE dw_data
  DATAFILE '/u02/oradata/ORCL/dw_data01.dbf' SIZE 100G
  AUTOEXTEND ON NEXT 10G MAXSIZE 10T
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE
  SEGMENT SPACE MANAGEMENT AUTO
  DEFAULT COMPRESS FOR QUERY HIGH
  ONLINE;

關鍵子句解析

子句推薦值理由
EXTENT MANAGEMENTLOCAL AUTOALLOCATE位圖管理、系統自動決定 Extent 大小,消除手動調優
SEGMENT SPACE MANAGEMENTAUTO (ASSM)位圖管理自由空間,消除 freelist 競爭,高併發插入效能最佳
DEFAULT COMPRESSFOR OLTP / FOR QUERY HIGHAdvanced Compression 選項啟用時,自動壓縮新資料,節省 50-80% 空間
AUTOEXTENDON NEXT 512M MAXSIZE 32G避免滿表空間報錯;MAXSIZE 防止失控佔滿磁碟

二、臨時表空間建立

CREATE TEMPORARY TABLESPACE app_temp
  TEMPFILE '/u01/oradata/ORCL/app_temp01.dbf' SIZE 2G
  AUTOEXTEND ON NEXT 512M MAXSIZE 16G
  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
  • TEMPFILE:不記錄 Redo,不納入備份,啟動時自動重建(內容丟失不影響恢復)。
  • UNIFORM SIZE 1M:統一 Extent 大小,適合大量排序/雜湊操作,減少碎片。
  • 建議:每個業務 Schema 群組配置專屬臨時表空間,避免單一 TEMP 成為熱點。

三、Undo 表空間建立

CREATE UNDO TABLESPACE undotbs2
  DATAFILE '/u01/oradata/ORCL/undotbs02.dbf' SIZE 4G
  AUTOEXTEND ON NEXT 1G MAXSIZE 32G
  RETENTION GUARANTEE;  -- 保證長查詢/閃回不被覆寫
  • 資料庫同一時刻僅能有一個 Undo 表空間生效(ALTER SYSTEM SET UNDO_TABLESPACE=undotbs2 切換)。
  • RETENTION GUARANTEE 確保 UNDO_RETENTION 參數生效,防止長查詢 ORA-01555。

四、表空間擴容與資料檔管理

手動擴容

ALTER DATABASE DATAFILE '/u01/oradata/ORCL/app_data01.dbf' RESIZE 2G;

新增資料檔

ALTER TABLESPACE app_data
  ADD DATAFILE '/u02/oradata/ORCL/app_data02.dbf' SIZE 1G
  AUTOEXTEND ON NEXT 512M MAXSIZE 32G;

啟用/關閉自動擴展

ALTER DATABASE DATAFILE '/u01/oradata/ORCL/app_data01.dbf' AUTOEXTEND ON NEXT 512M MAXSIZE 32G;
ALTER DATABASE DATAFILE '/u01/oradata/ORCL/app_data01.dbf' AUTOEXTEND OFF;

五、表空間離線/線上/唯讀

ALTER TABLESPACE app_data OFFLINE NORMAL;  -- 或 IMMEDIATE/TEMPORARY
ALTER TABLESPACE app_data ONLINE;
ALTER TABLESPACE app_data READ ONLY;
ALTER TABLESPACE app_data READ WRITE;
  • OFFLINE NORMAL 需檢查點完整,適合計劃性維護。
  • READ ONLY 適用於歷史歸檔表空間,備份後可設為唯讀節省恢復時間。

六、刪除表空間:級聯處理避坑指南

-- 完整刪除:含內容、資料檔、外鍵參照
DROP TABLESPACE app_data
  INCLUDING CONTENTS AND DATAFILES
  CASCADE CONSTRAINTS;

三大子句必要性

子句缺少時後果ORA 錯誤
INCLUDING CONTENTS表空間非空無法刪除ORA-01543: tablespace not empty
AND DATAFILESOS 層資料檔殘留,佔用磁碟無錯誤,但需手動 rm
CASCADE CONSTRAINTS其他表空間表有 FK 指向此表空間表,刪除失敗ORA-02260: referential integrity constraint violated

刪除前檢查清單

-- 1. 確認無其他用戶使用此表空間
SELECT owner, segment_name, segment_type
FROM dba_segments WHERE tablespace_name = 'APP_DATA';

-- 2. 確認無跨表空間外鍵
SELECT a.table_name, a.constraint_name, c_pk.table_name ref_table,
       c_pk.owner ref_owner, c_pk.tablespace_name ref_ts
FROM dba_constraints a
JOIN dba_constraints c_pk ON a.r_constraint_name = c_pk.constraint_name
WHERE a.constraint_type = 'R'
  AND a.tablespace_name = 'APP_DATA'
  AND c_pk.tablespace_name != 'APP_DATA';

七、用戶與表空間綁定

CREATE USER app_user IDENTIFIED BY xxx
  DEFAULT TABLESPACE app_data
  TEMPORARY TABLESPACE app_temp
  QUOTA UNLIMITED ON app_data;
-- 或指定配額
ALTER USER app_user QUOTA 10G ON app_data;

八、常見錯誤速查表

錯誤原因解法
ORA-01652: unable to extend temp segment臨時表空間不足擴充 TEMP、優化 SQL 排序/雜湊、增加 PGA
ORA-01536: space quota exceeded用戶配額用盡ALTER USER ... QUOTA UNLIMITED ON ts
ORA-03297: file contains used data beyond requested RESIZE value縮減資料檔時檔案尾端有資料先移動段(SHRINK/ALTER TABLE MOVE)再縮減
ORA-01543: tablespace not empty刪除非空表空間未加 INCLUDING CONTENTS加上子句或先清空段

結語

表空間管理的核心在於預留成長空間(AUTOEXTEND+MAXSIZE)、採用現代管理模式(LMT+ASSM)、刪除時完整級聯(INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS)。將上述範本納入團隊 DBA 操作手冊,可避免 95% 的儲存相關故障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved