# PBL-RTX-0005 第3轮收口:一次性本地 MariaDB 全量门禁回归(run_m11b1a_localdb.sh) # 采集时间: 2026-09-22T16:59:10+08:00 # git HEAD: f91aa2e7c6b6eb7eab191eae4f4c8b2ac77b1e37 # 命令: bash tests/run_m11b1a_localdb.sh --------------------------------------------- [runner] datadir=/tmp/m11b1a_localdb_6 port=13306 [runner] mariadbd ready (2s) [runner] db=pbls user=pbls 就绪(一次性库,与项目 test/prod 无关) [runner] full_script() 渲染 12346 bytes -> /tmp/m11b1a_localdb_6/full.sql [runner] 装载 DDL(mariadb CLI + DELIMITER) note m11b-1 migrate: 人工执行,见注释 [runner] DDL 装载 rc=0(stderr 见下,应为空) harness: /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/scripts/pbl_runtime_event_ddl.py [A] 离线层(% 转义 + 判定逻辑静态核验) PASS A1 maintenance_sql 渲染不抛异常(QC#1) rc=0, 3424 bytes(修复前 rc=1 ValueError: unsupported format character 'Y') PASS A2 维护段含完整对象 pbl_runtime_event_ensure_partitions 3 处 PASS A2 维护段含完整对象 pbl_runtime_event_prune_partitions 2 处 PASS A2 维护段含完整对象 ev_pbl_runtime_event_partition_maintain 2 处 PASS A2 DATE_FORMAT 参数为单 %% 形式('%Y-%m-01') 命中 5 处单 % 形式 PASS A2 无 '%%Y' 双写转义残留 grep -c '%Y' = 0 PASS A3 full_script() rc=0 rc=0 PASS A3 %(dbname)s/%(app_user)s 已被替换 残留 0 处 PASS A3 REVOKE 主机通配符为单 %%('pbls'@'%') 命中 'pbls'@'%' = 1,'@%' = 0 PASS A3 break-glass ctx 原样输出 6 处 PASS A4 create_table_sql sha256 == 修复前基线 30a83c8a9d729db9… PASS A5 源码无 'EXPLAIN PARTITIONS ' 废弃语法 grep 命中 0 PASS A5 无未使用查询结果的空转 for 循环 row[3] 命中 0,for k in 命中 0 PASS A6 分区清单来自 information_schema.PARTITIONS+ORDINAL OK PASS A6 落分区判定用 PARTITION(p) 反查 + EXPLAIN FORMAT=JSON OK PASS A6 探针清理 break-glass 逻辑保留 guard_ctx 设置 2 处 / 复位 1 处 PASS A7 CLI --verify rc=0 末行: VERIFY PASS PASS A7 CLI --print rc=0 末行: ); PASS A7 CLI --print-guard rc=0 末行: -- REVOKE UPDATE, DELETE ON `%(dbname)s` PASS A7 CLI --print-maintain rc=0 末行: DO CALL pbl_runtime_event_ensure_partiti PASS A7 CLI --emit rc=0 3 文件: 20260919_m11b_01_create_pbl_runtime_event.sql,20260919_m11b_02_pbl_runtime_event_append_only.sql,20260919_m11b_03_pbl_runtime_event_partition_maintenance.sql PASS A7 --emit 维护段 DATE_FORMAT 单 % 3647 bytes PASS A8 append_only_sql 过程体无非法 RETURN(PBL-RTX-0005 根因) 检出 0 条: 无 PASS A8 渲染产物全文无裸 RETURN 语句 grep -i '^\s*RETURN' 命中 0 处 PASS A8 append-only 守卫未弱化:正向条件 + 单语句 SIGNAL + 双触发器均在位 SIGNAL 3 处 / IF p_table 1 处 PASS A8 过程段 DELIMITER 配对完整(_delimiter_integrity_errors 零错) DELIMITER $$ / DELIMITER ; 配对 OK PASS A8 自检:坏样本(还原 RETURN;)被 _procedure_body_return_errors 检出 检出 1 条: ["[bad_sample] L15 过程体出现非法 RETURN 语句(MariaDB 仅 FUNCTION 可用 RETURN,且该分号会使 CLI 提前切分语句 -> ERROR 1064): 'RETURN;'"] [B] 实库层(一次性本地 MariaDB,不触碰项目 test/prod 库) PASS B1 CLI(mariadb+DELIMITER) 装载 full_script() 后对象齐备 分区 7 个 / 维护过程 2 个 / 触发器 2 个 [verify-db] env=test+harness db=pbls PASS 分区数 实际 7(含 pmax) PASS MAXVALUE 兜底 p202609,p202610,p202611,p202612,p202701,p202702,pmax PASS 跨月插入 2 条探针行(不同月份) PASS 跨月落不同分区 m11bprobe000000_a -> p202609 | m11bprobe000000_b -> pmax PASS 分区裁剪 命中 1/7 分区: p202609 PASS UPDATE 被拒 (-20535, 'PBL_APPEND_ONLY_DENIED') PASS DELETE 被拒 (-20535, 'PBL_APPEND_ONLY_DENIED') PASS B2 verify_db() rc=0 全项 PASS(QC#6) verify-db rc=0 PASS B3 CALL ensure_partitions(9) 补建出新月分区 新增 p202703,p202704,p202705,p202706(分区数 7→11) PASS B4-setup REORGANIZE 拆出过期历史月分区 p202001(保留期语义不变) 分区清单含 p202001=True PASS B4 CALL prune_partitions(2) DROP 旧月分区且保留 pmax DROP p202001(剩余 11 个) PASS B5 _explain_partitions 解析出分区清单 命中 p202609(表内共 11 分区) PASS B6 _locate_row_partition 定位到 information_schema 清单内的分区 h_a -> p202609(清单 p202609,p202610,p202611,p202612,p202701,p202702,p202703,p202704,p202705,p202706,pmax) [汇总] 共 34 项,PASS 34,FAIL 0 HARNESS PASS [runner] harness rc=0 EXIT_CODE=0