2011-04-01 4 views
0

ベンダーが毎朝データをプッシュするために使用する多数のローカルサブスクリプションがあります。これがいつ起きるか、特に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. 

を?

答えて

0

ディストリビュータで監視されているため(アクセスできないと思われる)、回避策を試すことができます。 1つ目は、レプリケートされたデータベースに対してDDL権限があることを前提にしています。

トリガーをレプリケートされたテーブルの1つに追加します(最後のテーブルなど)。これによりオーバーヘッドが発生し、トリガーを簡単に保ちます。単純なテーブルでタイムスタンプを更新するようにトリガーを設計し、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 

これは無視できるオーバーヘッドの利点がありますが、トリガーほど正確ではありません。

乾杯!

+0

ありがとうございます。私たちは自動プロセスをちょっと後で実行するように調整したので、これをファイルに書き留めますが、もう一度やり直す必要があります。 –

関連する問題