feat(upgrade): 增加 升级脚本和部署说明

- 新增达梦数据库结构、幂等索引、统计基线及校验脚本
- 新增 Docker Kafka Retry、DLT、Replay Topic 升级脚本
- 更新生产 Compose,启用 DIRECT 并关闭旧增量捕获和投影
- 补充数据库、Kafka、应用启动及验证说明
- 增加日志和本地生成文件忽略规则
This commit is contained in:
王绍宏
2026-08-24 15:09:36 +08:00
parent 29445c6825
commit f53661931f
15 changed files with 694 additions and 38 deletions
@@ -0,0 +1,142 @@
-- 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;