Files
ai-security-xdr/haobang-security-dm/upgrade-doc/v2/database/80-late-replay-backfill-template.sql
T

62 lines
2.6 KiB
SQL
Raw Normal View History

-- =============================================================================
-- 脚本: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;