一日,因工作需要,需在Sqlserver200中配置发布和订阅,以使多个数据库之间的数据保持同步。
小生心想,此等小菜大可信手拈来,于是乎,提神挽袖,合并发布-》强制订阅,分分钟搞定。正欲收工之时,屏幕上一道红光闪过,只见复制监视器下赫然出现几个大红叉,煞是醒目,小生心头一紧,随即点开一一查看,同步失败!!!再深入一瞅,错误信息大致如:c(恕小生愚钝,详细信息已记不清了),此等怪事小生今生头回遇见,难道是时辰不对?可在小生去了趟WC回来后,错误依然,看来非时辰之过。
但此等错误小生也是生平头回遇见,为尽快解决战斗,先祭出黄金神器:百度!。将错误信息录入,神器抛出不少锦囊,小生花了整整三个小时逐一试用,无一能解!一招不行,小生遂又祭出终极神器:谷歌!苍天不辜,终极神器就是非同凡响,小生终于在一西域锦囊中发现了点端倪:@@servername!!!
小生这才想起,以前在订阅服务器上安装完SQLServer 后,改过机器名,遂打开查询分析器,输入:
select @@servername
靠!果然是他,查询结果显示的是我以前的机器名,问题八九不离十九出在此地,于是乎,小生将现在的机器名加入并除去旧机器名:
sp_dropserver '旧的机器名'
sp_addserver 'DREAM', 'local'(PS:Dream即是小生机器名)
完毕,重新启动SQL,小生心想这下应该解决战斗。
启动完毕后,进入发布服务器,重新执行合并代理程序.........进行中......晕,又是红叉!小生的心如同落入冰窟,还好小生够坚强,打开错误信息,还好,原来的错误没了,不过一个新的错误诞生了:
进程未能在“Subscriber”上进行生成
错误详细信息:进程未能在“Subscriber”上进行生成。
(源: 合并复制提供程序 (代理程序); 错误代码: -2147200994)
---------------------------------------------------------------------------------------------------------------
无法将 NULL 值插入列 'nicknames',表 'scyz_ext.dbo.MSmerge_genhistory';该列不允许空值。INSERT 失败。
(源: DREAM (数据源); 错误代码: 515)
小生立即回到订阅服务器,查询@@servername,怪了,居然是'NULL’,难怪,遂重新执行命令:
sp_addserver 'DREAM', 'local'(PS:Dream即是小生机器名)
提示:服务器 'DREAM' 已存在,小生一不做二不休,干脆删了重来:
sp_dropserver 'DREAM'
sp_addserver 'DREAM', 'local'(PS:Dream即是小生机器名)
然后再:select @@servername,终于把服务器名改过来了。
再回到发布服务器,重新执行合并代理程序,小生是双手紧拽,汗毛竖立,口念佛语。。。。。。。。
成功!终于成功,红叉消失,屏幕又恢复了往日的平静,似乎刚才的战斗从未发生过,再经过一番测试,完全正确,小生心头一块巨石终于落下,但是为何造成该错误仍然不明,还望高手指教。在此还要谢过那位不知名的西域壮士。
小生因百度类似问题,未见正确解决办法,所以在此写下,后来的仁兄如遇到同样问题,不妨一试,但小生也不能保证此法能解决类似问题。如不能解决,还望口下留情。