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

SQL Anywhere 11.0.1 (Deutsch) » SQL Remote » SQL Remote-Deployment und -Administration » SQL Remote-Administration » Replikationsfehler berichten und behandeln » Eine Fehlerverarbeitungsprozedur ausführen

 

E-Mail-Benachrichtigung zu Fehlern in entfernten Datenbanken empfangen

Verwenden Sie die folgende Prozedur, um eine E-Mail-Benachrichtigung zu senden, wenn ein Fehler in einer entfernten Datenbank auftritt. Sie können E-Mails oder ein Paging-System verwenden, um die Bestätigungen zu empfangen.

♦  So richten Sie SQL Remote ein, um eine E-Mail-Benachrichtigung von Fehlern zu empfangen (SQL)
  1. Stellen Sie eine Verbindung zur konsolidierten Datenbank als Benutzer Cons her.

  2. Erstellen Sie eine gespeicherte Prozedur, die den DBA-Benutzer per E-Mail benachrichtigt, dass ein Fehler aufgetreten ist:.

    Beispiel: Führen Sie den folgenden Befehl aus, um die sp_LogReplicationError-Prozedur zu erstellen:

    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. Erstellen Sie eine gespeicherte Prozedur, die das Versenden der E-Mails verwaltet.

    Beispiel: Führen Sie den folgenden Befehl aus, um die sp_notifiy_DBA-Prozedur zu erstellen:

    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. Setzen Sie die Datenbankoption replication_error, um die Prozedur aufzurufen, die den DBA per E-Mail benachrichtigt, dass ein Fehler auftritt.

    Beispiel: Führen Sie die folgende Anweisung aus, um die sp_LogReplicationError-Prozedur aufzurufen, wenn ein Fehler auftritt.

    SET OPTION PUBLIC.replication_error =
     'cons.sp_LogReplicationError';
  5. Eine Audit-Tabelle erstellen.

    Beispiel: Führen Sie Folgendes durch, um die Tabelle replication_audit zu erstellen:

    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)
    );

    Die folgende Tabelle beschreibt die Spalten der replication_audit-Tabelle:

    Spalte Beschreibung

    pub

    Aktueller Publikationseigentümer der Datenbank (identifiziert die Datenbank, in die der Publikationseigentümer eingefügt wurde).

    remoteuser

    Entfernter Benutzer, der die Nachricht anwendet (identifiziert die Datenbank, von der der entfernte Benutzer stammt).

    errormsg

    Fehlermeldung, die an die Prozedur replication_error weitergeleitet wird.

  6. Testen Sie Ihre Prozeduren.

    Beispiel: Fügen Sie eine Zeile in die konsolidierte Datenbank ein, die denselben Primärschlüssel wie eine Zeile in einer entfernten Datenbank verwendet. Wenn diese Zeile aus der konsolidierten Datenbank an die entfernte Datenbank repliziert wird, tritt ein Primärschlüsselkonflikt-Fehler auf, und:

    • Der Nachrichtenagent (dbremote) der entfernten Datenbank gibt die folgende Meldung in sein Ausgabelog aus:

      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
    • Die folgende INSERT-Anweisung wird an die konsolidierte Datenbank gesendet:

      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;
    • Eine E-Mail wird an John Doe und Elton Smith mit der folgenden Nachricht gesendet:

      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')
Siehe auch