Ein Datenskript, das einen Cursor für die Auswahl der Zeilen definiert, die heruntergeladen und in der angegebenen Tabelle in der entfernten Datenbank eingefügt oder aktualisiert werden.
In der folgenden Tabelle stellt die Beschreibung den SQL-Datentyp bereit. Wenn Sie Ihr Skript in Java oder .NET schreiben, müssen Sie den entsprechenden Datentyp benutzen. Siehe SQL-Java-Datentypen und SQL-.NET-Datentypen.
In SQL-Skripten können Sie Ereignisparameter mit ihrem Namen oder mit einem Fragezeichen angeben. Die Verwendung von Fragezeichen ist veraltet und es wird empfohlen, benannte Parameter zu verwenden. Sie können nicht Namen und Fragezeichen in einem Skript mischen. Wenn Sie Fragezeichen verwenden, müssen die Parameter in der nachfolgend gezeigten Reihenfolge stehen und sind nur dann optional, wenn keine nachfolgenden Parameter angegeben wurden (z.B. müssen Sie Parameter 1 verwenden, wenn Sie Parameter 2 verwenden möchten). Wenn Sie benannte Parameter verwenden, können Sie beliebige Teilmengen der Parameter in beliebiger Reihenfolge angeben.
Parametername für SQL-Skripten | Beschreibung | Reihenfolge (veraltet für SQL) |
---|---|---|
s.last_table_download |
TIMESTAMP. Zeitpunkt des letzten Downloads der Tabelle. |
1 |
s.remote_id | VARCHAR(128). Die entfernte ID von MobiLink. Sie können die entfernte ID nur dann referenzieren, wenn Sie benannte Parameter verwenden. | Nicht anwendbar |
s.username |
VARCHAR(128). Der MobiLink-Benutzername |
2 |
Keine.
Der MobiLink-Server öffnet mithilfe des Skripts einen schreibgeschützten Cursor, mit dem eine Liste von Zeilen abgerufen wird, die in die entfernte Datenbank heruntergeladen werden sollen.
Sie können für jede Tabelle in der entfernten Datenbank ein download_cursor-Skript benutzen.
Um die Performance bei der Downloadphase der Synchronisation auf UltraLite-Clients zu optimieren, wenn der Bereich der Primärschlüsselwerte außerhalb der aktuellen Zeilen auf dem Device liegt, sollten Sie die Zeilen im Download-Cursor nach dem Primärschlüssel sortieren. Von dieser Optimierung können z.B. Download-Vorgänge von großen Referenztabellen profitieren.
Jedes download_cursor-Skript muss eine SELECT-Anweisung oder einen Aufruf einer Prozedur enthalten, die eine Ergebnismenge zurückgibt. Der MobiLink-Server verwendet diese Anweisung, um einen Cursor in der konsolidierten Datenbank zu definieren.
Das Skript muss alle Spalten auswählen, die mit den Spalten in der entsprechenden Tabelle der entfernten Datenbank übereinstimmen. Die Spalten in der konsolidierten Datenbank können andere Namen haben als die entsprechenden Spalten in der entfernten Datenbank. Ihre Datentypen müssen jedoch kompatibel sein.
Die Spalten müssen in der Reihenfolge ausgewählt werden, in der die entsprechenden Spalten in der entfernten Datenbank definiert sind.
Um den Download unnötiger Zeilen zu vermeiden, sollten Sie zeitstempelbasierte Downloads in Betracht ziehen. Wenn Sie zeitstempelbasierte Downloads verwenden, fügen Sie eine Zeile ähnlich der folgenden in die WHERE-Klausel Ihres download_cursor-Skripts ein:
AND last_modified >= {ml s.last_table_download} |
Dieses Skript muss in SQL implementiert werden. Hinweise zur Java- oder .NET-Verarbeitung von Zeilen finden Sie unter Direkte Zeilenbehandlung.
Wenn Sie READPAST-Tabellen-Hints in download_cursor-Skripten verwenden möchten, da Sie viele Aktualisierungen ausführen, die die Download-Leistung beeinträchtigen, sollten Sie für Downloads stattdessen die Snapshot-Isolation verwenden. Der READPAST-Tabellen-Hint kann Probleme verursachen, wenn er in download_cursor-Skripten verwendet wird. Bei der Verwendung von zeitstempelbasierten Downloads kann der READPAST-Hint dazu führen, dass Zeilen fehlen und dass kein Download einer Zeile in eine entfernte Datenbank möglich ist. Zum Beispiel:
Eine Zeile wird der konsolidierten Datenbank hinzugefügt und festgeschrieben. Die Zeile enthält eine last_modified-Spalte mit einer Zeitangabe des vorhergehenden Tags.
Dieselbe Zeile wird zwar aktualisiert, aber nicht festgeschrieben.
Eine entfernte Datenbank mit einer last_download-Uhrzeit der letzten Woche wird synchronisiert.
Ein download_cursor-Skript versucht, die Zeile unter Verwendung von READPAST auszuwählen, und überspringt die Zeile.
Die Transaktion, die die Zeile aktualisiert hat, wird zurückgesetzt. Die nächste Zeit des letzten Downloads für die entfernte Datenbank wird auf heute vorverlegt.
Ab diesem Punkt wird die Zeile erst dann heruntergeladen, wenn sie aktualisiert wurde. Als mögliche Behelfslösung können Sie ein generate_next_last_download_timestamp- oder modify_next_last_download_timestamp-Skript implementieren und die Zeit des letzten Downloads auf die Anfangszeit der ältesten offenen Transaktion setzen.
Das folgende Beispiel stammt aus einer Oracle-Installation.Die Anweisung kann jedoch mit allen unterstützten Datenbanken eingesetzt werden. Im Beispiel werden alle Zeilen heruntergeladen, die geändert wurden, seit der Benutzer den letzten Datendownload vorgenommen hat, und die mit dem Benutzernamen in der Spalte emp_name übereinstimmen.
CALL ml_add_table_script( 'Lab', 'ULOrder', 'download_cursor', 'SELECT order_id, cust_id, prod_id, emp_id, disc, quant, notes, status FROM ULOrder WHERE last_modified >= {ml s.last_table_download} AND emp_name = {ml s.username}' ) |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |