删除发布遇到的问题(列名:'id'不明确。)
|
maoxiaoming
2025年9月9日 16:45
本文热度 1228
|
一、问题本质
“列名 'id' 不明确”出现在 sp_droppublication 内部,
是 SQL Server 2016-2022 的 产品缺陷(Bug 编号 50031436)。
触发条件:
发布库里曾启用/切换过 Peer-to-Peer 复制;
系统表 MSpeer_lsns / MSpeer_request / MSpeer_response 里存在行;
清理存储过程 sp_MScleanup_peer_metadata 写出二义性 JOIN … id,导致 209 号错误。
→ 因此 标准删除命令被中断,发布删不掉。
二、通用“安全强拆”步骤(适用于所有场景)
| 步骤 | 目的 | 命令或操作 |
|---|
| ① | 可回滚备份 | BACKUP DATABASE [pubDB] TO DISK='…\pubDB_preDrop.bak' |
| ② | 关闭 P2P 开关(若曾打开) | EXEC sp_changepublication @publication=N'PubName',@property=N'peer_to_peer',@value=N'false'; |
| ③ | 手工清空对等元数据 | DELETE FROM dbo.MSpeer_lsns; DELETE FROM dbo.MSpeer_request; DELETE FROM dbo.MSpeer_response; |
| ④ | 再次标准删除 | EXEC sp_droppublication @publication=N'PubName'; |
| ⑤ | 仍失败 → 元数据级强拆 | EXEC sp_removedbreplication @dbname=N'pubDB',@type=N'tran'; |
| ⑥ | 验证 | SELECT name FROM syspublications WHERE name=N'PubName'; 应 0 行 |
三、各场景速查表
事务 / 快照复制
直接走 ①→③→④;失败再走 ⑤。
合并复制
把第 ⑤ 步 @type 换成 'merge' 即可。
两种发布共存
一次 @type='both' 全部清掉。
发布库和分发库分离
在 发布库 上执行 ③④⑤;
在 分发库 上如已无其他发布,可 sp_dropdistributor @no_checks=1 整库拆掉。
该文章在 2025/9/9 16:45:17 编辑过