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.
Stellen Sie als Benutzer Cons eine Verbindung zur Datenbank mithilfe des Plug-Ins SQL Anywhere 12 her.
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; |
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; |
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'; |
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. |
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') |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |