首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 2005 錯誤 2812「找不到存儲過程」根因:殘留復制系統表與修復步驟

     編輯:MySQL 資料庫相關知識

故障背景

  • 資料庫 DB1 原在 A 伺服器,配置發行/訂閱復制
  • 直接複製 .mdf/.ldf 到 B 伺服器附加,**未先移除復制**
  • 附加後業務正常,後欲重新配置復制時出錯:找不到存儲過程,錯誤 2812

根因分析

附加資料庫連同帶入 12 個**復制系統表**與 1 個視圖:

MSpeer_lsns, MSpeer_request, MSpeer_response, MSpub_identity_range,
Sysarticlecolumns, Sysarticles, Sysarticlesupdates, syspublications,
Sysreplservers, Sysschemaarticles, Syssubscriptions, systranschemas,
sysextendedarticlesview (視圖)

關鍵問題在 Sysreplservers:

Srvname          Srvid
OldServerName    0

殘留的舊伺服器名稱導致復制子系統誤判拓撲,找不到對應存儲過程。

修復步驟 (經驗證有效)

  1. 刪除殘留記錄:
    DELETE FROM Sysreplservers;
  2. 任意建立一個發行集 (觸發系統表重建)
  3. 刪除剛建立的發行集
  4. 驗證:系統表已重置為空或僅含本機資訊,可正常配置新復制

替代方案 (資料未更新時)

  1. 分離資料庫
  2. 在來源端 (A 伺服器) 正規移除所有發行/訂閱
  3. 重新複製乾淨的 .mdf/.ldf 附加

預防原則

  • **遷移前必須移除復制** (發行集 → 訂閱 → 發行集)
  • 或使用備份/還原 (含 KEEP_REPLICATION 選項視需求)
  • 附加後立即檢查 SELECT * FROM Sysreplservers 是否為空
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved