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

SQL Anywhere 12.0.1 (Deutsch) » SQL Remote » SQL Remote-Systeme verwalten » Berichterstellung und Behandlung von Replikationsfehlern » Eine Fehlerverarbeitungsprozedur ausführen

 

Empfangen von E-Mail-Benachrichtigungen zu Fehlern in entfernten Datenbanken

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.

 Einrichten von SQL Remote, um bei Fehlern eine E-Mail-Benachrichtigung zu senden (SQL)
  1. Stellen Sie als Benutzer Cons eine Verbindung zur Datenbank mithilfe des Plug-Ins SQL Anywhere 12 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 SQL Remote 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 SQL Remote-Nachrichtenagent (dbremote) der entfernten Datenbank gibt die folgende Meldung in sein Ausgabelog aus:

      Nachricht von "cons" erhalten (0-0000000000-0) 
      SQL-Anweisung fehlgeschlagen: (-193) Primärschlüssel für Tabelle 'reptable' ist nicht eindeutig  
      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