微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLServer 复写和异常排查

散发者/分发者:一般一个(类似出版社)

发行者/发布者:可以多个(多种书刊)

订阅者:收阅,存储


工厂充当发布者和分发者

总公司SfisRepSrv作为订阅


工厂主机上作复写,往总公司SfisRepSrv中推数据


1)工厂主机上host文件添加复写主机IP地址(C:\windows\System32\drivers\etc\)

127.0.0.1 localhost

61.145.X.X SfisRepSrv


2)总公司SfisRepSrv中还原一份数据库(还原后,复写回来会比较快速同步)


3)工厂主机上配置分发


4)工厂主机上新建发布


5)新进的发布中再新建订阅(事务复制)


6)发布服务器――项目属性――选择非聚集索引(代理――复制代理计划,更改复写时间)


注意:被复写的数据表必须有PK,也就是没有主键的数据表不能被复写;


-----------------------------------------------------------------------------------------


复写常见异常处理:

use distribution

go

-- 查找状态不正常的发布

select status,* from dbo.MSsubscriptions where status<>2

-- 修改状态

update dbo.MSsubscriptions set status=2 where status<>2


错误:应用复制的命令时在订阅服务器上找不到该行

a. 可以采用“主键冲突”错误的处理方式,跳过错误,然后再用tablediff比较两个表的数据差;

b. 在订阅端补充缺失的数据


--使用如下语句找出错误号,失败的代理 得出xact_seqno

select top 100 e.xact_seqno,e.command_id,e.*

from dbo.MSdistribution_history h

join dbo.MSrepl_errors e on h.error_id=e.id

where comments not like '%transaction%'    

order by id desc


-- 在分发数据库上执行:sp_browsereplcmds,注意必须限定开始结束 xact_seqno,0);">得出article_id=79

sp_browsereplcmds '0x0001C2FA0000E607001C00000000','0x0001C2FA0000E607001C00000000'  


select publisher_db,article From dbo.MSarticles where article_id=79 and publication_id=(

select publication_id from MSpublications with(nolock) where publication='publish_lcwsfis')


如复制监视器中未分命令,出现了计数错误,可以先停止订阅列表,然后再同步。


错误提示

进程无法在“WIN-XXX”上执行“sp_replcmds”。 (源: MSsql_REPL,错误号: MSsql_REPL20011)

获取帮助: http://help/MSsql_REPL20011

无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。 (源: MSsqlServer,错误号: 15517)

获取帮助: http://help/15517

进程无法在“WIN-XXX”上执行“sp_replcmds”。 (源: MSsql_REPL,错误号: MSsql_REPL22037)

获取帮助: http://help/MSsql_REPL22037

原因解决办法

  ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [sa]

  ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [fabu]

  USE 数据库

  GO

  sp_changedbowner 'fabu'


 

  进程无法在“WIN-XXX”上执行“sp_repldone/sp_replcounters”

解决办法:

 uses 数据库

 EXEC sp_repldone @xactid =NULL,@xact_segno =NULL,@numtrans = 0,@time =0,@reset =1

  

EXEC sp_replflush,然后再重启sql Server Agent就可以了。 有时不重启也可以的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐