散发者/分发者:一般一个(类似出版社)
发行者/发布者:可以多个(多种书刊)
订阅者:收阅,存储
工厂充当发布者和分发者
总公司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就可以了。 有时不重启也可以的