1

SQL Serverデータベースサーバー上のデータベースdistributionまたはデータベースのどこかでレプリケーションが継続しているかどうかを確認できますか?msdb(2005年と2008年の両方)

背景:レプリケーションがX時間以内に正常にマージされなかった場合に、(電子メールで)アラートを出すレプリケーションモニターシステムを作成しています。これを行うために、私は定期的にdistributionデータベースMSreplication_monitordataMSmerge_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_datenext_run_timesysjobs

4

1 に答える 1