--前因:SQL2005升级至2008 R2 导致复制异常
--错误提示:
--SQL2008 日志读取代理器未运行 进程无法在“XXX”上执行"sp_replcmds".
--解决办法:
--1. 执行下面的脚本
use SCM
EXEC sp_repldone @xactid =NULL, @xact_segno =NULL, @numtrans = 0, @time =0, @reset =1
EXEC sp_replflush
/*
i. sp_repldone : 更新标识服务器的上次分布式事务的记录.
此存储过程在发布服务器的发布数据库上执行.
(当 xactid 为 NULL、xact_seqno 为 NULL 并且 reset 是 1 时,日志中的所有复制事务都标记为已分发。此过程在事务日志中存在不再有效的复制事务并且想截断该日志时很有用)
-----
ii. sp_replflush: 刷新项目高速缓存.
为获得高效率,项目定义存储在高速缓存中。每当修改或除去项目定义时,其它复制存储过程都使用 sp_seplflush。
只有一个客户端连接能够具有对给定数据库的日志读取器访问权。如果某个客户端具有对数据库的日志读取器访问权,则执行 sp_replflush 将导致该客户端释放其访问权。这样,其它的客户端就能使用 sp_replcmds 或 sp_replshowcmds 扫描事务日志。
*/
--2. 重启SQL Server Agent服务
--3. 备份订阅端表索引
--4. 复制状态正常后,订阅需要重新初始化
--5. 重新在订阅端建立索引