Dieses Beispiel implementiert den dateibasierten Download für die Snapshot-Synchronisation. Es werden die drei Datenbanken eingerichtet, die für den dateibasierten Download erforderlich sind. Danach wird erläutert, wie die Daten übertragen werden. Sie können entweder das Beispiel einfach durchlesen oder den Text ausschneiden und einfügen, um das Beispiel auszuführen.
Die folgenden Befehle erstellen die drei in dem Beispiel verwendeten Datenbanken, nämlich eine konsolidierte Datenbank, eine entfernte Datenbank und eine Dateidefinitionsdatenbank.
dbinit scons.db dbinit sremote.db dbinit sfdef.db |
Die folgenden Befehle starten die drei Datenbanken und erstellen einen Datenquellennamen, den MobiLink verwendet, um sich mit der konsolidierten Datenbank zu verbinden.
dbeng11 -n sfdef_eng sfdef.db dbeng11 -n scons_eng scons.db dbeng11 -n sremote_eng stremote.db dbdsn -y -w fbd_demo -c "eng=scons_eng;dbf=scons.db;uid=DBA; pwd=sql;astart=off;astop=off" |
Öffnen Sie Interactive SQL, stellen Sie eine Verbindung mit scons.db her, und führen Sie das MobiLink-Setupskript aus. Zum Beispiel:
read "c:\Programme\SQL Anywhere 11\MobiLink\setup\syncsa.sql" |
Starten Sie den MobiLink-Server.
start mlsrv11 -v+ -c "dsn=fbd_demo" -zu+ -ot scons.txt |
In diesem Beispiel enthält die konsolidierte Datenbank eine einzige Tabelle namens T1. Nach der Verbindungserstellung zur konsolidierten Datenbank können Sie folgende SQL-Anweisung ausführen, um Tabelle T1 zu erstellen:
CREATE TABLE T1 ( pk INTEGER PRIMARY KEY, c1 INTEGER ); |
Der folgende Code erstellt eine sogenannte dateibasierte Skriptversion und dann ein Download-Skript für diese Skriptversion.
CALL ml_add_table_script( 'filebased', 'T1', 'download_cursor', 'SELECT pk, c1 FROM T1' ); |
Der folgende Code erstellt eine sogenannte normale Skriptversion und dann Upload- und Download-Skripten für diese Skriptversion.
CALL ml_add_table_script ( 'normal', 'T1', 'upload_insert', 'INSERT INTO T1 VALUES ({ml r.pk}, {ml r.c1})'); CALL ml_add_table_script( 'normal', 'T1', 'upload_update', 'UPDATE T1 SET c1 = {ml r.c1} WHERE pk = {ml r.pk} ' ); CALL ml_add_table_script( 'normal', 'T1', 'upload_delete', 'DELETE FROM T1 WHERE pk = {ml r.pk}' ); CALL ml_add_table_script( 'normal', 'T1', 'download_cursor', 'SELECT pk, c1 FROM T1' ); COMMIT; |
Der folgende Befehl erstellt die gespeicherte Prozedur begin_pub und legt fest, dass begin_pub das begin_publication-Skript für die normale und die dateibasierte Skriptversion ist:
CREATE PROCEDURE begin_pub ( INOUT generation_num integer, IN username varchar(128), IN pubname varchar(128) ) BEGIN SET generation_num=1; END; CALL ml_add_connection_script( 'filebased', 'begin_publication', '{ call begin_pub( {ml s.generation_number}, {ml s.username}, {ml s.publication_name} ) }' ); CALL ml_add_connection_script( 'normal', 'begin_publication', '{ call begin_pub( {ml s.generation_number}, {ml s.username}, {ml s.publication_name} ) }' ); |
In diesem Beispiel enthält die entfernte Datenbank eine einzige Tabelle namens T1. Stellen Sie eine Verbindung zur entfernten Datenbank her und führen Sie die folgende SQL-Anweisung aus, um die Tabelle T1, eine Publikation namens P1 und einen Benutzer namens U1 zu erstellen. Die SQL-Anweisung erstellt außerdem eine Subskription für U1 zu P1.
CREATE TABLE T1 ( pk INTEGER PRIMARY KEY, c1 INTEGER ); CREATE PUBLICATION P1 ( TABLE T1 ); CREATE SYNCHRONIZATION USER U1; CREATE SYNCHRONIZATION SUBSCRIPTION TO P1 FOR U1; |
Der folgende Code erstellt die Einstiegsprozedur sp_hook_dbmlsync_validate_download_file, um benutzerdefinierte Validierungslogik in der entfernten Datenbank zu erstellen:
CREATE PROCEDURE sp_hook_dbmlsync_validate_download_file() BEGIN DECLARE udata varchar(256); SELECT value INTO udata FROM #hook_dict WHERE name = 'user data'; IF udata <> 'ok' THEN UPDATE #hook_dict SET value = 'FALSE' WHERE name = 'apply file'; END IF; END |
In MobiLink-Systemen, die dateibasierte Downloads verwenden, ist eine Dateidefinitionsdatenbank erforderlich. Diese Datenbank hat dasselbe Schema wie die entfernten Datenbanken, die durch dateibasierte Downloads aktualisiert werden, und enthält keine Daten oder Statusinformationen. Die Dateidefinitionsdatenbank dient nur zur Festlegung der Struktur der Daten, die in die Download-Datei einbezogen werden sollen. Eine Dateidefinitionsdatenbank kann für mehrere Gruppen von entfernten Datenbanken verwendet werden, die jeweils von ihrem eigenen MobiLink-Gruppen-Benutzernamen festgelegt werden.
Der folgende Code definiert die Dateidefinitionsdatenbank für dieses Beispiel. Er erstellt ein Schema, das identisch mit der entfernten Datenbank ist, und außerdem Folgendes:
Eine Publikation namens P1, die alle Zeilen der Tabelle T1 veröffentlicht. Derselbe Publikationsname muss in der Dateidefinitionsdatenbank und den entfernten Datenbanken verwendet werden.
Einen MobiLink-Benutzer namens G1. Dieser Benutzer repräsentiert alle entfernten Datenbanken, die beim dateibasierten Download aktualisiert werden sollen.
Eine Subskription der Publikation.
Vor der Ausführung des Codes müssen Sie sich mit sfdef.db verbinden.
CREATE TABLE T1 ( pk INTEGER PRIMARY KEY, c1 INTEGER ); CREATE PUBLICATION P1 ( TABLE T1 ); CREATE SYNCHRONIZATION USER G1; CREATE SYNCHRONIZATION SUBSCRIPTION TO P1 FOR G1; |
Sie müssen Ihre neue entfernte Datenbank für die Übernahme einer Download-Datei vorbereiten, indem Sie entweder eine normale Synchronisation ausführen oder die Download-Datei mit der dbmlsync-Option -bg erstellen. Dieses Beispiel veranschaulicht, wie Sie Ihre neue entfernte Datenbank initialisieren, indem Sie eine normale Synchronisation ausführen.
Sie können eine erste Synchronisation der entfernten Datenbank mit der als normal bezeichneten Skriptversion ausführen, die weiter oben erstellt wurde:
dbmlsync -c "uid=DBA;pwd=sql;eng=sremote_eng; dbf=sremote.db" -v+ -e "sv=normal" |
Stellen Sie eine Verbindung zur konsolidierten Datenbank her und fügen Sie Daten ein, die durch einen dateibasierten Download synchronisiert werden, wie im folgenden Beispiel:
INSERT INTO T1 VALUES( 1, 1 ); INSERT INTO T1 VALUES( 2, 4 ); INSERT INTO T1 VALUES( 3, 9 ); COMMIT; |
Der folgende Befehl muss auf dem Computer ausgeführt werden, auf dem sich die Dateidefinitionsdatenbank befindet. Er führt folgende Aktionen aus:
Die dbmlsync-Option -bc erstellt die Download-Datei mit dem Namen file1.df.
Die Option -be bezieht die Zeichenfolge "ok" in die Download-Datei ein, auf die die gespeicherte Einstiegsprozedur sp_dbmlsync_validate_download_file zugreifen kann.
dbmlsync -c
"uid=DBA;pwd=sql;eng=sfdef_eng;dbf=sfdef.db"
-v+ -e "sv=filebased" -bc file1.df -be ok -ot fdef.txt |
Um die Download-Datei zu übernehmen, führen Sie dbmlsync mit der Option -ba in der entfernten Datenbank aus, wobei Sie den Namen der Download-Datei übergeben, die übernommen werden soll:
dbmlsync -c "uid=DBA;pwd=sql;eng=sremote_eng;
dbf=sremote.db" -v+ -ba file1.df -ot remote.txt |
Die Änderungen werden nun in die entfernte Datenbank übernommen. Öffnen Sie Interactive SQL, verbinden Sie sich mit der entfernten Datenbank und führen Sie die folgende SQL-Anweisung aus, um zu überprüfen, ob die entfernte Datenbank die Daten enthält:
SELECT * FROM T1 |
Die folgenden Befehle stoppen alle drei Datenbankserver und löschen die Dateien.
del file1.df mlstop -h -w dbstop -y -c "eng=sfdef_eng; uid=DBA; pwd=sql" dbstop -y -c "eng=scons_eng; uid=DBA; pwd=sql" dbstop -y -c "eng=sremote_eng; uid=DBA; pwd=sql" dberase -y sfdef.db dberase -y scons.db dberase -y sremote.db |
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 |