DBMotoのエラー通知をもっと柔軟に、フィルタ設定で必要な通知のみをメール送付


DBMotoではグループやレプリケーションごとに細かくメール通知の設定を行えます。

DBMotoでメール通知を行うアラート設定

この設定では、メッセージのステータスによる通知可否を指定する他に、フィルタに一致するもののみを通知するように指定できます。

このフィルタ設定は単純に指定した文字列を含むものもみをフィルタするだけでなく、ANDORNOTの論理演算子を使用することも可能です。

これにより、例えば、ターゲットテーブルの手動更新などで発生する可能性のある一意制約エラーをDBMoto管理への通知からは除外、一意制約エラーに関してのみターゲットテーブルのオーナーに対してエラーをメール通知といった複雑な通知もできます。

※データベースごとにエラーの出力のされ方が異なるため、設定する場合には実際に出力されるエラーを確認し、文字列を指定してください。

例えばOracleをターゲットテーブルとしたレプリケーションの一部レコードが一意制約エラーとなった場合、デフォルトですと下記のような通知が指定したメールアドレスまで送信されます。


[レプリケーション ‘レプリケーション名’ のアラート] DBMoto Automatic Alert Message

** Alert Timestamp: 2018年12月26日 17:31:59
** Alert Type: ReplicationError
** Alert Severity: 高

** Description: レプリケーションのエラーに関するアラート

** Details: レプリケーション ‘レプリケーション名’ は次のエラーを生成しました。: Error inserting a new record (Replication: ‘レプリケーション名’ – Target table: ‘ターゲットテーブル名’)
Oracle.DataAccess.Client.OracleException ORA-00001: 一意制約(Schema.SYS_C007358)に反しています 場所 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck, Int32 isRecoverable)
場所 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
場所 Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
場所 nn.g7()
場所 i1.a(kq A_0, fr A_1, Boolean A_2)


このエラーに関してハンドリングを行うため、上記例でのDBMoto管理者への通知では、ORA-00001(一意制約違反)が含まれていないものを通知するようフィルタ設定します。

NOT “ORA-00001”

各ターゲットテーブルオーナーに対する通知に関しては、送信先ごとにアラートを作成し、ORA-00001(一意制約違反)であり、かつ特定のテーブル名を含む場合のみ通知するようフィルタ設定します。

“ORA-00001” AND “ターゲットテーブル名”

また、特定の複数のエラーに関してのみ通知、かつその中の一部エラーに関しては特定テーブルの場合のみといったフィルタの場合には下記のように設定することもできます。

(“エラーA” AND “テーブル名”) OR “エラーB” OR “エラーC”

このように通知される内容に合わせてフィルタを設定することが可能ですので、単純に全てのエラーと通知するのではなく、エラーに合わせて、通知先を変更するなどの柔軟な設定が可能になっています。

 

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください