SQLServer2005レプリケーションをセットアップしたリモートロケーションがいくつかあります。パブリッシャーは、次のようなさまざまな理由で複製に失敗することがあります。
1)ネットワークの問題、
2)加入者の不適切なシャットダウン、
3)ドメインパスワードの変更、
4)SQLパスワードの変更、
5)加入者システムのスイッチをオンにできない。
これが発生したときにSQLサーバーに管理者に電子メールを送信させて、管理者が確認できるようにする方法はありますか?
ありがとう、チャク。
SQLServer2005レプリケーションをセットアップしたリモートロケーションがいくつかあります。パブリッシャーは、次のようなさまざまな理由で複製に失敗することがあります。
1)ネットワークの問題、
2)加入者の不適切なシャットダウン、
3)ドメインパスワードの変更、
4)SQLパスワードの変更、
5)加入者システムのスイッチをオンにできない。
これが発生したときにSQLサーバーに管理者に電子メールを送信させて、管理者が確認できるようにする方法はありますか?
ありがとう、チャク。
エージェントの問題を検出する限り、ログリーダーとディストリビューターがいつ停止するかを知りたいと思います。鉱山もチャドホックのように継続的なレプリケーションですが、アラートを使用してエージェントが停止しているかどうかを通知する方が簡単です。
USE [msdb]
GO
EXEC msdb.dbo.sp_add_alert
@name=N'Distribution agent stopped',
@message_id=0,
@severity=0,
@enabled=1,
@delay_between_responses=2160,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@performance_condition=N'MSSQL$MYDATABASE:Replication Agents|Running|Distribution|=|0',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_update_notification
@alert_name=N'Distribution agent stopped',
@operator_name=N'Amit',
@notification_method = 1
検証/同期エラーの検出はそれほど簡単ではありません。sp_publication_validationを実行する夜間ジョブを設定し、「検証に失敗しました」に関する別のアラートを設定できます。
私が通常これを処理する方法は、レプリケーションエージェントの開始/実行を担当するSQLエージェントジョブを変更することです(レプリケーショントポロジに応じて、さまざまな場所にさまざまなエージェントが存在する可能性があります)。ステップが完了/失敗した場合に実行される「エージェントの実行」ステップの後に、適切なエージェントジョブ(ログリーダーエージェント、配布エージェント、マージエージェント、キューエージェントなど)にジョブステップを追加するだけです(継続的なスケジュールを使用しているかどうかによって異なります)。
たとえば、トランザクションの一方向プッシュパブリケーションを設定している場合、ディストリビューターはディストリビューターで実行されます。ディストリビューターに接続して、このパブリケーションのディストリビューションエージェントの実行を担当するSQLエージェントジョブを見つけた場合、ジョブを変更し、「エージェントの実行」ステップが失敗/完了した場合に特定のグループに電子メールを送信するステップを追加できます。継続的なレプリケーションスケジュールを使用している場合は、「エージェントの実行」ステップが終了した場合にメールにステップを追加するだけです(エージェントが何らかの理由で停止した場合に通知を受け取りたいため)。非連続スケジュールを使用している場合は、代わりに「エージェントの実行」ステップが失敗した場合にのみ電子メールステップを実行することができます。この「電子メール」ステップを構成して、電子メールを送信し、少し一時停止して、
これは、上記で概説したように構成されたディストリビューションエージェントのジョブステップがどのように見えるかを示すスクリーンショットです。
上の写真で、エージェントが停止するたびに実行される「通知、一時停止、再試行」というステップを追加したことがわかります(成功または失敗-これは、継続的なレプリケーションスケジュールを使用しているため、意図的なものであり、単に必要です。何らかの理由でディストリビューションエージェントが実行されていないときはいつでも知ることができます)。この手順では、基本的に特定のグループに電子メールを送信し、1〜2分待ってから、エージェントを再起動します。ロギング、特定のタイムスライスで特定の回数だけ再起動するなど、好きなことを行うためのコードを追加できます。簡単にスクリプト化でき、任意の数のエージェントやパブリケーションなどで繰り返し実行できます(新しいものを確実にするためのスクリプトがあります)あらゆるタイプのトポロジのレプリケーションエージェントには、このタイプの構成が含まれます。
特にレプリケーションについてはよくわかりませんが、 sp_readerrorlogは、データベースインスタンス内からDBログにアクセスできる非常に便利なストアドプロシージャです。必要に応じて、エージェントジョブからのSUCCESS / FAILブランチだけでなく、特定のエラーメッセージに基づいてより適切に応答できる場合があります。もちろん、ストアドプロシージャから直接電子メールを送信することもでき、エラーに最もよく対応できる人(または時刻-昼/夜のシフトコーディネーターなど)に基づいて受信者をカスタマイズできます。
また、潜在的な障害にはネットワークの切断性が含まれることを考えると、ジョブが失敗するのではなく成功した場合に電子メールを送信する方が適切でしょうか。この受信トレイを監視し、期待される成功メッセージを受信しない場合は管理者にエラー通知を送信するように、自分の側で交換ルールを設定することをお勧めします。成功メッセージは簡単に見落とされる可能性があります。一方、交換は常に(通常)警戒しています。