Mit dieser gespeicherten Prozedur können dbmlsync-Fehler verarbeitet werden, die nicht als Datenbank- oder Verbindungsfehler erkannt werden. Sie können beispielsweise den Hook sp_hook_dbmlsync_misc_error einführen, um Fehler zu protokollieren oder beim Eintreten eines bestimmten Fehlers eine bestimmte Aktion durchzuführen.
Name | Wert | Beschreibung |
---|---|---|
publication_n (in) |
Publikation |
Nicht mehr empfohlen. Verwenden Sie stattdessen subscription_n. Die synchronisierten Publikationen, wobei n eine Ganzzahl ist. Es gibt einen publication_n-Eintrag für jede synchronisierte Publikation. 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, ist der Wert der Zeile 0. Wenn ein Hook den Wert der Zeile ändert, wird der neue Wert im nächsten Hook-Aufruf verwendet. |
subscription_n (in) | Subskriptionsname(n) | Die synchronisierten Subskriptionen, wobei n eine Ganzzahl ist. Dies ist ein subscription_n-Eintrag für jede synchronisierte Subskription. Die Nummerierung von n beginnt bei Null. |
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- oder subscription_n-Zeilen eingestellt.
Die Zeile "error hook user state" bietet ein nützliches Verfahren für die Übergabe der Informationen über die Art des Fehlers an den Hook sp_hook_dbmlsync_end. Anhand dieser Informationen können Sie entscheiden, ob die Synchronisation erneut ausgeführt werden soll.
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.
Da dieser Hook in einer eigenen Verbindung ausgeführt wird, sollten Sie beim Zugriff auf Tabellen vorsichtig sein, die in Ihrer Hook-Prozedur synchronisiert werden, denn diese Tabellen werden von dbmlsync möglicherweise gesperrt. Diese Sperren können zum Fehlschlagen von Vorgängen im Hook oder zu unbegrenzten Wartezeiten führen.
Die Aktionen dieser Prozedur werden sofort nach ihrer Ausführung festgeschrieben.
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 alle Fehlermeldungen mithilfe von sp_hook_dbmlsync_misc_error protokolliert.
CREATE PROCEDURE sp_hook_dbmlsync_misc_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. Die folgende dbmlsync-Befehlszeile bezieht sich beispielsweise auf eine ungültige Subskription:
dbmlsync -c SERVER=custdb;UID=DBA;PWD=sql -s test |
Nun enthält die error_log-Tabelle die folgende Zeile, die sich auf den Fehler mit der Fehler-ID 9931 bezieht:
1,19912, 'Subscription ''test'' not found.' |
Um eine benutzerspezifische Fehlerbehandlung zu ermöglichen, überprüfen Sie die Fehler-ID 19912 in sp_hook_dbmlsync_misc_error.
ALTER PROCEDURE sp_hook_dbmlsync_misc_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); IF id = 19912 THEN // handle invalid subscription END IF; END; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |