Как я могу узнать, когда используется локальная подписка из Push? - PullRequest
0 голосов
/ 01 апреля 2011

У нас есть несколько локальных подписок, которые поставщик использует для отправки нам данных каждое утро. Мы надеемся получить больше информации о том, когда это произойдет и, в частности, когда он завершит работу с 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 голосов
/ 06 апреля 2011

Поскольку мониторинг осуществляется у дистрибьютора (к которому у вас нет доступа), вы можете попробовать обходной путь.Первая предполагает, что у вас есть права 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

Это дает преимущество незначительных накладных расходов, но не так точно, как триггер.

Приветствия!

...