如何判断推送的本地订阅何时使用/完成?

时间:2011-04-01 19:37:16

标签: sql sql-server-2005 tsql replication

我们有许多本地订阅供应商每天早上用来推送数据。我们希望了解更多关于何时发生这种情况的信息,特别是当它完成使用T-SQL时。

我试过了:

exec sp_replmonitorsubscriptionpendingcmds 'SQL03', 'RSSPA_Common', 'RSSPA_Common_ORA_Tran', 
    'FBHBGISSQL01', 'RSSPA_Fish', 0

但是得到这条消息:

Msg 21482, Level 16, State 1, Procedure sp_replmonitorsubscriptionpendingcmds, Line 32
sp_replmonitorsubscriptionpendingcmds can only be executed in the "distribution" database.

如何判断此订阅的使用时间?

1 个答案:

答案 0 :(得分:0)

由于监控是在经销商(您似乎无法访问)处理的,因此您可以尝试解决方法。第一个假设你有DDL对复制数据库的权利。

向其中一个复制表添加触发器,例如最后一个表以完成更新,这可能是最大的表。这将产生开销,因此保持触发器简单。设计触发器以更新简单表中的时间戳,并使用SQL代理作业来监视该表,并且当时间戳已经过时了1小时,然后启动另一个进程或发送通知。

create table Repl_Monitor (
    LastUpdate datetime not null
    );
GO
insert into Repl_Monitor(LastUpdate)
select GETDATE(); --seed record
GO 

create trigger trg_Repl_Monitor
on dbo.[<replicated table to be montiored>]
for update, insert, delete
as
update Repl_Monitor
set LastUpdate = GETDATE()
GO

如果每日推送由大量插入/删除记录组成,则另一种解决方法是每分钟监视sysindexes中的“行”,然后在一段时间后“行”计数停止波动后通知

select top 1 rows from sysindexes
where id = OBJECT_ID('tableName')
and rows > 0

这具有可忽略的开销,但不如触发器准确。

干杯!