-- haobang-security-dm 幂等索引升级。 -- 前置:01-schema-upgrade.sql 成功,所有相关旧应用仍保持停止,DBA 已评估索引空间和维护窗口。 -- 任一 CREATE 报错立即停止;禁止通过删除历史数据绕过重复问题。 -- 两张标准化表现场均按 LOG_TIME 做 RANGE 分区。 -- 当前 DM8 现场语法在不指定 GLOBAL 时建立分区索引;唯一键包含完整分区键,因此形成本地唯一索引。 -- 新版 id 是 event_id + normalize_rule_id + rule_version 的确定性 UUID,长度仍为 36 字符。 CREATE UNIQUE INDEX uk_normal_data_log_id ON syslog_normal_data(log_time,id); CREATE UNIQUE INDEX uk_normal_alarm_log_id ON syslog_normal_alarm(log_time,id); -- 规则聚合窗口和算法单事件结果需要跨日幂等,使用全局非分区唯一索引。 -- 历史新增字段保持 NULL,索引只保护新版本写入且幂等字段完整的数据。 CREATE UNIQUE INDEX uk_alarm_rule_window_group ON alarm(rule_id,rule_version,window_start,group_key_hash) GLOBAL; CREATE UNIQUE INDEX uk_alarm_visit_algorithm_event ON alarm_visit(algorithm_id,algorithm_version,event_id,result_type) GLOBAL; -- 结果门禁:前两个必须 UNIQUE/PARTITIONED=YES/VALID;后两个必须 UNIQUE/PARTITIONED=NO/VALID。 SELECT index_name,table_name,uniqueness,partitioned,status FROM user_indexes WHERE index_name IN ( 'UK_NORMAL_DATA_LOG_ID','UK_NORMAL_ALARM_LOG_ID', 'UK_ALARM_RULE_WINDOW_GROUP','UK_ALARM_VISIT_ALGORITHM_EVENT' ) ORDER BY table_name,index_name; -- 旧全局宽字符串索引不属于目标结构。若现场已存在,立即停止并单独评审,禁止在本文件中自动 DROP。 SELECT index_name,table_name,uniqueness,partitioned,status FROM user_indexes WHERE index_name IN ('UK_NORMAL_DATA_EVENT_RULE','UK_NORMAL_ALARM_EVENT_RULE') ORDER BY table_name,index_name;