Wenn Sie ein upload_fetch-Skript oder ein upload_fetch_column_conflict-Skript für eine Tabelle definieren, vergleicht der MobiLink-Server das Pre-Image der Aktualisierung mit den Werten in der vom Skript upload_fetch zurückgegebenen Zeile mit denselben Primärschlüsselwerten. Falls Werte im Pre-Image nicht mit den aktuellen konsolidierten Werten übereinstimmen, erkennt der MobiLink-Server einen Konflikt.
Das upload_fetch-Skript wählt eine einzelne Datenzeile aus einer Tabelle einer konsolidierten Datenbank, die der zu aktualisierenden Zeile entspricht. Ein typisches upload_fetch-Skript hat folgende Syntax:
SELECT Ps1, Ps2, ...Sp1, Sp2, ... FROM Tabellenname WHERE Ps1 = {ml r.Ps1} AND Ps2 = {ml r.Ps2} ... AND Sp1 = {ml r.Sp1} AND Sp2 = {ml r.Sp2} ...
Weitere Hinweise finden Sie unter upload_fetch (Tabellenereignis).
Das Ereignis upload_fetch_column_conflict ist dem Ereignis upload_fetch ähnlich, erkennt einen Konflikt aber nur dann, wenn zwei Benutzer dieselbe Spalte aktualisieren. Verschiedene Benutzer können ein- und dieselbe Zeile aktualisieren, ohne einen Konflikt zu verursachen, aber nicht dieselbe Spalte.
Weitere Hinweise finden Sie unter upload_fetch_column_conflict (Tabellenereignis).
Für jede Tabelle in der entfernten Datenbank kann ein upload-fetch- oder ein upload_fetch_column_conflict-Skript vorhanden sein.
Es ist möglich, dass eine Zeile in der konsolidierten Datenbank geändert wird, nachdem das upload_fetch-Skript einen Konflikt erkennt und bevor die Konfliktlösung abgeschlossen ist. Um dieses Problem, das zu fehlerhaften Daten führen würde, zu vermeiden, können Sie die Skripten upload_fetch oder upload_fetch_column_conflicts mit einer Zeilensperre implementieren.
In konsolidierten SQL Anywhere-Datenbanken können Sie die Schlüsselwörter UPDLOCK oder HOLDLOCK verwenden, wobei UPDLOCK besser für den Mehrbenutzerbetrieb ist. Zum Beispiel:
SELECT Spaltennamen from Tabellenname WITH (UPDLOCK) WHERE Where-Klausel |
Bei Oracle, DB2 LUW und DB2 Mainframe verwenden Sie FOR UPDATE. Zum Beispiel:
SELECT Spaltennamen FROM Tabellenname WHERE Where-Klausel FOR UPDATE OF Spaltenname1, Spaltenname3, Spaltenname6 |
Durch das Festlegen der zu aktualisierenden Spaltennamen sparen Sie Computerressourcen und verbessern die Performance.
Bei Microsoft SQL Server verwenden Sie HOLDLOCK. Zum Beispiel:
SELECT Spaltennamen FROM Tabellenname WITH (HOLDLOCK) WHERE Where-Klausel |
Bei Adaptive Server Enterprise verwenden Sie HOLDLOCK. Zum Beispiel:
SELECT Spaltennamen FROM Tabellenname HOLDLOCK WHERE Where-Klausel |
Sie definieren ein upload_fetch-Skript. Der MobiLink-Server ruft mit dem Skript die aktuelle Zeile in der konsolidierten Datenbank ab und vergleicht sie mit dem Pre-Image der aktualisierten Zeile. Wenn die beiden Zeilen identische Werte enthalten, liegt ein Konflikt vor. Enthalten die beiden Zeilen verschiedene Werte, wurde ein Konflikt erkannt und MobiLink ruft erst Skripten upload_old_row_insert und upload_new_row_insert und anschließend resolve_conflict auf.
Weitere Hinweise finden Sie unter Konflikte mit den resolve_conflict-Skripten lösen.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |