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

Oracle 可用性與表空間監控腳本實戰:從監聽器驗證到段擴展預警

     編輯:Oracle 資料庫基礎

前言

單純 ping 或 ps -ef | grep pmon 無法確認 Oracle 真正可服務。真正的可用性驗證需包含:監聽器通暢、實例可登入、表空間有空間、段可擴展。本文提供生產級 ksh 監控腳本,支援 crontab 定時巡檢、異常郵件告警,可直接落地使用。

一、監控架構設計

  • 實例清單檔:/u01/app/oracle/admin/Get_Oracle_Instance_List,每行格式 SID TNS_NAME SYS_PASSWORD
  • 主腳本:query_Oracle_instances.sh 遍歷清單,逐個實例執行檢查
  • 核心檢查項:
    1. SQL*Net 連線測試(驗證監聽器與實例)
    2. 段擴展上限檢查(extents >= max_extents - 5)
    3. 下一段空間可用性檢查(next_extent > max free space)
  • 告警機制:發現 ORA- 錯誤或閾值觸發,即時郵件通知 NOTIFY_LIST

二、核心腳本完整碼

1. 實例清單範例

# /u01/app/oracle/admin/Get_Oracle_Instance_List
prod_db  prod_tns  SysPass123
dw_db    dw_tns    DwPass456
test_db  test_tns  TestPass789

2. 主調度腳本

#!/bin/ksh
# query_Oracle_instances.sh
. /u01/home/oracle/.profile
/u01/app/oracle/admin/monitororcl `cat /u01/app/oracle/admin/Get_Oracle_Instance_List`
exit

3. 核心監控邏輯 monitororcl

#!/bin/ksh
# monitororcl - Rick Stehno
LOGFIL=/u01/app/oracle/admin/monitordev1.out
NOTIFY_LIST="dba1@company.com,dba2@pager.com"

while [ "$1" != "" ]; do
  ORACLE_INSTANCE=$1
  ORACLE_TNS=$2
  USR_ID=sys
  USR_PASS=$3

  # ---- 檢查 1: 段是否接近 MAX_EXTENTS ----
  sqlplus -s /nolog > $LOGFIL 2>/dev/null <= (max_extents - 5)
     AND segment_name NOT LIKE '1.%';
  EXIT
EOF
  grep -i '^ORA-' $LOGFIL >/dev/null && { echo "$0 failed: check $ORACLE_INSTANCE" | mailx -s "$ORACLE_INSTANCE: Script failed" $NOTIFY_LIST; exit 1; }
  MAXEXTENTS_REACHED=$(awk '{print $1}' $LOGFIL)
  [ "$MAXEXTENTS_REACHED" = "YES" ] && { echo "$0 failed: $ORACLE_INSTANCE max extents reached" | mailx -s "$ORACLE_INSTANCE: max extents reached" $NOTIFY_LIST; exit 1; }

  # ---- 檢查 2: 下一個 extent 能否分配 ----
  sqlplus -s /nolog > $LOGFIL 2>/dev/null < (SELECT MAX(bytes) FROM dba_free_space WHERE tablespace_name = ds.tablespace_name);
  EXIT
EOF
  grep -i '^ORA-' $LOGFIL >/dev/null && { echo "$0 failed: check $ORACLE_INSTANCE" | mailx -s "$ORACLE_INSTANCE: Script failed" $NOTIFY_LIST; exit 1; }
  POSSIBLE_NEXTEXT_FAIL=$(awk '{print $1}' $LOGFIL)
  [ "$POSSIBLE_NEXTEXT_FAIL" = "YES" ] && { echo "$0 failed: $ORACLE_INSTANCE cannot extend segment" | mailx -s "$ORACLE_INSTANCE: cannot extend" $NOTIFY_LIST; exit 1; }

  shift 3
done
echo "Successful completion of $0" `date`
exit 0

三、部署與擴展建議

  1. Crontab 範例:0 * * * * /u01/app/oracle/admin/query_Oracle_instances.sh(每小時巡檢)
  2. 擴充檢查項:在腳本中追加 FRA 使用率、ASM 磁碟組平衡、Data Guard 延遲 等 SQL
  3. 安全強化:密碼勿明文,建議用 Oracle Wallet 或 外部認證
  4. 日誌輪轉:配合 logrotate 管理 monitordev1.out

四、總結

此腳本以「實際登入驗證 + 關鍵空間指標」雙重保障,解決「進程在但服務掛」的誤報痛點。DBA 可按需裁剪 SQL、調整閾值,快速構建零成本、高可靠的 Oracle 巡檢體系。

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