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

Oracle 數據庫日常維護手冊:告警日誌與表空間監控雙引擎

     編輯:Oracle 資料庫基礎

一、 告警日誌 (Alert Log) 監控體系

位置:$ORACLE_BASE/diag/rdbms///trace/alert_.log (11g+ ADR 架構)
核心價值:數據庫「黑匣子」,記錄關鍵生命周期事件與錯誤。

關鍵監控項與處置預案

日誌特徵業務含義標準處置流程
Starting ORACLE instance (normal)實例啟動檢查非默認參數是否符合預期
Thread 1 advanced to log sequence NRedo Log 切換正常;若頻繁 (秒級) 檢查 Checkpoint/Archive 滯後
ORA-1652/1653/1654表空間無法分配Extent緊急擴容數據文件或添加數據文件
ORA-00600 / ORA-07445內部錯誤 / 進程異常終止收集 Trace 文件 → MOS 查詢 Bug → 打補丁/變通
Corrupt block found數據塊損壞DBV 驗證 → 確認對象類型 (索引重建 / 表恢復 / RMAN Block Recovery)
Tablespace 'XXX' is 95% full空間預警 (10g+ 自動)擴容或清理歸檔/臨時段
Deadlock detected死鎖Trace 分析 SQL/應用邏輯 → 應用層修復索引順序/提交頻率

自動化監控腳本思路

#!/bin/bash
# check_alert.sh 每 5 分鐘跑一次
ADR_HOME=$(grep -r "ADR base" $ORACLE_HOME/log/diag/rdbms/*/*/trace/alert_*.log 2>/dev/null | head -1 | cut -d' ' -f4)
TAIL_LINE=1000
KEYWORDS="ORA-|TNS-|corrupt|deadlock|unable to extend|terminating the instance"
tail -n $TAIL_LINE $ADR_HOME/trace/alert_${ORACLE_SID}.log | \
grep -iE "$KEYWORDS" | \
grep -v "ORA-00000" | \
while read line; do
  echo "$(date) ALERT: $line" | mail -s "Oracle Alert: $ORACLE_SID" dba_team@company.com
done

二、 表空間監控 (字典管理/本地管理通用)

核心指標 SQL

-- 1. 空間使用率總覽
SELECT tablespace_name,
       ROUND(total_mb,2) total_mb,
       ROUND(used_mb,2) used_mb,
       ROUND(free_mb,2) free_mb,
       ROUND(pct_used,1) pct_used
FROM (
  SELECT df.tablespace_name,
         SUM(df.bytes)/1024/1024 total_mb,
         SUM(df.bytes)/1024/1024 - SUM(NVL(fs.bytes,0))/1024/1024 used_mb,
         SUM(NVL(fs.bytes,0))/1024/1024 free_mb,
         (1 - SUM(NVL(fs.bytes,0))/SUM(df.bytes))*100 pct_used
  FROM dba_data_files df
  LEFT JOIN dba_free_space fs ON df.file_id = fs.file_id
  GROUP BY df.tablespace_name
)
WHERE pct_used > 80  -- 閾值告警
ORDER BY pct_used DESC;

-- 2. 碎片程度 (字典管理表空間關鍵)
SELECT tablespace_name, COUNT(*) chunks, MAX(bytes)/1024/1024 max_chunk_mb
FROM dba_free_space
GROUP BY tablespace_name
HAVING COUNT(*) > 100;  -- 經驗值:平均每文件 >100 碎片需整理

碎片整理動作

-- 合並相鄰自由區 (LMT 推薦)
ALTER TABLESPACE users COALESCE;

-- 驗證效果
-- 再次運行上述碎片查詢,觀察 chunks 減少、max_chunk 增大

-- 若無效且嚴重影響性能 → 重建表空間 (Exp/Imp 或 CTAS)

擴容操作標準化

-- 方案 A: 擴展現有數據文件 (需文件系統空間)
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf' RESIZE 5G;
-- 或啟用自動擴展
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE 10G;

-- 方案 B: 添加新數據文件 (跨磁盤分佈 I/O)
ALTER TABLESPACE users ADD DATAFILE '/u02/oradata/orcl/users02.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 5G;

三、 臨時表空間專項監控

-- 臨時段使用情況
SELECT tablespace_name, 
       ROUND(bytes_used/1024/1024,2) used_mb,
       ROUND(bytes_free/1024/1024,2) free_mb
FROM v$temp_space_header;

-- 活躍排序操作
SELECT s.username, u.tablespace, u.segtype, u.blocks*8192/1024/1024 mb
FROM v$sort_usage u, v$session s
WHERE u.session_addr = s.saddr
ORDER BY mb DESC;

四、 維護作業排程建議 (DBMS_SCHEDULER)

作業頻率關鍵動作
告警日誌掃描每 5-15 分鐘關鍵字匹配 → 告警推送
表空間使用率檢查每小時>80% 告警,>90% 自動擴容/工單
碎片度掃描每日Chunks > 閾值 → COALESCE
失效索引檢查每周STATUS != 'VALID' → REBUILD ONLINE
統計信息收集每日窗口DBMS_STATS.GATHER_DATABASE_STATS (Auto Task 默認啟用)
備份檢查每日RMAN LIST BACKUP / VALIDATE BACKUPSET

總結: 日常維護的核心是可觀測性 + 自動化響應。將告警日誌關鍵字與表空間指標納入監控平台 (Zabbix/Prometheus/CloudWatch),建立「檢測-告警-自愈/工單」閉環,將 DBA 從人工巡檢中解放,專注架構優化與疑難雜症攻關。

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