單純 ping 或 ps -ef | grep pmon 無法確認 Oracle 真正可服務。真正的可用性驗證需包含:監聽器通暢、實例可登入、表空間有空間、段可擴展。本文提供生產級 ksh 監控腳本,支援 crontab 定時巡檢、異常郵件告警,可直接落地使用。
/u01/app/oracle/admin/Get_Oracle_Instance_List,每行格式 SID TNS_NAME SYS_PASSWORDquery_Oracle_instances.sh 遍歷清單,逐個實例執行檢查extents >= max_extents - 5)next_extent > max free space)ORA- 錯誤或閾值觸發,即時郵件通知 NOTIFY_LIST# /u01/app/oracle/admin/Get_Oracle_Instance_List
prod_db prod_tns SysPass123
dw_db dw_tns DwPass456
test_db test_tns TestPass789
#!/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
#!/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
0 * * * * /u01/app/oracle/admin/query_Oracle_instances.sh(每小時巡檢)FRA 使用率、ASM 磁碟組平衡、Data Guard 延遲 等 SQLOracle Wallet 或 外部認證logrotate 管理 monitordev1.out此腳本以「實際登入驗證 + 關鍵空間指標」雙重保障,解決「進程在但服務掛」的誤報痛點。DBA 可按需裁剪 SQL、調整閾值,快速構建零成本、高可靠的 Oracle 巡檢體系。