Files
ai-security-xdr/haobang-security-dm/upgrade-doc/database/03-direct-stats-baseline.sql
T
王绍宏 f53661931f feat(upgrade): 增加 升级脚本和部署说明
- 新增达梦数据库结构、幂等索引、统计基线及校验脚本
- 新增 Docker Kafka Retry、DLT、Replay Topic 升级脚本
- 更新生产 Compose,启用 DIRECT 并关闭旧增量捕获和投影
- 补充数据库、Kafka、应用启动及验证说明
- 增加日志和本地生成文件忽略规则
2026-08-24 15:09:36 +08:00

143 lines
4.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- DIRECT 统计初始化(仅执行一次)。
-- 执行前:停止 syslog-consumer-rule、syslog-consumer,完成 01、02;
-- 将 BUSINESS_DATE 替换为升级日(如 2026-08-24),YYYYMMDD 替换为 20260824。
-- 任一语句报错立即停止并 ROLLBACK;全部成功后再 COMMIT。
ROLLBACK;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 1. 初始化当天设备统计。
INSERT INTO device_daily_stats(
stat_date,device_id,parse_count,non_log_count,
last_receive_time,projection_seq,updated_at
)
SELECT TO_DATE('BUSINESS_DATE','YYYY-MM-DD'),device_id,
SUM(parse_count),SUM(non_log_count),MAX(last_receive_time),0,SYSDATE
FROM (
SELECT device_id,COUNT(*) parse_count,0 non_log_count,
CAST(NULL AS TIMESTAMP) last_receive_time
FROM syslog_normal_data_p_YYYYMMDD
WHERE created_at>=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND created_at<TO_DATE('BUSINESS_DATE','YYYY-MM-DD')+1
AND device_id IS NOT NULL
GROUP BY device_id
UNION ALL
SELECT device_id,COUNT(*),0,CAST(NULL AS TIMESTAMP)
FROM syslog_normal_alarm_p_YYYYMMDD
WHERE created_at>=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND created_at<TO_DATE('BUSINESS_DATE','YYYY-MM-DD')+1
AND device_id IS NOT NULL
GROUP BY device_id
UNION ALL
SELECT device_id,0,COUNT(*),CAST(NULL AS TIMESTAMP)
FROM syslog_non_normal_message_p_YYYYMMDD
WHERE created_at>=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND created_at<TO_DATE('BUSINESS_DATE','YYYY-MM-DD')+1
AND device_id IS NOT NULL
GROUP BY device_id
UNION ALL
SELECT id,0,0,last_receive_time
FROM device_device
WHERE id IS NOT NULL
AND last_receive_time>=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND last_receive_time<TO_DATE('BUSINESS_DATE','YYYY-MM-DD')+1
) facts
GROUP BY device_id;
-- 2. 初始化当天规则统计。
INSERT INTO normalize_rule_daily_stats(
stat_date,normalize_rule_id,max_log_time,projection_seq,updated_at
)
SELECT TO_DATE('BUSINESS_DATE','YYYY-MM-DD'),normalize_rule_id,
MAX(log_time),0,SYSDATE
FROM (
SELECT normalize_rule_id,log_time
FROM syslog_normal_data_p_YYYYMMDD
WHERE created_at>=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND created_at<TO_DATE('BUSINESS_DATE','YYYY-MM-DD')+1
AND normalize_rule_id IS NOT NULL
UNION ALL
SELECT normalize_rule_id,log_time
FROM syslog_normal_alarm_p_YYYYMMDD
WHERE created_at>=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND created_at<TO_DATE('BUSINESS_DATE','YYYY-MM-DD')+1
AND normalize_rule_id IS NOT NULL
) facts
GROUP BY normalize_rule_id;
-- 3. 初始化采集任务统计。
INSERT INTO device_collect_stats(
device_collect_id,first_success_time,last_success_time,
last_fail_time,projection_seq,updated_at
)
SELECT id,first_time,last_success_time,last_failed_time,0,SYSDATE
FROM device_collect_task;
-- 4. 回填设备今日计数。
UPDATE device_device
SET today_parse_count=0,
today_non_log_count=0,
today_stats_date=TO_DATE('BUSINESS_DATE','YYYY-MM-DD'),
updated_at=SYSDATE;
UPDATE device_device d
SET today_parse_count=(
SELECT s.parse_count
FROM device_daily_stats s
WHERE s.stat_date=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND s.device_id=d.id
),
today_non_log_count=(
SELECT s.non_log_count
FROM device_daily_stats s
WHERE s.stat_date=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND s.device_id=d.id
),
updated_at=SYSDATE
WHERE EXISTS (
SELECT 1
FROM device_daily_stats s
WHERE s.stat_date=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND s.device_id=d.id
);
-- 5. 回填规则最后命中时间,只允许时间向前推进。
UPDATE dm_normalize_rule r
SET first_data_saved_at=CASE
WHEN first_data_saved_at IS NULL OR first_data_saved_at<(
SELECT s.max_log_time
FROM normalize_rule_daily_stats s
WHERE s.stat_date=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND s.normalize_rule_id=r.id
) THEN (
SELECT s.max_log_time
FROM normalize_rule_daily_stats s
WHERE s.stat_date=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND s.normalize_rule_id=r.id
)
ELSE first_data_saved_at
END,
updated_at=SYSDATE
WHERE r.del_flag='0'
AND EXISTS (
SELECT 1
FROM normalize_rule_daily_stats s
WHERE s.stat_date=TO_DATE('BUSINESS_DATE','YYYY-MM-DD')
AND s.normalize_rule_id=r.id
AND s.max_log_time IS NOT NULL
);
UPDATE stats_direct_control
SET rebuild_required=0,updated_at=SYSDATE
WHERE control_name='SYSLOG_STATS';
COMMIT;