レプリケーションパブリッシャーがサブスクライバーシステムへの接続に失敗したときに、SQL Serverがエラーメッセージを電子メールで送信する方法

StackOverflow https://stackoverflow.com/questions/1824939

質問

SQL Server 2005レプリケーションをセットアップしたリモートロケーションがいくつかあります。パブリッシャーは、次のようなさまざまな理由で複製に失敗することがあります。

1)ネットワークの問題、

2)サブスクライバーの不適切なシャットダウン、

3)ドメインパスワードの変更、

4)SQLパスワードの変更、

5)サブスクライバーシステムのスイッチオンの失敗。

SQLサーバーから管理者にメールが送信されるようにして、確認できるようにする方法はありますか?

ありがとう、 チャク。

役に立ちましたか?

解決

通常これを処理する方法は、レプリケーションエージェントの開始/実行を担当するSQLエージェントジョブを変更することです(レプリケーショントポロジに応じて、潜在的に異なる場所にさまざまなジョブがあります)。 「エージェントの実行」の後、適切なエージェントジョブ(ログリーダーエージェント、ディストリビューションエージェント、マージエージェント、キューエージェントなど)にジョブステップを追加するだけです。そのステップが完了/失敗した場合/失敗した場合に実行されるステップ(連続スケジュールを使用しているかどうかによって異なります)。

たとえば、トランザクション単方向プッシュパブリケーションのセットアップがある場合、ディストリビューションエージェントはディストリビューターで実行されます。ディストリビューターに接続し、このパブリケーションのディストリビューションエージェントを実行するSql Agentジョブを見つけた場合、ジョブを変更し、「エージェントの実行」が特定のグループにメールを送信するステップを追加できます。ステップは失敗/完了します。連続レプリケーションスケジュールを使用している場合、「エージェントを実行する」がステップが終了します(エージェントが何らかの理由で停止した場合に通知するため)。連続していないスケジュールを使用している場合、代わりに「エージェントの実行」の失敗時にのみメールステップを実行することがあります。ステップ。この「メール」を設定することもできます。メールを送信するステップ、少しの間一時停止してから、エージェントを自動的に再起動してみてください(単に「成功したらステップ1に進む」ようにステップを設定するだけです)。

上記のように構成されたディストリビューションエージェントのジョブステップがどのように見えるかを示すスクリーンショットを次に示します。

通知、一時停止、再起動の手順が設定された配信エージェント

上の写真では、「通知、一時停止、再試行」というステップが追加されていることがわかります。これはエージェントが停止するたびに実行されます(成功または失敗-これは意図的なもので、継続的なレプリケーションスケジュールを使用しているため、何らかの理由でディストリビューションエージェントが実行されていないことを常に知りたい)。このステップでは、基本的に特定のグループに電子メールを送信し、1〜2分待ってから、エージェントを再び起動します。ロギング、特定のタイムスライスで特定の回数だけ再起動など、好きなことを行うためにコードを追加できます。スクリプトは簡単に作成でき、任意の数のエージェント、パブリケーションなどで繰り返し使用できます。あらゆるタイプのトポロジのレプリケーションエージェントには、このタイプの構成が含まれます。環境に展開する方法に応じて、リリースツールに追加するか、実行をスケジュールするだけです。)

他のヒント

エージェントの問題を検出する限り、ログリーダーとディストリビューターがいつ停止したかを知りたいと思います。私もチャドホックのような連続レプリケーションですが、アラートを使用してエージェントが停止しているかどうかを確認する方が簡単だと思います。

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 [検証に失敗しました]で別のアラートを設定します。

特にレプリケーションについてあまり知りませんが、 sp_readerrorlog は非常にデータベースインスタンス内からDBログにアクセスできる便利なストアドプロシージャ。必要に応じて、エージェントジョブからの成功/失敗ブランチだけでなく、特定のエラーメッセージに基づいてより適切に応答できる場合があります。もちろん、ストアドプロシージャから直接メールを送信することもできます。エラーに最もよく応答できる人(または時刻-たとえば、昼/夜シフトコーディネーター)に基づいて受信者をカスタマイズします。

また、ジョブが失敗するのではなく成功する場合は、潜在的な失敗にネットワークの切断が含まれることを考慮して、電子メールを送信する方が適切でしょうか?この受信トレイを監視し、予想される成功メッセージを受信しない場合、管理者へのエラー通知を起動するために、交換ルールを設定することをお勧めします。...人間は絶え間ない刺激と成功メッセージは簡単に見落とされる可能性があります。一方、交換は常に(通常)警戒されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top