数据库监控功能-oracle
实现数据库监控功能
定时任务
每天跑两次 上班时间 下班时间
表 实体
public class DatabaseMonitor {private String id;// 类型 0:磁盘监控 1:数据库监控private Integer type;// ip地址private String ip;// 磁盘监控时为盘符路径,数据库监控时为表空间名称private String subject;// 空间大小private String totalSize;// 使用大小private String usedSize;// 剩余大小private String availSize;// 使用率private String usageRate;// 最大表空间 数据库监控使用的字段private String maxSize;// 检测时间private Date gmtCreate;}
查询表空间使用大小sql
SELECT df.tablespace_name AS "tableSpaceName",df.totalspace AS "total",(df.totalspace - tu.totalusedspace) AS "avail",tu.totalusedspace AS "used",df.maxsize AS "max"FROM (SELECT tablespace_name,ROUND(SUM(bytes) / 1048576) TotalSpace,ROUND(SUM(GREATEST(bytes, maxbytes)) / 1048576) MaxSizeFROM dba_data_filesGROUP BY tablespace_name) df,(SELECT ROUND(SUM(bytes) / 1048576) totalusedspace,tablespace_nameFROM dba_segmentsGROUP BY tablespace_name) tuWHERE df.tablespace_name = tu.tablespace_name;
//定时任务
//查询表空间使用
List<PageData> tableSpace = DatabaseMonitorMapper.getTableSpace();
Date date = new Date();
List<DatabaseMonitor> listDatabase = new ArrayList<>();
DatabaseMonitor ddm;
for (PageData pageData : tableSpace) {
ddm = new DatabaseMonitor();
ddm.setId(UUIDGenerator.getUUID());
ddm.setType(1);
ddm.setIp(databaseIp);
ddm.setGmtCreate(date);
ddm.setSubject(pageData.getString("tableSpaceName"));
String total = mbConvertGb(objectConvertInt(pageData.get("total")));
ddm.setTotalSize(total);
String used = mbConvertGb(objectConvertInt(pageData.get("used")));
ddm.setUsedSize(used);
String avail = mbConvertGb(objectConvertInt(pageData.get("avail")));
ddm.setAvailSize(avail);
String usageRate = String.format("%.2f%%", (objectConvertInt(pageData.get("used")) / (double) objectConvertInt(pageData.get("total"))) * 100);
ddm.setUsageRate(usageRate);
String max = mbConvertGb(objectConvertInt(pageData.get("max")));
ddm.setMaxSize(max);
listDatabase.add(ddm);
}
// 入库