Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Remote » SQL Remote の配備と管理 » SQL Remote の管理 » レプリケーション・エラーのレポートと処理 » エラー処理プロシージャの実行

 

電子メールによるリモート・データベースのエラーに関する通知の受信

次の手順を使用して、リモート・データベースでエラーが発生したときに電子メールによる通知を送信します。電子メールまたはページング・システムを使用して、通知を受信できます。

♦  電子メールによるエラーの通知を送信するように SQL Remote を設定するには、次の手順に従います (SQLの場合)。
  1. ユーザ Cons として統合データベースに接続します。

  2. エラーが発生したことを電子メールで 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 Message Agent is passing to the procedure. 
     IF CURRENT PUBLISHER = 'cons' THEN
      CALL sp_notify_DBA( error_text );
     END IF
    END;
  3. 電子メールの送信を管理するストアド・プロシージャを作成します。

    たとえば、次の文を実行して 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;
  4. エラーの発生を電子メールで DBA に通知するプロシージャを呼び出す replication_error データベース・オプションを設定します。

    たとえば、次の文を実行して、エラーの発生時に sp_LogReplicationError プロシージャを呼び出します。

    SET OPTION PUBLIC.replication_error =
     'cons.sp_LogReplicationError';
  5. 監査テーブルを作成します。

    たとえば、次の文を実行して 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 プロシージャに渡されたエラー・メッセージ。

  6. プロシージャをテストします。

    たとえば、リモート・データベースのローと同じプライマリ・キーを使用するローを統合データベースに挿入します。このローが統合データベースからリモート・データベースにレプリケートされると、プライマリ・キーの競合エラーが発生し、次の処理が実行されます。

    • リモート・データベースの Message Agent (dbremote) が、その出力ログに次のメッセージを出力する。

      Received message from "cons" (0-0000000000-0) 
      SQL statement failed: (-193) primary key for table 'reptable' is not unique 
      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')
参照