資料庫穩定運行仰賴 DBA 持續的監控與預防性維護。本文整理八大核心日常檢查項目,涵蓋警示日誌、表空間、連線狀態、控制檔備份、資料檔狀態、排程作業、壞塊處理與作業系統層面,附實用 SQL 與處理流程。
關注重點:啟動/關閉參數、Redo 切換延遲、結構變更(建立/刪除表空間、新增資料檔)、錯誤(ORA-600、壞塊、表空間不足)
處理原則:
查詢碎片狀況:
SELECT TABLESPACE_NAME, COUNT(*) CHUNKS, MAX(BYTES/1024/1024) MAX_CHUNK_MB
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME;
判讀:平均每資料檔碎片 > 100 視為嚴重,嘗試 ALTER TABLESPACE ... COALESCE 合併相鄰空閒區塊。無效則考慮重建表空間。
擴充空間:MAX_CHUNK < 下一區塊需求 → ORA-1652/3/4,需擴充資料檔或新增資料檔。
SELECT SID, SERIAL#, USERNAME, PROGRAM, MACHINE, STATUS, LOGON_TIME
FROM V$SESSION
ORDER BY LOGON_TIME;
異常處理:長時間 INACTIVE 佔用資源 → ALTER SYSTEM KILL SESSION 'SID,SERIAL#'。注意:SID 1-7 通常為背景進程(USERNAME 為空),勿誤殺。
結構變更後必備:
-- 二進制備份
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/control.bak';
-- 追蹤檔備份 (產生重建 SQL)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
-- 追蹤檔位於 USER_DUMP_DEST
SELECT FILE_NAME, STATUS FROM DBA_DATA_FILES;
非 AVAILABLE 狀態需立即處理:離線/遺失 → 還原恢復;損壞 → 重建表空間。
SELECT JOB, LOG_USER, LAST_DATE, NEXT_DATE, BROKEN, FAILURES, WHAT
FROM DBA_JOBS
WHERE FAILURES > 0;
FAILURES > 0 表示連續失敗,需檢查 WHAT 邏輯與錯誤堆疊。
ORA-01578 (file#, block#)SELECT TABLESPACE_NAME, SEGMENT_TYPE, OWNER, SEGMENT_NAME
FROM DBA_EXTENTS
WHERE FILE_ID = &file#
AND &block# BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;
DROP INDEX ...; CREATE INDEX ...DROP TABLE ...; CREATE TABLE ... AS SELECT ...DBMS_REPAIR.SKIP_CORRUPT_BLOCKS 標記跳過 → CTAS 保存良好資料 → 重建表df -h,定期清理舊 Trace/Alert 日誌netstat -an | grep 1521,確認監聽器連線正常top、vmstat、sar 監控 CPU/記憶體/IO將上述查詢封裝為 Shell/Python 腳本,配合 Cron/Windows 排程器每日執行,結果以 HTML 郵件發送,異常項目標紅,實現「早發現、早處理」。
日常維護無小事,標準化檢查清單是 DBA 從「救火」轉向「防火」的關鍵。