In dieser Lektion wird davon ausgegangen, dass Sie bereits alle vorherigen Lektionen abgeschlossen haben. Siehe Lektion 1: Erstellen der konsolidierten Datenbank.
Wählen Sie die mit der entfernten Datenbank verbundene Instanz von Interactive SQL und erstellen Sie mithilfe der folgenden SQL-Anweisungen einen Trigger, um den insert_time-Wert für jede Zeile festzulegen, wenn sie eingefügt wird.
CREATE TRIGGER emp_ins AFTER INSERT ON employee REFERENCING NEW AS newrow FOR EACH ROW BEGIN UPDATE employee SET insert_time = CURRENT TIMESTAMP WHERE id = newrow.id END; |
Dieser Zeitstempel wird verwendet, um festzustellen, ob seit der letzten Synchronisation eine Zeile eingefügt wurde. Dieser Trigger wird nicht ausgelöst, wenn dbmlsync übertragene Einfügungen aus der konsolidierten Datenbank anwendet, da Sie später in diesem Beispiel die erweiterte Option FireTriggers deaktivieren werden. Zeilen, die durch den Download eingefügt werden, erhalten den insert_time-Wert "1900-01-01", also den Standardwert, der bei der Erstellung der Tabelle employee definiert wurde. Dieser Wert sollte immer vor dem Beginn des Verarbeitungsfortschritt liegen, damit solche Zeilen nicht als neue Einfügungen behandelt und bei der nächsten Synchronisation nicht hochgeladen werden.
Erstellen Sie als Nächstes, ebenfalls in der entfernten Datenbank, eine Prozedur, die als Ergebnismenge alle eingefügten Zeilen zurückgibt, die Teil des Uploads sein sollen.
CREATE PROCEDURE employee_insert() RESULT( id unsigned integer, name varchar( 256 ), salary numeric( 9,2 ) ) BEGIN DECLARE start_time timestamp; SELECT value INTO start_time FROM #hook_dict WHERE name = 'start progress as timestamp'; // Upload as inserts all rows inserted after the start_time // that were not subsequently deleted SELECT id, name, salary FROM employee e WHERE insert_time > start_time AND NOT EXISTS( SELECT id FROM employee_delete ed WHERE ed.id = e.id ); END; |
Diese Prozedur gibt alle Zeilen zurück, die basierend auf insert_time seit dem letzten erfolgreichen Upload eingefügt und anschließend nicht gelöscht wurden. Der Zeitpunkt des letzten erfolgreichen Uploads wird durch den Wert des Start-Verarbeitungsfortschritts in der Tabelle #hook_dict definiert. Dieses Beispiel benutzt die Standardeinstellung für die erweiterte dbmlsync-Option LockTables, sodass dbmlsync die zu synchronisierenden Tabellen sperrt. Daher brauchen Sie keine Zeilen auszuschließen, die nach dem Verarbeitungsfortschritts-Abschluss eingefügt wurden. Die Tabellensperren verhindern jegliche Vorgänge nach dem Verarbeitungsfortschritts-Abschluss, während der Upload durchgeführt wird.
Fahren Sie fort mit Lektion 4: Umgang mit Aktualisierungen.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |