承接「每日/每周/每月職責」系列,本文聚焦維護作業的具體執行細節、關鍵腳本邏輯與異常處置流程,構建可直接落地的 DBA 維護操作手冊。涵蓋例項存活驗證、Alert Log 智能掃描、DBSNMP 監控、備份鏈完整性、表空間/回滾段/段擴展深度巡檢、CPU/記憶體/I/O 資源剖析、備用庫同步、碎片/安全/跨環境一致性專項作業,附實戰腳本片段與工具鏈建議。
ps -ef | grep -E "(pmon|smon|dbw|lgwr|ckpt|arc|mman|reco|mmon|mmnl)" → 核心 10 進程全在線sqlplus -s / as sysdba <<< "SELECT INSTANCE_NAME, STATUS, DATABASE_STATUS FROM V$INSTANCE;" → STATUS=OPEN, DATABASE_STATUS=ACTIVEtnsping + 應用連線池測試查詢 → 端到端通暢adrci exec="set home diag/rdbms//; show alert -term -p \"message_text LIKE '%ORA-%' AND originating_timestamp > SYSTIMESTAMP - INTERVAL '24' HOUR\"" # 應見 2 個進程:dbsnmp (監控主進程) + emagent (EM 代理)
ps -ef | grep dbsnmp | grep -v grep | wc -l # 期望 >= 2
# 異常自動重啟
emctl stop agent; emctl start agent
| 備份類型 | 驗證動作 | 關鍵指標 |
|---|---|---|
| RMAN | LIST BACKUP OF DATABASE SUMMARY;、VALIDATE BACKUPSET | 狀態=AVAILABLE、校驗和通過、備份窗口內完成 |
| EXPDP | 檢查 .log 結尾「successfully completed」、匯出檔大小合理、IMPDP SQLFILE 驗證可導入性 | 無 ORA-39xxx 錯誤、行數與來源一致 |
| 第三方/存儲快照 | 檢查備份軟體控制台狀態、快照一致性標記、掛載測試讀取 | RPO/RTO 符合 SLA |
-- 空間使用率 + 碎片指標合一查詢
SELECT t.tablespace_name,
ROUND(t.total_gb,2) total_gb,
ROUND(f.free_gb,2) free_gb,
ROUND(100*f.free_gb/NULLIF(t.total_gb,0),2) pct_free,
f.max_chunk_mb,
f.chunk_cnt
FROM (
SELECT tablespace_name, SUM(bytes)/1024/1024/1024 total_gb
FROM dba_data_files GROUP BY tablespace_name
) t
JOIN (
SELECT tablespace_name,
SUM(bytes)/1024/1024/1024 free_gb,
MAX(bytes)/1024/1024 max_chunk_mb,
COUNT(*) chunk_cnt
FROM dba_free_space GROUP BY tablespace_name
) f USING (tablespace_name)
WHERE f.max_chunk_mb < 100 -- 最大連續塊 < 100MB 預警
OR 100*f.free_gb/NULLIF(t.total_gb,0) < 15; -- 使用率 > 85% 預警
V$ROLLSTAT:所有線上回滾段 STATUS=ONLINE,離線段僅限特定批次任務預留DBA_ROLLBACK_SEGS 核對儲存參數與名單一致性V$UNDOSTAT:MAXQUERYLEN、SSOLDERRCNT(ORA-01555 計數)異常升高 → 擴充 UNDO 表空間或調大 UNDO_RETENTIONANALYZE_5PCT.SQL(5% 採樣 ANALYZE)或 DBMS_STATSNR_EXTENTS.SQL → 識別 EXTENTS 接近 MAX_EXTENTS 或儲存參數 NEXT_EXTENT > 表空間最大連續塊的段# CPU: vmstat 1 10 → 關注 us+sy > 70%、wa > 20%、r (run queue) > 2*CPU核心數
# 記憶體: free -h / top → Swap used > 0 持續增長 = 記憶體壓力
# I/O: iostat -xmt 5 5 → 關注 %util > 80%、await > 20ms、svctm > 10ms
# 關聯資料庫: 結合 V$SESSION_WAIT (event='db file scattered/sequential read') 定位熱點會話/物件
# 晚間批次腳本邏輯 (daily_volumetric.sh)
# 1. 建立/驗證測量表
sqlplus / as sysdba @MK_VOLFACT.SQL
# 2. 全庫統計收集 (5% 採樣,含直方圖)
sqlplus / as sysdba @ANALYZE_COMP.SQL
# 3. 彙總統計至測量表
sqlplus / as sysdba @POP_VOL.SQL
# 4. 異步導出 CSV 供 BI 分析
sqlplus -s / as sysdba <<< "SET MARKUP CSV ON; SELECT * FROM volumetric_table WHERE snap_date = TRUNC(SYSDATE);" > /reports/vol_$(date +%F).csv
NEXTEXT.SQL 掃描、EXISTEXT.SQL 核對NO_PK.SQL (無 PK 表)、DIS_PK.SQL (PK 失效)、NONUPK.SQL (PK 索引非唯一) → 修正腳本自動生成 DDLMKREBUILD_IDX.SQL 生成 ALTER INDEX ... REBUILD TABLESPACE INDEX_TSDATATYPE.SQL 對比欄位型別/長度/精度OBJ_COORD.SQL 對比表/視圖/索引/序列/同義詞/套件 存在性與定義DBA_USERS:鎖定帳號、密碼過期、預設密碼、過度授權 (DBA 角色濫用)$ORACLE_HOME/network/log/sqlnet.log、listener.log:TNS-12541/12514/12560 連線失敗模式分析cp alert_.log /archive/alert__$(date +%Y%m%d).log + 壓縮留存 1 年| 分析維度 | 數據來源 | 分析方法 | 決策輸出 |
|---|---|---|---|
| 段增長危害趨勢 | 體積指標歷史表、DBA_HIST_SEG_STAT | 線性/指數回歸預測未來 90 天大小,識別將觸發 MAX_EXTENTS/表空間滿的段 | 預防性擴容/重組工單 |
| 歷次調優效果複盤 | AWR/Statspack 快照、變更記錄 | 調優前後 Top SQL 邏輯讀/物理讀/執行時間/等待事件對比 | 調優知識庫更新、失效調優回滾 |
| I/O 瓶頸趨勢 | V$FILESTAT/DBA_HIST_FILESTATXS、OS iostat 歷史 | 熱點資料檔/重做日誌檔識別,讀寫延遲趨勢,RAID/ASM 磁碟組平衡度 | 檔案遷移/ASM 重平衡/SSD 升級提案 |
| 碎片整理回顧 | 周度 COALESCE 記錄、DBA_FREE_SPACE 歷史快照 | 碎片指數 (chunks/free_mb) 趨勢,SMON 自動合併有效性 (PCTINCREASE>0 表空間) | 下期整理計畫、參數調整建議 |
| 未來效能規劃 | CPU/記憶體/網絡/磁碟歷史利用率、業務增長預測 | 資源爭用熱力圖,SLA 違約風險預警,容量擴充時間線 | 年度採購預算、架構演進藍圖 (RAC/DG/Sharding/雲遷移) |
| 調優與維護收尾 | 變更管理系統、問題管理系統 | 本月所有變更驗收狀態、遺留問題清單、下月計畫確認 | 月度運營報告、管理層匯報材料 |
維護作業的本質,是將「不可控的風險」轉化為「可度量的指標」,再透過「自動化的流程」持續收斂。本手冊提供的四層節奏、八大日維護步驟、晚間管線、周/月專項分析框架,配合工程化工具鏈,即可構建起從初級 DBA 到資深架構師通用的維護知識體系。請將其內化為團隊的「標準動作」,讓資料庫穩定成為確定性結果,而非運氣遊戲。