如何通过Java程序监控Oracle表空间_JDBC定时执行巡检SQL并推送报警指标

浅杰酱_1680

浅杰酱_1680

2026-03-31

760人浏览

原创

oracle表空间监控需关联dba_tablespaces、dba_data_files与dba_free_space计算使用率,临时表空间单独查v$temp_space_header;jdbc用hikaricp配置keepalivetime、maxlifetime和connectiontestquery防静默断连;告警需按表空间类型分级阈值、去重收敛并带关键字段。

oracle表空间监控sql怎么写才准?

直接查 dba_tablespaces 和 dba_data_files 不够,容易漏掉临时表空间或自动扩展被禁用的场景。关键得把使用率、是否自动扩展、剩余空间三者联动判断。

  • 必须用 dba_tablespaces 关联 dba_data_files + dba_free_space(注意:dba_free_space 对空文件不返回记录,得用 SUM(bytes) 算已用空间)
  • 临时表空间要单独查 v$temp_space_header,它不走 dba_free_space
  • 别信 maxbytes 字段——如果 autoextensible = 'NO',那 maxbytes 就是假上限,真实可用空间就是 bytes
  • 示例片段:
    SELECT t.tablespace_name,<br>                 ROUND((d.bytes - NVL(f.free_bytes, 0)) / d.bytes * 100, 2) AS used_pct,<br>                 d.autoextensible,<br>                 NVL(f.free_bytes / 1024 / 1024, 0) AS free_mb<br>FROM dba_tablespaces t<br>JOIN (SELECT tablespace_name, SUM(bytes) bytes, MAX(autoextensible) autoextensible FROM dba_data_files GROUP BY tablespace_name) d<br>  ON t.tablespace_name = d.tablespace_name<br>LEFT JOIN (SELECT tablespace_name, SUM(bytes) free_bytes FROM dba_free_space GROUP BY tablespace_name) f<br>  ON t.tablespace_name = f.tablespace_name<br>WHERE t.contents != 'UNDO' AND t.status = 'ONLINE';

JDBC定时执行时连接池怎么配才稳?

Oracle巡检不是高并发操作,但得扛住长时间运行+网络抖动。用 HikariCP 是最省心的选择,但默认配置会踩坑。

  • connectionTimeout 别设太短(比如 3000),Oracle TNS 超时可能在 5~10 秒,设太短会导致频繁重连失败
  • 必须开 keepaliveTime(建议 300000),否则 Oracle 的防火墙/中间设备可能静默断连,下次查询直接抛 IO Error: Connection reset
  • maxLifetime 建议设为比 Oracle sqlnet.expire_time 小 60 秒;如果 DBA 没配这个参数,默认是 0(不探测),那就设成 1800000(30 分钟)较安全
  • 别用 DriverManager.getConnection() 手动建连接——没连接复用,每次都是新 TCP 握手,巡检频率一高就触发 ORA-12519

Java里怎么判断该报警而不是只打日志?

阈值不能硬编码在 if 里。巡检的核心是“可配置、可收敛、可追溯”,否则运维半夜收到 20 条重复告警就废了。

  • 用 Map 存每张表空间的当前使用率,和上一次结果比对;只有「首次超限」或「连续超限 N 次」才触发推送(避免瞬时毛刺)
  • 阈值按表空间类型分:普通数据表空间用 85%,SYSTEM 用 75%,TEMP 用 90%——SYSTEM 太高会卡死 DDL,TEMP 高只是影响排序性能
  • 报警内容必须带 tablespace_name、used_pct、free_mb、autoextensible 四个字段,缺一个排查时间翻倍
  • 推送前加个本地锁(比如 synchronized(this) 或 ReentrantLock),防止同一轮巡检中多个线程重复发告警

为什么定时任务总在凌晨挂,但日志没报错?

大概率是 Oracle 的维护窗口或归档模式切换导致连接被静默 kill,而 JDBC 默认不主动探测连接有效性。

  • 别依赖 isClosed()——它只看本地状态,连都断了还返回 false
  • HikariCP 必须配 connectionTestQuery=SELECT 1 FROM DUAL,且 validationTimeout ≥ 3000
  • Spring Boot 用户注意:@Scheduled(fixedDelay = 60000) 如果上一轮执行卡住(比如 SQL 被锁),下一轮不会跳过,会堆积线程,最终 OOM。改用 fixedDelayString = "${check.interval:60000}" + ThreadPoolTaskScheduler 控制并发数为 1
  • 加个兜底检查:每次执行前跑 SELECT SYSDATE FROM DUAL,失败就强制 refresh DataSource

表空间监控真正难的不是查数据,而是把 Oracle 那套“连接半死不活、会话突然消失、归档阻塞写入”的隐性故障,翻译成 Java 里可感知、可恢复的动作。很多问题不是代码写错了,是没把 Oracle 当成一个会呼吸的系统来对待。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

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

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

下载

相关标签:

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

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10717

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7842

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6812

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1164

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

948

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1396

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2829

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20111

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1255

8

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.8万人学习