在Oracle 19c中如何配置表空间预警脚本发送邮件通知

陌伟吖_5160

陌伟吖_5160

2026-10-10

261人浏览

原创

oracle 19c不内置表空间阈值自动邮件告警功能,须依赖外部脚本+linux邮件工具实现;核心难点在于邮件链路验证、真实使用率手动计算(需联查dba_data_files与dba_free_space并过滤online/permanent表空间)、防误报阈值逻辑及crontab环境变量配置。

在oracle 19c中如何配置表空间预警脚本发送邮件通知

Oracle 19c 本身不内置表空间阈值自动告警邮件功能,必须靠外部脚本+系统级邮件工具(如 mail 或 sendmail)组合实现。核心难点不在 Oracle 端,而在 Linux 邮件链路是否通、脚本能否稳定提取真实使用率、以及阈值判断逻辑是否防误报。

确认 Oracle 19c 能否直接查出准确表空间使用率

Oracle 19c 的 dba_tablespace_usage_metrics 视图只对自动段管理(ASSM)的永久表空间有效,且数据有延迟(默认每小时刷新一次),不能用于实时预警。必须用传统 SQL 手动计算:

  • dba_data_files 获取总分配字节数(注意 autoextensible 和 maxbytes)
  • dba_free_space 获取当前空闲字节数
  • 两者相减再除以总量,才是真实占用率

常见错误是忽略临时表空间、UNDO 表空间或只读表空间,导致脚本报错或结果失真。建议在 SQL 中加 WHERE status = 'ONLINE' AND contents = 'PERMANENT' 过滤。

Linux 邮件发送链路必须提前验证通

很多脚本失败不是 SQL 写错,而是 mail 命令根本发不出去。关键检查点:

  • 执行 which mail 确认命令存在;若无,需 yum install mailx(RHEL/CentOS)或 apt install mailutils(Ubuntu/Debian)
  • /etc/mail.rc 中的 SMTP 配置必须匹配邮箱服务商要求:QQ 邮箱必须用 smtp=smtp.qq.com:587(非 25 端口),且 smtp-auth-password 是「授权码」而非登录密码
  • 测试命令必须带 -v 参数看详细日志:echo "test" | mail -v -s "test" your@email.com

如果提示 535 Error: authentication failed,基本是授权码过期或未开启 SMTP 服务;若卡住无响应,大概率是防火墙或 DNS 解析问题。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载

脚本中阈值判断和防抖逻辑不能省

单纯“一超就发”会导致告警风暴。实际脚本里至少要加两层控制:

  • 只对占用率 > 85% 的表空间输出到告警文件,避免把 99% 和 86% 混在一起发
  • 用 find + grep -q 检查上一次告警是否已发过:比如生成一个 last_alert_$TABLESPACE.log,内容存上次触发时间,两次间隔小于 2 小时则跳过
  • SQL 查询末尾加 HAVING 100-ROUND((NVL(b.bytes_free,0)/a.bytes_alloc)*100,2) > 85,让数据库端过滤,减少传输数据量

示例片段:

sqlplus -s "/ as sysdba"  85;
SPOOL OFF
EXIT
EOF

crontab 权限和环境变量最容易被忽略

Oracle 用户的定时任务常因环境缺失失败:

  • crontab -e 编辑时,必须先 su - oracle,不能只 su oracle,否则 .bash_profile 不加载,sqlplus 找不到
  • crontab 里每行命令前加 source /home/oracle/.bash_profile && 更稳妥
  • 避免在脚本里写死 ORACLE_SID,改用 export ORACLE_SID=$(ps -ef | grep pmon | grep -v grep | awk '{print $8}' | cut -d_ -f3) 动态获取

真正上线前,务必手动运行一次完整脚本,再检查 mail 是否收到、附件内容是否可读、SQL 输出是否有乱码——这些细节一旦漏掉,告警等于没配。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

oracle

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4163

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

891

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1089

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6041

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

2923

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6020

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8081

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1110

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

972

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程