首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 異動複寫移除後手動清殘留預存程序

     編輯:關於SqlServer

一鍵產生清除複寫殘留程序的 DROP 腳本

異動複寫移除後,訂閱端資料庫常殘留大量 sp_MSupd_*、sp_MSdel_*、sp_MSins_* 等系統預存程序。若未清除,不僅佔用物件名稱空間,還可能干擾後續部署或造成混淆。本腳本直接查詢 sys.procedures 產生 DROP PROC 陳述式,複製執行即可批次清理。

清理腳本

SELECT 'DROP PROC dbo.' + name 
FROM sys.procedures
WHERE name LIKE 'sp_MSupd_%'
UNION ALL
SELECT 'DROP PROC dbo.' + name 
FROM sys.procedures
WHERE name LIKE 'sp_MSdel_%'
UNION ALL
SELECT 'DROP PROC dbo.' + name 
FROM sys.procedures
WHERE name LIKE 'sp_MSins_%';

使用步驟

  1. 在目標資料庫執行上述查詢,結果欄位為完整 DROP PROC 陳述式。
  2. 將結果複製到新查詢視窗(建議先備份或用 Transaction 包裹)。
  3. 執行批次刪除,完成後再跑一次查詢確認已無殘留。

擴充:同步清理系統資料表

複寫移除後,sysarticles、syssubscriptions、MSreplication_objects 等系統資料表可能仍存殘留資料。若需徹底淨空,可執行:

-- 僅供參考,執行前請確認環境
EXEC sp_removedbreplication;  -- 最標準的單指令清理複寫中繼資料

注意:sp_removedbreplication 會移除資料庫層級所有複寫中繼資料,請在確認無其他複寫拓撲依賴此資料庫時才使用。

最佳實務

  • 複寫拓撲變更前先截圖/匯出 sys.procedures 列表,事後對照驗證。
  • 生產環境建議在維護時段執行,並搭配資料庫備份。
  • 若使用 AlwaysOn 可用性群組,需在主要複本執行並驗證次要複本同步狀態。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved