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