首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 表空間手動擴容:查詢現況、新增資料檔、關閉自動擴展、驗證腳本

     編輯:Oracle 資料庫相關知識

1. 查詢表空間與資料檔現況

SELECT tablespace_name, file_id, file_name,
       ROUND(bytes/1024/1024,0) total_mb
FROM   dba_data_files
ORDER BY tablespace_name;

2. 新增資料檔 (手工指定大小、關閉自動擴展)

ALTER TABLESPACE users
  ADD DATAFILE '/u01/oracle/oradata/umail/users02.dbf'
  SIZE 4000M
  AUTOEXTEND OFF;

若原檔案開啟自動擴展,建議同步關閉:

ALTER DATABASE DATAFILE '/u01/oracle/oradata/umail/users01.dbf'
  AUTOEXTEND OFF;

3. 驗證擴容結果

SELECT a.tablespace_name,
       a.bytes/1024/1024 total_mb,
       b.bytes/1024/1024 used_mb,
       c.bytes/1024/1024 free_mb,
       ROUND(b.bytes*100/a.bytes,2) pct_used,
       ROUND(c.bytes*100/a.bytes,2) pct_free
FROM   sys.sm$ts_avail a,
       sys.sm$ts_used  b,
       sys.sm$ts_free  c
WHERE  a.tablespace_name = b.tablespace_name
AND    a.tablespace_name = c.tablespace_name;

或使用標準視圖(不依賴 SM$ 內部表):

SELECT tablespace_name,
       SUM(bytes)/1024/1024 total_mb,
       SUM(bytes - NVL(free_bytes,0))/1024/1024 used_mb,
       SUM(NVL(free_bytes,0))/1024/1024 free_mb
FROM (
  SELECT tablespace_name, bytes, 0 free_bytes FROM dba_data_files
  UNION ALL
  SELECT tablespace_name, 0, bytes FROM dba_free_space
)
GROUP BY tablespace_name;

最佳實務

  • 生產環境**關閉 AUTOEXTEND**,改由人工監控擴容,避免單一巨大檔案導致備份/恢復困難、磁碟碎片。
  • 單一資料檔建議 ≤ 32GB(受限於部分備份工具/檔案系統)。
  • 多資料檔分佈於不同磁碟/ASM 磁碟組,提升 I/O 平行度。
  • 設定表空間閾值告警(DBA_TABLESPACE_USAGE_METRICS + OEM/自製腳本)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved