無圖形介面環境下的標準作法,查詢三大字典視圖:
DBA_FREE_SPACE:各表空間剩餘空間DBA_DATA_FILES:資料檔案大小DBA_TABLESPACES:表空間屬性 (類型、區管理)SELECT a.tablespace_name "表空間名稱",
c.contents "類型",
c.extent_management "區管理",
ROUND(b.total_bytes/1024/1024,2) "總大小(MB)",
ROUND((b.total_bytes - a.free_bytes)/1024/1024,2) "已用(MB)",
ROUND((b.total_bytes - a.free_bytes)/b.total_bytes*100,2) "利用率(%)"
FROM (
SELECT tablespace_name, SUM(NVL(bytes,0)) free_bytes
FROM dba_free_space GROUP BY tablespace_name
) a,
(
SELECT tablespace_name, SUM(bytes) total_bytes
FROM dba_data_files GROUP BY tablespace_name
) b,
(
SELECT tablespace_name, contents, extent_management
FROM dba_tablespaces
) c
WHERE a.tablespace_name = b.tablespace_name
AND b.tablespace_name = c.tablespace_name
ORDER BY "利用率(%)" DESC;
SELECT b.file_name "物理檔案",
b.tablespace_name "表空間",
ROUND(b.bytes/1024/1024,2) "大小(MB)",
ROUND((b.bytes - SUM(NVL(a.bytes,0)))/1024/1024,2) "已用(MB)",
ROUND((b.bytes - SUM(NVL(a.bytes,0)))/b.bytes*100,2) "利用率(%)"
FROM dba_free_space a, dba_data_files b
WHERE a.file_id(+) = b.file_id
GROUP BY b.tablespace_name, b.file_name, b.bytes
ORDER BY b.tablespace_name, "利用率(%)" DESC;
關鍵:a.file_id(+) = b.file_id 外連接,確保空表空間檔案也顯示。
SELECT a.tablespace_name "表空間", b.bytes/1024/1024 "大小(MB)", b.file_name "檔案"
FROM dba_tablespaces a, dba_data_files b
WHERE a.tablespace_name = b.tablespace_name
AND a.contents = 'TEMPORARY';
使用臨時檔案,資訊在 V$TEMPFILE (非 DBA_DATA_FILES):
SELECT file#, status, name FROM v$tempfile;
SELECT tablespace_name, current_users, used_extents, max_used_blocks, max_sort_blocks
FROM v$sort_segment;
check_tablespace.sql、check_datafiles.sql、check_temp.sqlALTER TABLESPACE ... ADD DATAFILE ... 擴充ALTER DATABASE DATAFILE ... RESIZE ... 擴大現有檔案AUTOEXTEND ON MAXSIZE UNLIMITEDV$TABLESPACE 狀態 (ONLINE/OFFLINE/READ ONLY)| CONTENTS值 | 類型 | 用途 |
|---|---|---|
| PERMANENT | 永久表空間 | 儲存表、索引等持久物件 |
| TEMPORARY | 臨時表空間 | 排序、雜湊、臨時表、中間結果 |
| UNDO | 回滾表空間 | 儲存Undo資料 |
核心原則:熟練命令列腳本是DBA生存技能,GUI只是輔助;建立標準巡檢腳本庫,自動化監控,事半功倍。