历史数据清理--方案

 

1.       数据库历史数据清理

 

#创建历史表

create table ag_alert_record_history asselect * from ag_alert_record;

 

select * from ag_alert_record wheremessage_time between sysdate-90 and sysdate order by message_time desc;

 

 

#删除ag_alert_record中90天之前的数据

delete from ag_alert_record where message_time >= trunc(sysdate-20 and message_time <trunc(sysdate-10);

--delete from ag_alert_record wheremessage_time <= sysdate-365;

 

 

#job启动,job第1天同步前1天的数据到历史表中

##1. 创建存储过程

create or replace procedureag_alert_record_synchronous  as  

    begin

  

    insert intoag_alert_record_history

 

(mon_id,message_time,send_time,sender,worker_id,status,response_time,handle_time,handle_user,rule_id,node_no,assembled_mon_id,focus_title)

select

t.mon_id,t.message_time,t.send_time,t.sender,t.worker_id,t.status,t.response_time,t.handle_time,t.handle_user,t.rule_id,t.node_no,t.assembled_mon_id,t.focus_titlefrom ag_alert_record t

wheret.message_time >= trunc(sysdate-1 and t.message_time < trunc(sysdate)order by t.message_time desc;

 

delete from ag_alert_record wheremessage_time <= sysdate-365;

 

end;

 

 

##2. 创建job,第一次在凌晨12点执行,以后每隔1天处理一次

declare job1 number;  

begin 

 dbms_job.submit(job1, 

     what => 'wscde.ag_alert_record_synchronous;', 

     next_date=> to_date('2017-02-23 00:59:59', 'YYYY-MM-DD HH24:MI:SS'), 

     interval=> 'sysdate+1');  

   commit; 

end;

 

##3. 查询job生成的id

select job,broken,what,interval,t.* fromuser_jobs t; 

 

##4.启动job

begin   

     dbms_job.run(24); --jod id  

end;

 

2.       MVC前端历史数据查询修改

 

2.1   删除目前ag_alert_records表数据,不会造成原来逻辑改动,页面控制

 

2.2   新增历史数据查询页面功能,或,实现查询时间实时表与历史表数据拼接返回结果

 

3.       ag_alert_records_history 保存1年记录,一年前的数据导出入文档备份,若未来需要审计,则通过恢复备份数据实现

具体方案:

1.      导出ag_alert_records_history为归档文件,保存

2.      清理ag_alert_records_history 一年前的数据

3.      每隔一年人工备份一次一年前的数据


其中涉及赋权的sql语句如下:

grant execute onag_alert_record_synchronous to wsjob;
grant ALL on AG_ALERT_RECORD_SYNCHRONOUS to wsjob;


### Zabbix历史数据清理方法及配置教程 Zabbix 是一种强大的开源监控解决方案,随着其运行时间的增长,可能会积累大量的历史数据。这些数据如果得不到及时清理,会占用大量磁盘空间并影响性能。以下是针对 Zabbix 历史数据清理的具体方法和配置指南。 #### 数据库结构概述 在 Zabbix 中,主要涉及以下几个与历史数据相关的- `history` 和 `history_uint`: 存储浮点型和整数型的历史数据- `trends` 和 `trends_uint`: 存储趋势数据(通常用于长期存储)。 为了减少冗余数据的影响,可以定期清理不必要的记录[^4]。 --- #### 清理策略一:按天保留每项指标的一条数据 通过 SQL 查询,可以从 `history`, `history_uint`, `trends`, 和 `trends_uint` 中删除多余的记录,仅保留每日一条的数据。具体操作如下: ```sql -- 删除多余的历史数据 (float 类型) delete from history where (itemid, clock) not in ( select itemid, min(clock) from history group by itemid, date_format(from_unixtime(clock), '%Y-%m-%d') ); -- 删除多余的历史数据 (integer 类型) delete from history_uint where (itemid, clock) not in ( select itemid, min(clock) from history_uint group by itemid, date_format(from_unixtime(clock), '%Y-%m-%d') ); -- 删除多余的趋势数据 (float 类型) delete from trends where (itemid, clock) not in ( select itemid, min(clock) from trends group by itemid, date_format(from_unixtime(clock), '%Y-%m-%d') ); -- 删除多余的趋势数据 (integer 类型) delete from trends_uint where (itemid, clock) not in ( select itemid, min(clock) from trends_uint group by itemid, date_format(from_unixtime(clock), '%Y-%m-%d') ); ``` 上述脚本的作用是从每个项目 (`itemid`) 的每日数据中只保留最早的时间戳(`clock`)对应的记录[^4]。 --- #### 清理策略二:设置自动清理机制 除了手动执行 SQL 脚本外,还可以利用 Zabbix 自带的功能来管理过期数据。这可以通过调整以下参数实现: 1. **修改全局保持周期** 编辑 Zabbix Server 配置文件 `/etc/zabbix/zabbix_server.conf` 或者相应的路径,找到或添加以下选项: ```ini # 设置历史数据保存期限为90天 HistoryStoragePeriod=90d # 设置趋势数据保存期限为365天 TrendStoragePeriod=365d ``` 2. **启用维护任务** 确保 Zabbix Server 启用了后台进程以处理数据清理工作。默认情况下,此功能已开启,但如果未生效,则需要检查日志文件确认是否有错误发生。 3. **计划任务补充** 如果希望更灵活地控制清理逻辑,可以在操作系统层面创建 cron 定时任务,调用自定义的 SQL 脚本来完成特定需求。 --- #### 注意事项 - 在执行任何大规模 DELETE 操作之前,请务必备份数据库以防误删重要信息。 - 对于生产环境中的大型数据库,建议分批逐步清除旧数据而不是一次性全部移除,以免造成锁现象从而中断服务。 - 当升级到新版本如 Zabbix 7.x 之后,应重新评估现有架构是否满足新的特性支持情况,并考虑引入智能化运维手段优化整体流程[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值