“找不到存储过程’’ … 错误:2812”的解决方法

  • Post author:
  • Post category:其他




先声明一下产生该错误的原因:











SQL SERVER 2005


中,有数据库


DB1


,在


A


服务器上。由于要更换服务器,要把数据库


DB1


迁移到


B


服务器上。而


DB1


是用于同步复制的。粗心的你没有把同步复制(发布和订阅)删掉,就直接把


DB1.mdf





DB1_log.ldf


两个文件到


B


服务器上附加。附加成功了,原来的程序都能连接上,你以为大功告成。但是,几天过后,当你想把服务器重新同步复制,以作实时备份时,你发现自己的倒霉时刻到了。


SQL SERVER 2005


像病了一样,只提示:






“找不到存储过程


’’…


错误:


2812















如果你的经历与以下的不完全一致,那么这篇文章可能也值得你参考。









但如果你的经历恰好一样,而且你在


Google





Baidu


上苦寻答案而不觅,那么,这篇文章或者能帮你一把。









如果数据库迁移后,数据并没有更新过。那么你的想法是把这个该死的数据库分离,然后再重新把去掉同步复制的干净的数据库迁移过来。但是,如果你的新数据库已经投入生产,那么,请参考我的方法:









打开


B


服务器上的


DB1


数据库的系统表,你会发现有


12


个表在里面。这


12


个表就是因同步复制而产生的,包括:
















/


视图





有记录





复制必需





Mspeer_lsns









Mspeer_request









Mspeer_response









Mspub_identity_range









Sysarticlecolumns















Sysarticles















Sysarticlesupdates












syspublications















Sysreplservers












Sysschemaarticles












Syssubscriptions















systranschemas









sysextendedarticlesview





















问题就出现在这里了。这


12


个系统表和


1


个视图是因同步复制而生的,如果没有发生同步复制,他们是不会出现的。我们把


mdf





ldf


文件直接迁移过来,数据库里面的这些系统表和视图也随之而来了。









不能简单的把这


12


个系统表和


1


个视图删掉,这样同样不行。在经过了长时间的摸索后,我发现了问题的真正所在。











我们看一下系统表

sysreplservers的内容,有两列:






Srvname





Srvid





旧服务器名称







0






终于找到了问题所在了。我们把该表的记录删除。







然后随便发布一次。







再把该发布删除。










至此,该数据库中的陈旧同步复制信息已经去除,数据库重新变得洁净可爱。




版权声明:本文为rqzhong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。