加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer 复写和异常排查

发布时间:2020-12-12 13:38:58 所属栏目:MsSql教程 来源:网络整理
导读:散发者/分发者:一般一个(类似出版社) 发行者/发布者:可以多个(多种书刊) 订阅者:收阅,存储 工厂充当发布者和分发者 总公司SfisRepSrv作为订阅者 工厂主机上作复写,往总公司SfisRepSrv中推数据 1)工厂主机上host文件添加复写主机IP地址(C:windows

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

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

订阅者:收阅,存储


工厂充当发布者和分发者

总公司SfisRepSrv作为订阅者


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


1)工厂主机上host文件添加复写主机IP地址(C:windowsSystem32driversetc)

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就可以了。 有时不重启也可以的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读