リモートデータベースでエラーが発生したときに電子メールによる通知を送信します。電子メールまたはページングシステムを使用して、通知を受信できます。
前提条件
この作業を実行するための前提条件はありません。
Sybase Central で、SQL Anywhere 16 プラグインを使用し、ユーザ Cons として統合データベースに接続します。
エラーが発生したことを電子メールで DBA ユーザに通知するストアドプロシージャを作成します。
たとえば、次の文を実行して sp_LogReplicationError プロシージャを作成します。
CREATE PROCEDURE cons.sp_LogReplicationError ( IN error_text LONG VARCHAR ) BEGIN DECLARE current_remote_user CHAR( 255 ); SET current_remote_user = CURRENT REMOTE USER; // Log the error INSERT INTO cons.replication_audit ( remoteuser, errormsg ) VALUES ( current_remote_user, error_text ); COMMIT WORK; //Now notify the DBA by email that an error has occurred // on the consolidated database. The email should contain the error // strings that the SQL Remote Message Agent is passing to the procedure. IF CURRENT PUBLISHER = 'cons' THEN CALL sp_notify_DBA( error_text ); END IF END; |
電子メールの送信を管理するストアドプロシージャを作成します。
たとえば、次の文を実行して sp_notifiy_DBA プロシージャを作成します。
CREATE PROCEDURE sp_notify_DBA( in msg long varchar) BEGIN DECLARE rc INTEGER; rc=call xp_startmail( mail_user='davidf' ); //If successful logon to mail IF rc=0 THEN rc=call xp_sendmail( recipient='Doe, John; Smith, Elton', subject='SQL Remote Error', "message"=msg); //If mail sent successfully, stop IF rc=0 THEN call xp_stopmail() END IF END IF END; |
エラーの発生を電子メールで DBA に通知するプロシージャを呼び出す replication_error データベースオプションを設定します。
たとえば、次の文を実行して、エラーの発生時に sp_LogReplicationError プロシージャを呼び出します。
SET OPTION PUBLIC.replication_error = 'cons.sp_LogReplicationError'; |
監査テーブルを作成します。
たとえば、次の文を実行して replication_audit テーブルを作成します。
CREATE TABLE replication_audit ( id INTEGER DEFAULT AUTOINCREMENT, pub CHAR(30) DEFAULT CURRENT PUBLISHER, remoteuser CHAR(30), errormsg LONG VARCHAR, timestamp DATETIME DEFAULT CURRENT TIMESTAMP, PRIMARY KEY (id,pub) ); |
次の表は、replication_audit テーブルのカラムを示します。
カラム | 説明 |
---|---|
pub | データベースの現在のパブリッシャ (パブリッシャが挿入されたデータベースを識別する)。 |
remoteuser | メッセージを適用しているリモートユーザ (リモートユーザのデータベースを識別する)。 |
errormsg | replication_error プロシージャに渡されたエラーメッセージ。 |
プロシージャをテストします。
たとえば、リモートデータベースのローと同じプライマリキーを使用するローを統合データベースに挿入します。このローが統合データベースからリモートデータベースにレプリケートされると、プライマリキーの競合エラーが発生し、次の処理が実行されます。
リモートデータベースの SQL Remote Message Agent (dbremote) が、その出力ログに次のメッセージを出力する。
"cons" (0-0000000000-0) メッセージを受信しました。 SQL 文が失敗しました:(-193) テーブル 'reptable' のプライマリキーがユニークではありません。 INSERT INTO cons.reptable(id,text,last_contact) VALUES (2,'dave','1997/apr/21 16:02:38.325') COMMIT WORK |
統合データベースに次の INSERT 文が送信される。
INSERT INTO cons.replication_audit ( id, pub, remoteuser, errormsg, "timestamp") VALUES ( 1, 'cons', 'sales', 'primary key for table ''reptable'' is not unique (-193)', '1997/apr/21 16:03:13.836'); COMMIT WORK; |
次のメッセージを含む電子メールが John Doe と Elton Smith に送信される。
primary key for table 'reptable' is not unique (-193) INSERT INTO cons.reptable( id,text,last_contact ) VALUES (2,'dave','1997/apr/21 16:02:52.605') |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |