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

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

订阅者:收阅,存储


工厂充当发布者和分发者

总公司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,得出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就可以了。 有时不重启也可以的