Azure SQLにデータベースがあります。オンプレミスデータベースからPush-subscriptionが存在する可能性があります。配布/公開/サブスクリプションが作成および構成されているオンプレミスサーバーにアクセスできません。
購読者や出版社の側からサブスクリプションに関する情報を取得する方法はたくさんありますが、簡単にグーグルできます。同時に、私はどうにかしてサブスクリプション側でサブスクリプションの存在/状態を検出するの方法を見つけることができませんでした。
私の現在の検出方法は間接的です。つまり、新しいレコードが頻繁に出現するテーブルを知っていて、レコードの数を数え、その後1分後にもう一度カウントします。これは、データベースでアクティビティがない夜には役に立ちません。また、1分以上待つ必要があるため、これは不便です。
私が必要とするものは明確かつ直接表示するスクリプト私、サブスクリプションが存在する場合、そしておそらく/可能な場合はいくつかの追加情報:*それがアクティブである場合(現時点でプッシュ側の動作は適切に行われます) *構成されている記事など
サブスクライバー側にトランザクションレプリケーション(プッシュサブスクリプション)用の4つのテーブルがあります。
サブスクライバーデータベースのレプリケーションに関連付けられているオブジェクトごとに1行が含まれます
ローカルサブスクライバデータベースにサービスを提供しているディストリビューションエージェントごとに1行のレプリケーション情報が含まれています
ディストリビューションエージェントと更新可能なサブスクリプションのトリガーによって、サブスクリプションプロパティを追跡するために使用されます
スナップショットが適用されているときにサブスクライバーに正常に配信されたファイルを追跡するために使用されます
この列を使用して、サブスクライバー側でレプリケーションのステータスを監視できます
SELECT login_time,
last_sync_status,
last_sync_summary,
last_sync_time,
spid
FROM dbo.MSsubscription_agents
これが方法です 私はそれをやっています 、not sure if it would work in Azure though
最初に sp_MSforeachdbの代わりにAaron Bertrandのsp_foreachdbを取得
次に、以下のスクリプトでそれを使用します。
---------------------------------------------------------
-- get all info about subscribers in a server
-- marcello miorelli
-- 23-dec-2017
---------------------------------------------------------
IF object_id('TEMPDB..#RADHE_SP2') IS NOT NULL
DROP TABLE #RADHE_SP2
create table #RADHE_SP2 (
publisher sysname NOT NULL,
publisher_db sysname NOT NULL,
publication sysname NOT NULL,
replication_type int,
subscription_type int,
last_updated datetime,
subscriberd_db sysname,
update_mode int,
last_sync_status int,
last_sync_summary nvarchar(4000),
last_sync_time datetime)
declare @db_list NVARCHAR(MAX)
SELECT @db_list = STUFF((
SELECT ', ' + name
FROM sys.databases d
WHERE 1=1
and d.[state] = 0
FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '')
--select @db_list
--exec sp_foreachdb @database_list = @db_list
-- ,@command='use ?; print db_name()'
EXEC sp_foreachdb
@database_list = @db_list,
@command=
'use ?;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
insert into #RADHE_SP2
exec sp_MSenumsubscriptions
'
SELECT * FROM #RADHE_SP2