-- ============================================================================= -- 脚本:80-late-replay-backfill-template.sql -- 用途:为升级前已经进入 SYSLOG_NORMAL_ALARM、但错过实时规则窗口的历史告警, -- 补建迟到告警分钟桶,之后由新版规则服务进行重放。 -- 性质:可选的数据修复模板,会写入或更新 ANALYSIS_LATE_ALARM_BUCKET。 -- 执行时机:05、06 已成功执行且确实需要补处理历史告警时。 -- -- 重要:本文件包含占位符,不得原样执行。 -- 执行前必须完成: -- 1. 将 DEVICE_ID 替换为一个明确的数字,例如 126; -- 2. 将 START_TIME、END_TIME 替换为明确时间,采用左闭右开范围; -- 3. 先执行下面 USING 括号中的 SELECT,核对设备、时间和分钟数量; -- 4. 一次最多按一小时处理,大范围应分成多个小时依次执行; -- 5. 确认没有选中其他设备的数据。 -- -- 示例范围: -- log_time >= TIMESTAMP '2026-09-06 00:00:00' -- log_time < TIMESTAMP '2026-09-06 01:00:00' -- 表示只处理 00:00:00(含)到 01:00:00(不含)的数据。 -- -- 成功后,受影响分钟在 ANALYSIS_LATE_ALARM_BUCKET 中为 PENDING,或在原任务 -- 正在运行时保持 RUNNING 并增加 requested_generation。随后由规则服务处理。 -- ============================================================================= -- 按“设备 + 事件分钟”合并:已有分钟增加请求代数,新分钟插入一条待处理记录。 MERGE INTO analysis_late_alarm_bucket t USING ( SELECT device_id, TO_TIMESTAMP( TO_CHAR(log_time,'YYYY-MM-DD HH24:MI') || ':00', 'YYYY-MM-DD HH24:MI:SS' ) AS bucket_start FROM syslog_normal_alarm WHERE device_id = DEVICE_ID AND log_time >= TIMESTAMP 'START_TIME' AND log_time < TIMESTAMP 'END_TIME' GROUP BY device_id, TO_TIMESTAMP( TO_CHAR(log_time,'YYYY-MM-DD HH24:MI') || ':00', 'YYYY-MM-DD HH24:MI:SS' ) ) s ON (t.device_id=s.device_id AND t.bucket_start=s.bucket_start) WHEN MATCHED THEN UPDATE SET t.requested_generation=t.requested_generation+1, t.last_observed_at=SYSDATE, t.status=CASE WHEN t.status='RUNNING' THEN 'RUNNING' ELSE 'PENDING' END, t.updated_at=SYSDATE WHEN NOT MATCHED THEN INSERT ( id,device_id,bucket_start,bucket_end,last_observed_at, requested_generation,claimed_generation,processed_generation, status,attempt_count,fencing_token,created_at,updated_at ) VALUES ( SYS_GUID(),s.device_id,s.bucket_start,s.bucket_start+(1.0/1440),SYSDATE, 1,0,0,'PENDING',0,0,SYSDATE,SYSDATE ); -- 提交本次历史补数。 COMMIT;