MSSQL订阅复制失败:定位和修复(mssql订阅复制失败)

MSSQL订阅复制通常用于减轻数据库累赘负担、增强数据可用性和安全性,但有时由于出现未知错误使复制失败。本文将介绍在MSSQL中发生复制失败时如何定位和修复。

第一步:定位MSSQL订阅复制失败的原因。如果复制管理器报告了详细的错误,则可以通过在SQL Server Errorlog中分析查找错误原因。可以使用“exec sp_readerrorlog”来读取错误日志。否则,可以使用下面的脚本来查找当前复制工作的最后一次状态:

`select distinct j.name as ‘job name’,j.enabled as ‘enabled’,js.step_name as ‘Step Name’,js.step_id as ‘Step Id’,ls.source_supplied_duration_seconds as ‘Time Taken’,

ls.message as ‘Message’

from msdb.dbo.sysjobs j

inner join msdb.dbo.sysjobsteps js on j.job_id = js.job_id

inner join msdb.dbo.sysjobhistory ls on js.job_id = ls.job_id and js.step_id = ls.step_id

where j.name like ‘%distribution%’ order by message desc`

第二步:采取有效的修复措施来修复复制失败。根据不同的原因,可能需要采取不同的修复措施。

1.如果发生的错误是由于Publisher上的 Login失败,可以尝试重新创建一次Subscriber Lgin。

2.如果由于非法的分布式事务引起,可以尝试禁用分布式事务复制传输,使用下面的脚本来关闭:

`exec sp_MSdistributor_disable_distransactions’

3.如果由于订阅数据库没有扩展,则可以使用以下脚本将订阅数据库重新扩展:

`exec sp_addsubscription @publication=, @subscriber=,@destination_db=,@sync_type = ‘replication support only’,@type=’push’

或者,

`exec sp_addsubscription @publication=, @subscriber=,@destination_db=,@sync_type = ‘perform sync’,@type=’push’

第三步:检查MSSQL订阅复制是否生效。可以使用以下脚本检查订阅数据库上的复制状态:

`select * from sys.dm_repl_subscriptions`

该脚本将显示Subscriber状态,以及复制和发布服务器之间的差异大小。对于期望复制失败,可以关闭订阅数据库,并运行以下脚本来重新建立订阅:

`exec sp_subscription_cleanup @subscriber =”,@publication =”,@subscriber_type=”`

如果复制成功生效,最后要记得启用Distribution Database,这可以用下面的脚本来实现:

`exec sp_MSdistributor_enable_distransaction @distributordb= ,@replicationFlags = ‘D’`

以上就是定位和修复MSSQL订阅复制失败的方法。无论是小的数据库还是大的数据库,正确的复制管理和订阅复制配置都是非常重要的。只有严格遵守MSSQL复制失败定位和修复步骤,才能保障数据安全性和一致性。


数据运维技术 » MSSQL订阅复制失败:定位和修复(mssql订阅复制失败)