SQL Serverデータベースサーバー上のデータベースdistribution
またはデータベースのどこかでレプリケーションが継続しているかどうかを確認できますか?msdb
(2005年と2008年の両方)
背景:レプリケーションがX時間以内に正常にマージされなかった場合に、(電子メールで)アラートを出すレプリケーションモニターシステムを作成しています。これを行うために、私は定期的にdistribution
データベースMSreplication_monitordata
とMSmerge_sessions
テーブルにクエリを実行しています。レプリケーションがアラート時間を超えたかどうかをテストするために、の各エントリに対して次の手順を実行MSreplication_monitordata
して、最後に成功したレプリケーションがいつであったかを確認します。
select top 1 end_time
from MSmerge_sessions
where runstatus=2 and agent_id=@AgentId
order by end_time desc
runstatus = 2は、「完了」ステータスのみをフィルタリングします(ドキュメントを参照) 。
MSmerge_sessions
問題は、継続的なレプリケーションには、end_timeが継続的に更新されているエントリが1つしかないことですが、状態は3であり、これは「進行中」を意味します。それだけをテストすることはできません。それは、完了する前に失敗する可能性のある非連続レプリケーションセッションを返すためです。
このコラムが役立つかどうかを確認してみましたMSmerge_sessions.current_phase_id
が、文書化されておらず、その意味を推測できません。データベースも試してみました。これはmsdb
、レプリケーションジョブレコードが(sysjobs
テーブルに)保持されている場所だからです。一部のフィールドとフィールドが0であるため、このsysjobschedules
テーブルは有望なようですが、それをにリンクする方法がわかりません。next_run_date
next_run_time
sysjobs