一、問題本質(zhì)
“列名 'id' 不明確”出現(xiàn)在 sp_droppublication 內(nèi)部,
是 SQL Server 2016-2022 的 產(chǎn)品缺陷(Bug 編號 50031436)。
觸發(fā)條件:
發(fā)布庫里曾啟用/切換過 Peer-to-Peer 復制;
系統(tǒng)表 MSpeer_lsns / MSpeer_request / MSpeer_response
里存在行;
清理存儲過程 sp_MScleanup_peer_metadata
寫出二義性 JOIN … id
,導致 209 號錯誤。
→ 因此 標準刪除命令被中斷,發(fā)布刪不掉。
二、通用“安全強拆”步驟(適用于所有場景)
步驟 | 目的 | 命令或操作 |
---|
① | 可回滾備份 | BACKUP DATABASE [pubDB] TO DISK='…\pubDB_preDrop.bak' |
② | 關(guān)閉 P2P 開關(guān)(若曾打開) | EXEC sp_changepublication @publication=N'PubName',@property=N'peer_to_peer',@value=N'false'; |
③ | 手工清空對等元數(shù)據(jù) | DELETE FROM dbo.MSpeer_lsns; DELETE FROM dbo.MSpeer_request; DELETE FROM dbo.MSpeer_response; |
④ | 再次標準刪除 | EXEC sp_droppublication @publication=N'PubName'; |
⑤ | 仍失敗 → 元數(shù)據(jù)級強拆 | EXEC sp_removedbreplication @dbname=N'pubDB',@type=N'tran'; |
⑥ | 驗證 | SELECT name FROM syspublications WHERE name=N'PubName'; 應(yīng) 0 行 |
三、各場景速查表
事務(wù) / 快照復制
直接走 ①→③→④;失敗再走 ⑤。
合并復制
把第 ⑤ 步 @type
換成 'merge'
即可。
兩種發(fā)布共存
一次 @type='both'
全部清掉。
發(fā)布庫和分發(fā)庫分離
在 發(fā)布庫 上執(zhí)行 ③④⑤;
在 分發(fā)庫 上如已無其他發(fā)布,可 sp_dropdistributor @no_checks=1
整庫拆掉。
該文章在 2025/9/9 16:45:17 編輯過