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

Oracle 維護必備 SQL 腳本庫:表空間、回滾段、控制檔、日誌、版本、長時間查詢一網打盡

     編輯:Oracle 資料庫基礎

核心監控腳本分類速查

類別腳本編號核心視圖/表用途
表空間容量1, 2, 6DBA_TABLESPACES, DBA_DATA_FILES, DBA_FREE_SPACE規劃擴容、檢測碎片
回滾段狀態3DBA_ROLLBACK_SEGS, V$ROLLSTAT監控擴展、縮減、最佳化
控制檔/日誌檔4, 5V$CONTROLFILE, V$LOGFILE備份前確認、多路徑驗證
物件統計7ALL_OBJECTS審計無效物件、擁有者分布
版本/建立/歸檔8, 9PRODUCT_COMPONENT_VERSION, V$DATABASE升級相容性、歸檔模式確認
長時間查詢10V$SESSION_LONGOPS, V$SQL鎖定高耗 SQL、優化切入點

精選高頻腳本詳解

1. 表空間名稱與總大小

SELECT t.tablespace_name,
       ROUND(SUM(bytes)/(1024*1024),0) ts_size
FROM   dba_tablespaces t, dba_data_files d
WHERE  t.tablespace_name = d.tablespace_name
GROUP BY t.tablespace_name;

2. 表空間物理檔案明細

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

3. 回滾段詳細狀態

SELECT r.segment_name, r.tablespace_name, r.status,
       (r.initial_extent/1024) initial_extent_kb,
       (r.next_extent/1024) next_extent_kb,
       r.max_extents, v.curext cur_extents
FROM   dba_rollback_segs r, v$rollstat v
WHERE  r.segment_id = v.usn(+)
ORDER BY r.segment_name;

6. 表空間使用率(含免費/已用百分比)

SELECT a.tablespace_name,
       a.bytes total_mb,
       b.bytes used_mb,
       c.bytes free_mb,
       ROUND(b.bytes*100/a.bytes,2) pct_used,
       ROUND(c.bytes*100/a.bytes,2) pct_free
FROM   (SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) a,
       (SELECT tablespace_name, SUM(bytes) bytes FROM dba_segments GROUP BY tablespace_name) b,
       (SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) c
WHERE  a.tablespace_name = b.tablespace_name
AND    a.tablespace_name = c.tablespace_name;

8. 資料庫版本查詢

SELECT version FROM product_component_version
WHERE  SUBSTR(product,1,6) = 'Oracle';

9. 建立日期與歸檔模式

SELECT created, log_mode FROM v$database;

10. 捕捉長時間作業(含進度)

COLUMN username FORMAT A12
COLUMN opname   FORMAT A16
COLUMN target   FORMAT A30
COLUMN sofar    FORMAT 999,999,999
COLUMN totalwork FORMAT 999,999,999
COLUMN units    FORMAT A10

SELECT username, opname, target, sofar, totalwork, units,
       ROUND(sofar/totalwork*100,2) pct_done,
       elapsed_seconds, time_remaining
FROM   v$session_longops
WHERE  totalwork > 0
AND    sofar < totalwork
ORDER BY time_remaining;

自動化部署建議

  1. 將上述腳本封裝為 Shell/Python 定時任務,輸出 HTML/CSV 報表
  2. 設定閾值告警:表空間使用率 > 85%、回滾段擴展次數異常、長時間查詢 > 30 分鐘
  3. 整合至監控平台(Zabbix/Prometheus/Grafana)實現視覺化儀表板
  4. 建立執行日誌審計追蹤,滿足合規要求

進階補充:現代視圖替代

  • 10g+ 建議使用 DBA_TABLESPACE_USAGE_METRICS 直接獲取使用率
  • V$TABLESPACE、V$DATAFILE 即時動態視角
  • ASM 環境改查 V$ASM_DISKGROUP

將這套腳本庫納入日常巡檢 SOP,讓資料庫健康狀態「可視、可控、可預測」。

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