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

Oracle 數據庫連接檢測 Shell 腳本實戰:高併發壓測與穩定性驗證自動化方案

     編輯:Oracle 教學

Oracle 數據庫連接檢測 Shell 腳本實戰:高併發壓測與穩定性驗證自動化方案

一、腳本設計目標

  • 模擬高併發連接場景,暴露監聽器、進程限制、網絡抖動等隱性問題
  • 自動化執行、日志歸檔、結果分類判定
  • 支持 10g/11g/12c/19c 多版本適配

二、核心腳本完整版(增強健壯性)

#!/bin/bash
# Oracle 連接穩定性壓測腳本 v2.0
# 作者:DBA 團隊 | 更新:2024-01-15

# ===== 配置區 =====
ORACLE_USER="bodcmp"
ORACLE_PASS="bodcmp"
ORACLE_SID="ora10g"
LOG_BASE="/home/gapsv4/log/oracle"
CONCURRENT_SESSIONS=50      # 併發會話數
ITERATIONS_PER_SESSION=20   # 每會話迭代次數
CONNECT_TIMEOUT=10          # 連接超時(秒)
QUERY_TIMEOUT=5             # 查詢超時(秒)
# ===================

mkdir -p "${LOG_BASE}"
rm -f "${LOG_BASE}"/check_oracle_*.log

# 驗證 sqlplus 可用
if ! command -v sqlplus &>/dev/null; then
  echo "ERROR: sqlplus not in PATH" >&2
  exit 1
fi

# 並發工作函數
worker() {
  local session_id=$1
  local iter=0
  while [ $iter -lt $ITERATIONS_PER_SESSION ]; do
    local log_file="${LOG_BASE}/check_oracle_${session_id}_${iter}.log"
    local start_ts=$(date +%s%3N)
    
    # 使用 expect 或帶超時的 sqlplus
    timeout ${CONNECT_TIMEOUT} sqlplus -s -l "${ORACLE_USER}/${ORACLE_PASS}@${ORACLE_SID}" <"${log_file}" 2>&1
SET HEADING OFF FEEDBACK OFF ECHO OFF PAGES 0
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
SELECT SYSDATE FROM DUAL;
EXIT
EOF
    local exit_code=$?
    local end_ts=$(date +%s%3N)
    local duration=$((end_ts - start_ts))
    
    # 結果標記
    if [ $exit_code -eq 0 ] && grep -qE '[0-9]{4}-[0-9]{2}-[0-9]{2}' "${log_file}"; then
      echo "SUCCESS|${duration}ms" >> "${log_file}.result"
    elif [ $exit_code -eq 124 ]; then
      echo "TIMEOUT|${CONNECT_TIMEOUT}s" >> "${log_file}.result"
    else
      echo "FAILED|${exit_code}|$(tail -1 ${log_file})" >> "${log_file}.result"
    fi
    
    ((iter++))
    sleep 0.1  # 避免瞬間衝擊
  done
}

# ===== 主程序 =====
echo "啟動 ${CONCURRENT_SESSIONS} 併發會話,每會話 ${ITERATIONS_PER_SESSION} 次迭代..."
pids=()
for ((i=0; i

三、關鍵增強點解析

增強項原版缺陷改進方案
超時控制無連接/查詢超時,卡死風險timeout 命令強制中斷
靜默模式輸出干擾日志解析sqlplus -s -l + SET HEADING OFF
結果結構化人工查看日志.result 文件機器可讀,支持自動化聚合
併發控制無限制 fork 炸彈風險固定併發數 + 迭代間隔
退出碼語義無標準退出碼0=正常 1=偶發 2=異常,對接監控系統

四、部署與監控集成

1. 定時任務部署

# 每 15 分鐘巡檢一次
*/15 * * * * /opt/scripts/check_oracle_conn.sh >> /var/log/oracle_conn_check.log 2>&1

2. Zabbix/普羅米修斯對接

# Zabbix 監控項鍵值
UserParameter=oracle.conn.health,/opt/scripts/check_oracle_conn.sh; echo $?

3. 告警閾值建議

  • Critical:失敗率 > 1% 或 連續 3 次巡檢非 0 退出碼
  • Warning:超時率 > 5% 或 平均連接耗時 > 500ms
  • Info:成功率 100% 但平均耗時 > 200ms(潛在性能退化)

五、常見故障模式識別

現象日志特徵可能原因排查方向
間歇性 ORA-12514TNS:listener does not currently know of service服務未註冊/監聽器重啟檢查 PMON 註冊間隔、LOCAL_LISTENER 參數
ORA-12516/12518/12519Listener could not find available handler進程/會話達到上限調大 PROCESSES/SESSIONS、檢查連接泄漏
ORA-03113/03114End-of-file on communication channel服務器進程異常終止查閱 Alert Log、Trace 文件、OS 內存壓力
連接耗時飆升SUCCESS|2000ms+DNS 解析慢、防火牆握手、監聽器負載高使用 IP 直連、tcptrace 分析、監聽器負載均衡

運維鐵律:連接檢測不僅是「通/不通」的二元判斷,連接建立耗時分布、錯誤碼分布、併發下的成功率曲線才是系統健康度的真實體溫計。建議將此腳本納入 CI/CD 部署驗證、變更前後基線對比、日常巡檢三大體系。

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