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

达梦数据库-数据文件(二)-自动监控达梦数据库表空间使用率的 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.pswp.cn/web/94911.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用 Android 平台开发第一个 Kotlin 小程序

安装开发环境下载并安装最新版 Android Studio&#xff08;官方 IDE&#xff09;&#xff0c;安装时勾选 Kotlin 插件。确保 JDK 版本为 11 或更高。创建新项目打开 Android Studio 选择 File > New > New Project&#xff0c;选择 Empty Activity 模板。在配置界面中&am…

Java常用工具类

异常 (Exception)。程序世界并非总是完美的&#xff0c;异常处理机制就是Java为我们提供的优雅应对错误的解决方案。一、为什么需要异常处理&#xff1f;—— 从现实世界说起 想象一下现实生活中的场景&#xff1a; 开车上班&#xff1a;你计划开车去公司&#xff08;正常流程&…

AWS亚马逊云账号注册指南

AWS是全球领先的云计算平台&#xff0c;提供广泛的云服务。账号注册是开端&#xff0c;不管是用来学习、搭建个人项目&#xff0c;还是公司项目部署上线需要&#xff0c;都需要进行这一步。提醒&#xff1a;在使用账户之前&#xff0c;必须要绑定国际的信用卡&#xff1b;通过我…

云计算学习100天-第31天

Keepalived概念keepalived 是Linux下一个轻量级的高可用解决方案主要是通过虚拟路由冗余协议(VRRP)来实现高可用功能Virtual Router Redundancy Protocol起初就是为了补充LVS功能而设计的&#xff0c;用于监控LVS集群内后端真实服务器状态后来加入了VRRP的功能&#xff0c;它出…

2025年视觉、先进成像和计算机技术论坛(VAICT 2025)

会议简介 作为人工智能大数据创新发展论坛的重要分论坛&#xff0c;2025年视觉、先进成像和计算机技术论坛聚焦人工智能感知世界的核心前沿&#xff0c;将于2025年9月18-20日在中国广州广东科学馆举行。 视觉与成像技术是智能系统理解环境的关键&#xff0c;计算机技术则…

MySQL 与 ClickHouse 深度对比:架构、性能与场景选择指南

&#x1f31f; 引言&#xff1a;数据时代的引擎之争 在当今数据驱动的企业环境中&#xff0c;选择合适的数据库引擎成为架构设计的关键决策。想象这样一个场景&#xff1a;特斯拉的实时车况分析系统需要在毫秒级延迟下处理数百万辆汽车的传感器数据&#xff0c;而某电商平台的订…

闭包与内存泄漏:深度解析与应对策略

在 JavaScript 编程中&#xff0c;闭包是一个强大且常用的特性&#xff0c;但如果使用不当&#xff0c;可能会引发内存泄漏问题&#xff0c;影响程序性能甚至导致页面卡顿。本文将深入剖析闭包导致内存泄漏的原理&#xff0c;结合实例讲解&#xff0c;并给出切实可行的避免方法…

open webui源码分析12-Pipeline

Pipeline是 Open WebUI 的一项创新&#xff0c;它 为任何支持 OpenAI API 规范的 UI 客户端带来了模块化、可定制的工作流 —— 甚至更多功能&#xff01;只需几行代码&#xff0c;你就能轻松扩展功能、集成自己的专有逻辑并创建动态工作流。 当你处理计算密集型任务&#xff0…

深入解析 Chromium Mojo IPC:跨进程通信原理与源码实战

在现代浏览器架构中&#xff0c;多进程设计已经成为标配。Chromium 浏览器作为典型的多进程浏览器&#xff0c;其浏览器进程&#xff08;Browser Process&#xff09;、渲染进程&#xff08;Renderer Process&#xff09;、GPU 进程、Utility 进程等之间的通信&#xff0c;依赖…

【自动化测试】测试分类概述-初步接触自动化测试

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 测试分类 了解各种各样的测试方法分类&#xff0c;不是为了墨守成规按照既定方法区测试&#xff0c;而是已了解思维为核心&#xff0c;并了解一些专业名词 根…

【Python办公】快速比较Excel文件中任意两列数据的一致性

目录 专栏导读 项目背景 技术选型 核心技术栈 选型理由 功能特性 🎯 核心功能 🔧 辅助功能 架构设计 整体架构 设计模式 核心代码解析 1. 类初始化和UI设置 2. 文件选择和数据加载 3. 数据比较核心算法 4. 结果导出功能 界面设计详解 布局结构 UI组件选择 性能优化 1. 内存…

nginx的诞生背景、核心优势、与 Apache 的对比

下面用“3 个 1 分钟”帮你快速建立 Nginx 的整体印象&#xff1a; 1 分钟了解它为何诞生&#xff0c;1 分钟看懂它的 5 大核心优势&#xff0c;再花 1 分钟搞清和 Apache 的关键差异。诞生背景&#xff08;2002-2004&#xff09; • 作者&#xff1a;俄罗斯系统工程师 Igor Sy…

算法题打卡力扣第169题:多数元素(easy)

文章目录题目描述解法一&#xff1a;暴力解解法二 排序法解法三&#xff1a;Boyer-Moore 投票算法 (最优解)题目描述 解法一&#xff1a;暴力解 定义一个数组C用于存放nums数组中每个数出现的次数&#xff0c;然后再遍历C&#xff0c;判断C【i】是否大于⌊ n/2 ⌋&#xff0c;…

A6.0:PCB的设计流程

第一步&#xff1a;导入网表第二步&#xff1a;结构导入和板框定义1.导入结构文件:加载DXF格式的机械结构图(含板框、定位孔、限高区)&#xff0c;确保元件布局符合物理约束。2.固定器件预放置:将接插件、按键、散热器等结构敏感元件锁定到指定位置&#xff0c;避免后期调整冲突…

深度学习在金融订单簿分析与短期市场预测中的应用

金融订单簿记录了市场上买卖双方的委托订单信息&#xff0c;包括价格、数量、订单类型等关键要素。其数据具有以下特点&#xff1a; 高频性&#xff1a;订单在极短时间内不断产生与变化&#xff0c;数据更新速度极快&#xff0c;每秒可能产生大量新订单。序列性&#xff1a;订单…

C++基础算法——贪心算法

思想&#xff1a;总是做出在当前看来是最好的选择 例题一、排队打水问题 n个人&#xff0c;r个水龙头&#xff0c;花费时间最少的安排&#xff1f;&#xff08;包含等待时间&#xff09; #include<iostream> #include <bits/stdc.h> using namespace std; int ma…

事务和锁(进阶)

事务和锁&#xff08;进阶&#xff09;一.回顾事务1.什么是事务2 为什么要使用事务3 怎么使用事务二.InnoDB和ACID模型三. 如何实现原子性四.如何实现持久性五.隔离性实现原理1.事务的隔离性2.事务的隔离级别3.锁1&#xff09;锁信息2&#xff09; 共享锁和独占锁-Shared and E…

【Mentor Xpedition】预习一下

这个软件不同于一般的PCB设计软件&#xff0c;采用独特的中心库形式&#xff0c;相比cadence的SCH和PCB更紧凑&#xff0c;或者说本就是一家人&#xff0c;不像orcad和allegro强行捆在一起。 基本symbol给原理用&#xff0c;cell给PCB用。

通过代码认识 CNN:用 PyTorch 实现卷积神经网络识别手写数字

目录 一、从代码看 CNN 的核心组件 二、准备工作&#xff1a;库导入与数据加载 三、核心&#xff1a;用代码实现 CNN 并理解各层作用 1.网络层结构 2.重点理解&#xff1a;卷积层参数与输出尺寸计算 四、训练 CNN 五、结果分析 卷积神经网络&#xff08;CNN&#xff09;…

基于SpringBoot和Thymeleaf开发的英语学习网站

角色&#xff1a; 管理员、用户 技术&#xff1a; SpringBoot、Thymeleaf、MySQL、MyBatis、jQuery、Bootstrap 核心功能&#xff1a; 这是一个基于SpringBoot的英语学习平台&#xff0c;旨在为用户提供英语学习资料&#xff08;如书籍、听力、单词&#xff09;的管理和学习功能…