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) » MobiLink - Clientadministration » SQL Anywhere-Clients für MobiLink » Ereignis-Hooks für SQL Anywhere-Clients

 

sp_hook_dbmlsync_all_error

Mit dieser gespeicherten Prozedur können Sie alle Fehlermeldungstypen von dbmlsync verarbeiten. Sie können beispielsweise den Hook sp_hook_dbmlsync_all_error einführen, um Fehler zu protokollieren oder beim Eintreten eines bestimmten Fehlers eine bestimmte Aktion durchzuführen.

Zeilen in der Tabelle #hook_dict

Name

Wert

Beschreibung

publication_n (in)

Publikation

Die synchronisierten Publikationen, wobei n eine Ganzzahl ist. Es gibt einen publication_n-Eintrag für jede Publikation im Upload. Die Nummerierung von n beginnt bei Null.

MobiLink user (in)

MobiLink-Benutzername

Der MobiLink-Benutzer, für den Sie synchronisieren

script version (in)

Skriptversionsname

Die MobiLink-Skriptversion, die für die Synchronisation verwendet werden soll

error message (in) Fehlermeldungstext Dies ist der Text, der auch im dbmlsync-Log angezeigt wird.
error id (in) Ganzzahl Eine ID, die die Meldung eindeutig identifiziert. In dieser Zeile können Sie die Fehlermeldung identifizieren, da der Meldungstext abweichen kann.
error hook user state (in|out) Ganzzahl

Dieser Wert kann vom Hook eingestellt werden, um Statusinformationen in zukünftigen Aufrufen an die Hooks sp_hook_dbmlsync_all_error, sp_hook_dbmlsync_communication_error, sp_hook_dbmlsync_misc_error, sp_hook_dbmlsync_sql_error oder sp_hook_dbmlsync_end zu übergeben. Wenn einer dieser Hooks zum ersten Mal aufgerufen wird, beträgt der Wert der Zeile "0". Wenn der Hook den Wert der Zeile ändert, wird der neue Wert im nächsten Hook-Aufruf verwendet.

Wenn Sie mit diesem Hook Statusinformationen an den Hook sp_hook_dbmlsync_end übergeben, können Sie den sp_hook_dbmlsync_end-Hook veranlassen, bestimmte Aktionen durchzuführen, beispielsweise die Synchronisation erneut zu starten.

Bemerkungen

Jedes Mal, wenn eine dbmlsync-Fehlermeldung generiert wird, werden die folgenden Hooks aufgerufen:

  • Zunächst wird je nach Fehlertyp einer der folgenden Hooks aufgerufen: sp_hook_dbmlsync_communication_error, sp_hook_dbmlsync_misc_error oder sp_hook_dbmlsync_sql_error. Die Hooks enthalten Informationen, die sich auf den speziellen Fehlertyp beziehen. 'Sqlcode' und 'sqlstate' beispielsweise weisen auf SQL-Fehler hin.

  • Dann wird sp_hook_dbmlsync_all_error aufgerufen. Dieser Hook kann zur Protokollierung aller aufgetretenen Fehler verwendet werden.

Wenn beim Start ein Fehler auftritt, bevor eine Synchronisation initiiert werden konnte, werden die #hook_dict-Einträge für den MobiLink-Benutzer und die Skriptversion auf eine leere Zeichenfolge zurückgesetzt, und in der #hook_dict-Tabelle werden keine publication_n-Zeilen eingestellt.

Diese Prozedur wird in einer eigenen Verbindung ausgeführt, damit sichergestellt ist, dass die dadurch bewirkten Vorgänge nicht verloren gehen, wenn ein Zurücksetzen der Synchronisationsverbindung erfolgt. Wenn dbmlsync keine getrennte Verbindung herstellen kann, wird die Prozedur nicht aufgerufen.

Auf Windows Mobile-Geräten werden Synchronisationstabellen exklusiv gesperrt. Das bedeutet, dass dieser Hook nicht erfolgreich ausgeführt werden kann, wenn er auf eine der Synchronisationstabellen zugreifen muss. Er kann auch nicht ausgeführt werden, wenn er auf Synchronisationstabellen zugreifen muss und Sie die erweiterte Option LockTables von dbmlsync auf EXCLUSIVE gesetzt haben. Weitere Hinweise finden Sie unter Erweiterte Option LockTables (lt).

Die Aktionen dieser Prozedur werden sofort nach Beenden des Hooks festgeschrieben.

Siehe auch
Beispiel

Nehmen wir an, Sie verwenden die folgende Tabelle, um Fehler in der entfernten Datenbank zu protokollieren.

CREATE TABLE error_log
(
 pk INTEGER DEFAULT AUTOINCREMENT PRIMARY KEY,
 err_id INTEGER,
 err_msg VARCHAR(10240),
);

Im folgenden Beispiel werden Fehler mithilfe von sp_hook_dbmlsync_all_error protokolliert.

CREATE PROCEDURE sp_hook_dbmlsync_all_error()
BEGIN
 DECLARE msg VARCHAR(10240);
 DECLARE id INTEGER;

 // get the error message text
 SELECT value INTO msg
  FROM #hook_dict
  WHERE name ='error message';

 // get the error id
 SELECT value INTO id
  FROM #hook_dict
  WHERE name = 'error id';

 // log the error information
 INSERT INTO error_log(err_msg, err_id)
  VALUES (msg, id);
END;

Um mögliche Fehler-IDs zu ermitteln, sollten Sie einen Testdurchlauf von dbmlsync durchführen. Wenn dbmlsync beispielsweise den Fehler "Verbindung mit MobiLink-Server kann nicht hergestellt werden" zurückgibt, fügt sp_hook_dbmlsync_all_error folgende Zeile in error_log ein:

1,14173,
 'Unable to connect to MobiLink server'

Nun können Sie den Fehler "Unable to connect to MobiLink server" (Verbindung mit MobiLink-Server kann nicht hergestellt werden) mit der Fehler-ID 14173 in Verbindung bringen.

Im folgenden Beispiel werden Hooks so eingerichtet, dass die Synchronisation neu gestartet wird, sobald der Fehler 14173 auftritt.

CREATE PROCEDURE sp_hook_dbmlsync_all_error()
BEGIN
 IF EXISTS( SELECT value FROM #hook_dict 
    WHERE name = 'error id' AND value = '14173' )
 THEN
    UPDATE #hook_dict SET value = '1' 
       WHERE name = 'error hook user state';
   END IF;
END;

CREATE PROCEDURE sp_hook_dbmlsync_end()
BEGIN
 IF EXISTS( SELECT value FROM #hook_dict 
    WHERE name='error hook user state' AND value='1')
 THEN
    UPDATE #hook_dict SET value = 'sync' 
       WHERE name='restart';
   END IF;
END;

Weitere Hinweise finden Sie unter sp_hook_dbmlsync_end.