資料庫管理員 (DBA) 的核心價值在於持續穩定、效能最優、資料零損失。本文依據業界最佳實踐,將 DBA 職責劃分為日常、每週、每月三個層級,並提供關鍵 SQL 檢查腳本,構建可落地的標準化運維作業程序 (SOP)。
ps -ef | grep ora_ 確認 PMON、SMON、DBWR、LGWR、CKPT、ARCn 等關鍵進程存活。df -k,剩餘 < 20% 需清理或擴容。tail -f $ORACLE_BASE//bdump/alert_.log ,捕捉新增 ORA- 錯誤並記錄處理。SELECT file_name FROM dba_data_files WHERE status='OFFLINE'; 發現離線檔立即恢復。dba_data_files / dba_free_space 計算剩餘百分比與最大連續自由區塊。vmstat, iostat, top, glance 觀察系統負載。NEXT/PCTINCREASE 存儲參數。init.ora、控制檔、Redo Log、歸檔模式、Sort Area、表空間碎片、資料檔 AUTOEXTEND、物件 Extent 數、Rollback Segment、稽核追蹤配置。SELECT owner, object_name, object_type FROM dba_objects WHERE status='INVALID';dba_constraints (PRIMARY KEY disabled) 與 dba_triggers (DISABLED)。ANALYZE TABLE ... ESTIMATE STATISTICS SAMPLE 50 PERCENT; 或 DBMS_STATS.GATHER_SCHEMA_STATS。-- 表空間使用率與最大連續自由塊
SELECT tablespace_name,
ROUND(100 * SUM(bytes)/1024/1024 / MAX_SUM_M, 2) AS pct_used,
MAX(bytes)/1024/1024 AS max_free_m
FROM dba_free_space, (SELECT tablespace_name, SUM(bytes) AS MAX_SUM_M FROM dba_data_files GROUP BY tablespace_name)
WHERE tablespace_name = fs_ts_name
GROUP BY tablespace_name, MAX_SUM_M;
-- 索引碎片判斷 (刪除葉行比 > 20% 需重建)
ANALYZE INDEX idx_name VALIDATE STRUCTURE;
SELECT name, del_lf_rows, lf_rows - del_lf_rows AS used_rows,
ROUND(100 * del_lf_rows / lf_rows, 2) AS del_pct
FROM index_stats;
-- 無主鍵表
SELECT owner, table_name FROM dba_tables
WHERE owner NOT IN ('SYS','SYSTEM') AND table_name NOT IN (SELECT table_name FROM dba_constraints WHERE constraint_type='P');
-- 索引未放入索引表空間
SELECT owner, index_name, tablespace_name FROM dba_indexes WHERE tablespace_name NOT IN ('INDEX_TBS');
將上述清單制度化、自動化 (Shell/Python + Cron/DBMS_SCHEDULER),並建立巡檢記錄與異常升級流程,是 DBA 從「救火隊員」進化為「架構守門人」的必經之路。