-- S8-STANDARD-DATASET-HARD-CUTOVER-1 · 步骤 1:物理删除「报警规则」整条功能。 -- -- 裁决:S8 的运行时告警判定权威是 ado_s8_watch_rule,从来不是 ado_s8_alert_rule。 -- 取证(三条,互相独立): -- 1. 三个 evaluator 的 IReadOnlyList alertRules 形参,方法体读取次数 = 0; -- 2. 调度器每 tick 查一次该表后转手丢弃(NO-OP READ),本批已连同形参一并删除; -- 3. 全表 1 行(G01_TEST_ALERT / scene 'S2S6_PRODUCTION' 这一已废弃的复合场景码), -- 零 FK、零触发器、零视图引用、除 PRIMARY 外无索引。 -- -- 上一阶段(S8-LEGACY-RUNTIME-RETIREMENT-1)只做到「写入口 410 + 入口下线」。 -- 本阶段是 Hard Cutover:不保留只读 API、不保留表、不保留 410 兼容层。 -- -- ⚠️ 不要与 ado_s8_alert_record 混淆 —— 那是另一张表,有活跃消费方 -- (AidopKanbanController 的看板查询,4 处)。本脚本不碰它。 -- -- 幂等:IF EXISTS + 带条件 DELETE,重复执行无副作用。 -- ── 1. 删除配置入口菜单 ───────────────────────────────────────────────────── -- 上一版(1.0.484)把它置为 Status=2 停用;功能既已物理删除,条目本身不再有意义。 -- 先清 SysRoleMenu 授权行,避免留下指向不存在菜单的悬挂授权。 DELETE rm FROM SysRoleMenu rm JOIN SysMenu m ON m.Id = rm.MenuId WHERE m.Name = 'aidopS8AlertRulesConfig' AND m.Path = '/aidop/s8/config/alert-rules'; DELETE FROM SysMenu WHERE Name = 'aidopS8AlertRulesConfig' AND Path = '/aidop/s8/config/alert-rules'; -- ── 2. 归档后删除表 ───────────────────────────────────────────────────────── -- 表内仅 1 行测试配置(G01_TEST_ALERT,场景码 S2S6_PRODUCTION 已废弃),无人工业务价值。 -- 仍然先归档,只为与 1.0.487 保持同一条口径:**破坏性删除前一律归档**。 -- DROP 之后内容不可恢复 —— 1.0.349 当年建的 *_bak_1_0_349 系列备份表在本库已不复存在, -- 说明"以后总能从别处找回来"这个假设并不成立。 -- -- ⚠️ 必须用 @has_tbl 守卫,不能裸写 `CREATE TABLE IF NOT EXISTS x LIKE y`: -- 实测(MySQL 8)IF NOT EXISTS **不会短路**,源表 y 已被 DROP 时仍报 ERROR 1146。 -- 执行器语义是「Failed 下次启动重跑整个脚本」,一旦 DROP 成功后本脚本才失败, -- 裸写法会在重跑时永久失败 → 应用再也起不来。 -- 幂等:守卫 + CREATE IF NOT EXISTS + INSERT IGNORE + DROP IF EXISTS。 SET @has_tbl := ( SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'ado_s8_alert_rule'); SET @sql := IF(@has_tbl > 0, 'CREATE TABLE IF NOT EXISTS ado_s8_alert_rule_bak_1_0_486 LIKE ado_s8_alert_rule', 'DO 0'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql := IF(@has_tbl > 0, 'INSERT IGNORE INTO ado_s8_alert_rule_bak_1_0_486 SELECT * FROM ado_s8_alert_rule', 'DO 0'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; DROP TABLE IF EXISTS ado_s8_alert_rule;