当前位置: 首页 > news >正文

达梦数据库-数据文件 (二)

达梦数据库-数据文件(二)-自动监控达梦数据库表空间使用率的 Shell 脚本

自动监控达梦数据库表空间使用率的 Shell 脚本,支持:

  • ✅ 实时计算每个表空间的使用率
  • ✅ 设置阈值告警(如 >80%)
  • ✅ 支持邮件告警(可选)
  • ✅ 日志记录
  • ✅ 可集成到定时任务(crontab)

📄 脚本名称:check_dameng_tablespace.sh

#!/bin/bash# ========================================
# 达梦数据库表空间使用率监控脚本
# 功能:检查表空间使用率,超阈值发送告警
# 作者:DBA
# ========================================# ====== 用户可配置区 ======
DM_HOME="/dm8"
BIN_DIR="$DM_HOME/bin"
DISQL="$BIN_DIR/disql"
DATA_DIR="/dm8/data/DAMENG"# 数据库连接
SYS_USER="SYSDBA"
SYS_PWD="SYSDBA"
DB_PORT="5236"
DB_HOST="localhost"# 告警阈值(百分比)
WARNING_THRESHOLD=80    # 警告
CRITICAL_THRESHOLD=95   # 严重# 邮件配置(可选)
ENABLE_EMAIL=false      # 是否启用邮件告警
SMTP_SERVER="smtp.company.com"
SMTP_PORT="587"
FROM_EMAIL="db-monitor@company.com"
TO_EMAIL="dba@company.com"# 日志文件
LOG_FILE="/tmp/dm_tablespace_monitor.log"
# ==========================# 日志函数
log_info() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] INFO: $*" | tee -a "$LOG_FILE"
}log_warn() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] WARN: $*" | tee -a "$LOG_FILE"
}log_crit() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] CRITICAL: $*" | tee -a "$LOG_FILE"
}# 发送邮件函数(使用 mailx)
send_alert() {local subject="$1"local body="$2"if $ENABLE_EMAIL; thenecho "$body" | mailx -v -s "$subject" \-S smtp="$SMTP_SERVER:$SMTP_PORT" \-S from="$FROM_EMAIL" \"$TO_EMAIL"log_info "告警邮件已发送: $subject"elselog_info "邮件未启用,告警内容: $subject"fi
}# 检查数据库是否可达
if ! $DISQL $SYS_USER/$SYS_PWD@$DB_HOST:$DB_PORT << EOF > /dev/null 2>&1
SELECT 1 FROM DUAL;
EXIT
EOF
thenlog_crit "数据库连接失败!请检查实例状态"send_alert "【严重】达梦数据库连接失败" "无法连接到达梦数据库,请立即检查!"exit 1
fi# 执行 SQL 查询表空间使用情况
SQL_QUERY="
SET HEADING OFF;
SET FEEDBACK OFF;
SET PAGESIZE 0;
SELECT TBS.TABLESPACE_NAME,ROUND(TBS.TOTAL_MB, 2) AS TOTAL_MB,ROUND(TBS.USED_MB, 2) AS USED_MB,ROUND(TBS.USED_MB / TBS.TOTAL_MB * 100, 2) AS PCT_USED
FROM (SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 AS TOTAL_MB,SUM(USER_BYTES)/1024/1024 AS USED_MBFROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME
) TBS
ORDER BY PCT_USED DESC;
EXIT;
"# 执行查询
RESULT_FILE=$(mktemp)
$DISQL $SYS_USER/$SYS_PWD@$DB_HOST:$DB_PORT << EOF > "$RESULT_FILE"
$SQL_QUERY
EOF# 解析结果并检查阈值
CRITICAL_ALERT=""
WARNING_ALERT=""while IFS=' ' read -r name total_mb used_mb pct_used; do# 跳过空行或标题if [[ -z "$name" || "$name" == "TABLESPACE_NAME" ]]; thencontinuefi# 移除可能的回车符pct_used=$(echo "$pct_used" | tr -d '\r')# 必须是数字才处理if ! [[ "$pct_used" =~ ^[0-9]+\.?[0-9]*$ ]]; thencontinuefilog_info "表空间: $name, 大小: ${total_mb}MB, 已用: ${used_mb}MB, 使用率: ${pct_used}%"if (( $(echo "$pct_used > $CRITICAL_THRESHOLD" | bc -l) )); thenCRITICAL_ALERT="$CRITICAL_ALERT\n表空间 [$name] 使用率 ${pct_used}% (>${CRITICAL_THRESHOLD}%)"elif (( $(echo "$pct_used > $WARNING_THRESHOLD" | bc -l) )); thenWARNING_ALERT="$WARNING_ALERT\n表空间 [$name] 使用率 ${pct_used}% (>${WARNING_THRESHOLD}%)"fi
done < "$RESULT_FILE"# 发送告警
if [ -n "$CRITICAL_ALERT" ]; thenMSG="【严重告警】达梦表空间使用率过高!$CRITICAL_ALERT"log_crit "$MSG"send_alert "【严重】达梦表空间使用率过高" "$MSG"
elif [ -n "$WARNING_ALERT" ]; thenMSG="【警告】达梦表空间使用率偏高!$WARNING_ALERT"log_warn "$MSG"send_alert "【警告】达梦表空间使用率偏高" "$MSG"
elselog_info "所有表空间使用率正常(<${WARNING_THRESHOLD}%)"
fi# 清理临时文件
rm -f "$RESULT_FILE"exit 0

🛠️ 使用方法

1. 保存脚本

vim /dm8/script/check_dameng_tablespace.sh

2. 授予执行权限

chmod +x /dm8/script/check_dameng_tablespace.sh

3. 安装依赖(如果未安装)

# 安装 bc(用于浮点比较)
sudo yum install -y bc# 安装 mailx(用于邮件)
sudo yum install -y mailx

4. 测试脚本

/dm8/script/check_dameng_tablespace.sh

🕒 添加到定时任务(crontab)

每 30 分钟检查一次:

crontab -e# 添加以下行
*/30 * * * * /dm8/script/check_dameng_tablespace.sh

✅ 脚本功能说明

功能说明
自动连接数据库使用 disql 查询 DBA_DATA_FILES
计算使用率按表空间汇总,精确到小数点后两位
分级告警警告(80%)、严重(95%)
日志记录记录到 /tmp/dm_tablespace_monitor.log
邮件告警可选启用,支持 SMTP
临时文件安全使用 mktemp 创建临时文件

📧 邮件告警示例

主题【严重】达梦表空间使用率过高
内容

【严重告警】达梦表空间使用率过高!表空间 [DMHR] 使用率 99.9%
表空间 [TEMP] 使用率 96.2%

✅ 建议配置

项目建议值
WARNING_THRESHOLD80
CRITICAL_THRESHOLD95
ENABLE_EMAILtrue(生产环境)
TO_EMAILDBA 邮箱或运维群组

📊 输出示例(日志)

[2025-08-28 10:30:01] INFO: 表空间: DMHR, 大小: 228.00MB, 已用: 227.80MB, 使用率: 99.91%
[2025-08-28 10:30:01] CRITICAL: 【严重告警】达梦表空间使用率过高!
表空间 [DMHR] 使用率 99.91% (>95%)

🚀 进阶建议

  1. 集成到 Zabbix/Prometheus:将输出转为 JSON,用于可视化监控
  2. 自动扩容:检测到空间不足时,自动执行 ALTER TABLESPACE ADD DATAFILE
  3. 历史趋势分析:将结果写入数据库,生成趋势图

http://www.dtcms.com/a/356704.html

相关文章:

  • 【ShiMetaPi M4-R1】上手:RK3568B2 |开源鸿蒙(OpenHarmony) 开发板上手指南
  • dm8_静默安装简单快速
  • 第一百零二章:AI的“未来电影制片厂CEO”:多模态系统落地项目实战(完整 AI 视频创作平台)
  • mongoDB学习(docker)
  • MYSQL速通(2/5)
  • 【开题答辩全过程】以 基于Spring Boot的网上家庭烹饪学习系统的设计与实现为例,包含答辩的问题和答案
  • 软考-系统架构设计师 办公自动化系统(OAS)详细讲解
  • LeetCode 完全背包 279. 完全平方数
  • 小程序版碰一碰发视频:源码搭建与定制化开发的源头技术解析
  • Java开发MongoDB常见面试题及答案
  • [TG开发]与Reids集成
  • five86: 2靶场渗透
  • LangChain实战(二):环境搭建与Hello World(国内开源模型版)
  • 互联网大厂Java面试:从基础到微服务云原生的深度解析
  • web3简介
  • 克隆态驱动给用户态使用流程
  • Git 8 ,git 分支开发( 切换分支开发,并设置远程仓库默认分支 )
  • 衡石SENSE 6.0技术解析:Workflow到Agent模式如何重塑计算框架
  • 04数据库约束实战:从入门到精通
  • TI-92 Plus计算器:常规计算功能介绍
  • CAN总线(Controller Area Network Bus)控制器局域网总线(二)
  • 动态UI的秘诀:React中的条件渲染
  • 当门禁系统遇上边缘计算,RK3568核心板如何带来智能化变革
  • [vmware][ubuntu]一个linux调用摄像头截图demo
  • 前端vue框架实现反向代理详解
  • 【网弧软著正版】2025最强软著材料AI生成系统,基于GPT5.0
  • 华硕主板 BIOS 提示——GPT header corruption has been detected
  • 港科大开放世界长时域具身导航!LOVON:足式机器人开放词汇目标导航
  • 数据结构 02(线性:顺序表)
  • 第四章 Vue3 + Three.js 实战:GLTF 模型加载与交互完整方案