删除发布遇到的问题(列名:'id'不明确。)
|
maoxiaoming
2025年9月9日 16:45
本文热度 131
|
一、问题本质
“列名 '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 编辑过