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

Oracle DBA 維護作業全景手冊:日/晚/周/月四層節奏與關鍵腳本實戰

     編輯:Oracle 資料庫基礎

前言:維護不是修補,是預防與優化的系統工程

承接「每日/每周/每月職責」系列,本文聚焦維護作業的具體執行細節、關鍵腳本邏輯與異常處置流程,構建可直接落地的 DBA 維護操作手冊。涵蓋例項存活驗證、Alert Log 智能掃描、DBSNMP 監控、備份鏈完整性、表空間/回滾段/段擴展深度巡檢、CPU/記憶體/I/O 資源剖析、備用庫同步、碎片/安全/跨環境一致性專項作業,附實戰腳本片段與工具鏈建議。

一、日維護核心流程(標準化 8 步驟)

A. 例項存活驗證 — 不止「進程在」,要「服務通」

  • 進程層: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=ACTIVE
  • 連線層:tnsping + 應用連線池測試查詢 → 端到端通暢
  • 自動化建議:OEM 黑外部腳本,異常即時釘釘/郵件告警

B. Alert Log 智能掃描 — 從「人工看」到「機器篩」

  1. adrci exec="set home diag/rdbms//; show alert -term -p \"message_text LIKE '%ORA-%' AND originating_timestamp > SYSTIMESTAMP - INTERVAL '24' HOUR\""
  2. 關鍵字過濾:ORA-00600/07445(內部錯誤)、ORA-01555(快照過舊)、ORA-16038/19502(歸檔/空間)、ORA-27072(I/O 錯誤)
  3. 去重、歸類、生成每日錯誤摘要報告 → 存入知識庫、觸發工單

C. DBSNMP 代理健康度 — 監控監控者

# 應見 2 個進程:dbsnmp (監控主進程) + emagent (EM 代理)
ps -ef | grep dbsnmp | grep -v grep | wc -l  # 期望 >= 2
# 異常自動重啟
emctl stop agent; emctl start agent

D. 備份有效性鏈路驗證 — 信任但驗證

備份類型驗證動作關鍵指標
RMANLIST BACKUP OF DATABASE SUMMARY;、VALIDATE BACKUPSET 狀態=AVAILABLE、校驗和通過、備份窗口內完成
EXPDP檢查 .log 結尾「successfully completed」、匯出檔大小合理、IMPDP SQLFILE 驗證可導入性無 ORA-39xxx 錯誤、行數與來源一致
第三方/存儲快照檢查備份軟體控制台狀態、快照一致性標記、掛載測試讀取RPO/RTO 符合 SLA

E. 表空間空間與碎片雙維巡檢

-- 空間使用率 + 碎片指標合一查詢
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% 預警

F. 回滾段/UNDO 狀態巡檢

  • 查詢 V$ROLLSTAT:所有線上回滾段 STATUS=ONLINE,離線段僅限特定批次任務預留
  • DBA_ROLLBACK_SEGS 核對儲存參數與名單一致性
  • 關注 V$UNDOSTAT:MAXQUERYLEN、SSOLDERRCNT(ORA-01555 計數)異常升高 → 擴充 UNDO 表空間或調大 UNDO_RETENTION

G. 段擴展異常增長識別 — 防患於未然

  1. 收集段大小基線:ANALYZE_5PCT.SQL(5% 採樣 ANALYZE)或 DBMS_STATS
  2. 檢查當前擴展數:NR_EXTENTS.SQL → 識別 EXTENTS 接近 MAX_EXTENTS 或儲存參數 NEXT_EXTENT > 表空間最大連續塊的段
  3. 查詢表/索引大小趨勢、增長率預測
  4. 異常段 → 調整儲存參數、移至大表空間、分區化重構

H. 系統資源三維剖析(CPU/記憶體/I/O)

# 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

三、周維護專項作業

A. 違規物件掃描與修正

  • NEXT_EXTENT 一致性:同表空間段的 NEXT_EXTENT 應一致(DATAHI 1G、DATALO 500M、INDEXES 256M 等標準) → NEXTEXT.SQL 掃描、EXISTEXT.SQL 核對
  • 主鍵完整性:NO_PK.SQL (無 PK 表)、DIS_PK.SQL (PK 失效)、NONUPK.SQL (PK 索引非唯一) → 修正腳本自動生成 DDL
  • 索引表空間歸屬:所有索引強制在 INDEX 表空間 → MKREBUILD_IDX.SQL 生成 ALTER INDEX ... REBUILD TABLESPACE INDEX_TS

B. 跨環境一致性核對(測試 ↔ 生產)

  • 資料型別一致:DATATYPE.SQL 對比欄位型別/長度/精度
  • 物件結構一致:OBJ_COORD.SQL 對比表/視圖/索引/序列/同義詞/套件 存在性與定義
  • 推薦工具:Quest Schema Compare、Redgate Schema Compare、自研 Python 對比腳本

C. 安全策略與 SQL*Net 審計

  • 掃描 DBA_USERS:鎖定帳號、密碼過期、預設密碼、過度授權 (DBA 角色濫用)
  • 審計 $ORACLE_HOME/network/log/sqlnet.log、listener.log:TNS-12541/12514/12560 連線失敗模式分析

D. Alert Log 歸檔與供應商情報

  • 歸檔:cp alert_.log /archive/alert__$(date +%Y%m%d).log + 壓縮留存 1 年
  • 情報:Oracle Support (MOS)、Oracle Base、OTN、Quest、硬體廠商安全公告 → 關鍵補丁評估錄入變更管理

四、月維護深度分析與規劃

分析維度數據來源分析方法決策輸出
段增長危害趨勢體積指標歷史表、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/雲遷移)
調優與維護收尾變更管理系統、問題管理系統本月所有變更驗收狀態、遺留問題清單、下月計畫確認月度運營報告、管理層匯報材料

五、工具鏈與腳本庫建設建議

  1. 腳本語言統一:Shell (OS 層) + SQL*Plus/PL/SQL (DB 層) + Python (編排/報告/異常處理)
  2. 版本控制:GitLab/GitHub 私有倉庫,分支策略:main(生產)、dev(開發)、hotfix(緊急)
  3. 參數化設計:所有腳本接受環境變數/配置檔傳入 SID、ORACLE_HOME、閾值、通知 Webhook,零硬編碼
  4. 冪等性保證:重複執行不產生副作用(如:重複建立表→忽略、重複授權→忽略)
  5. 測試優先:測試環境全量回歸後,方可推廣生產

總結

維護作業的本質,是將「不可控的風險」轉化為「可度量的指標」,再透過「自動化的流程」持續收斂。本手冊提供的四層節奏、八大日維護步驟、晚間管線、周/月專項分析框架,配合工程化工具鏈,即可構建起從初級 DBA 到資深架構師通用的維護知識體系。請將其內化為團隊的「標準動作」,讓資料庫穩定成為確定性結果,而非運氣遊戲。

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