Collection Contents Zurück Weiter PDF

MobiLink Benutzerhandbuch

Dateibasierte Downloads

Beispiele

Zeitstempelbasisierte Beispiele


Dieses Beispiel implementiert den dateibasierten Download für die zeitstempelbasierte Synchronisation.

Die folgenden Befehle erstellen die drei in dem Beispiel verwendeten Datenbanken, nämlich eine konsolidierte Datenbank, eine entfernte Datenbank und eine Dateidefinitions-Datenbank.

dbinit tcons.db
dbinit tremote.db
dbinit tfdef.db

Die folgenden Befehle starten die drei Datenbanken, erstellen einen Datenquellennamen, den MobiLink verwendet, um sich mit der konsolidierten Datenbank zu verbinden, und starten den MobiLink-Synchronisationsserver.

dbeng9 -n tfdef_eng tfdef.db
dbeng9 -n tcons_eng tcons.db
dbeng9 -n tremote_eng tremote.db
dbdsn -y -w tfbd_demo -c "eng=tcons_eng;dbf=tcons.db;uid=dba;
   pwd=sql;astart=off;astop=off"
start dbmlsrv9 -v+ -c "dsn=tfbd_demo" -zu+ -ot tcons.txt
Die konsolidierte zeitstempelbasierte Beispieldatenbank erstellen 

In diesem Beispiel enthält die konsolidierte Datenbank eine einzige Tabelle namens T1. Nach der Verbindungserstellung zur konsolidierten Datenbank können Sie folgenden Code ausführen, um Tabelle T1 zu erstellen:

CREATE TABLE T1 (
   pk      INTEGER PRIMARY KEY,
   c1      INTEGER,
   last_modified   TIMESTAMP DEFAULT TIMESTAMP
);

Der folgende Code legt eine Skriptversion namens "normal" mit einer minimalen Anzahl an Skripten fest. Diese Skriptversion wird für Synchronisationen verwendet, die keinen dateibasierten Download verwenden.

CALL ml_add_table_script( 'normal', 'T1', 
   'upload_insert',
     'INSERT INTO T1( pk, c1) VALUES( ?, ? )' );
   CALL ml_add_table_script( 'normal', 'T1',
   'upload_update', 
   'UPDATE T1 SET c1 = ? WHERE pk = ? ' );

CALL ml_add_table_script( 'normal', 'T1',
   'upload_delete', 
     'DELETE FROM T1 WHERE pk = ?' );

CALL ml_add_table_script( 'normal', 'T1',
   'download_cursor',
     'SELECT pk, c1 FROM T1 WHERE last_modified >= ?' );

Der folgende Code setzt die Generierungsnummer für alle Subskriptionen auf 1. Es wird empfohlen, Generierungsnummern zu verwenden, falls Ihre konsolidierte Datenbank verloren geht oder beschädigt wird und Sie einen Upload durchführen müssen.

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( 'normal', 
    'begin_publication', 
            '{ call begin_pub( ?, ?, ? ) }' );
            COMMIT;

Der folgende Code legt die Skriptversion namens "filebased" fest. Diese Skriptversion wird für die Erstellung dateibasierter Downloads verwendet.

CALL ml_add_connection_script( 'filebased', 
    'begin_publication', 
            '{ call begin_pub( ?, ?, ? ) }' );

CALL ml_add_table_script( 'filebased', 'T1',
    'download_cursor',
      'SELECT pk, c1 FROM T1 WHERE last_modified >= ?' );

Der folgende Code setzt die letzte Download-Zeit fest, sodass alle Änderungen, die innerhalb der letzten fünf Tage vorgenommen wurden, in Download-Dateien einbezogen werden. Jede entfernte Datenbank, die keine der in den letzten fünf Tagen erstellten Download-Dateien übernommen hat, muss eine normale Synchronisation ausführen, bevor sie weitere dateibasierte Downloads übernehmen kann.

CREATE PROCEDURE ModifyLastDownloadTimestamp( 
             INOUT last_download_timestamp TIMESTAMP,
             IN    ml_username             VARCHAR(128) )
BEGIN
    SELECT dateadd( day, -5, CURRENT TIMESTAMP )
    INTO last_download_timestamp;
END;
   CALL ml_add_connection_script( 'filebased', 
   'modify_last_download_timestamp',
         'CALL ModifyLastDownloadTimestamp( ?, ? )' );
            COMMIT;
Die entfernte zeitstempelbasierte Beispieldatenbank erstellen 

In diesem Beispiel enthält die entfernte Datenbank eine einzige Tabelle namens T1. Wenn Sie eine Verbindung zur entfernten Datenbank hergestellt haben, führen Sie den folgenden Code aus, um die Tabelle T1, eine Publikation namens P1 und einen Benutzer namens U1 zu erstellen. Der Code erstellt außerdem für U1 eine Subskription von 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 definiert die gespeicherte Prozedur sp_hook_dbmlsync_validate_download_file. Diese gespeicherte Prozedur verhindert, dass Download-Dateien übernommen werden, in denen die Zeichenfolge OK nicht enthalten ist.

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
Dateidefinitions-Beispieldatenbank mit Zeitstempel erstellen 

Der folgende Code definiert die Dateidefinitions-Datenbank für das Zeitstempelbeispiel. Er erstellt eine Tabelle, eine Publikation, einen Benutzer und eine Publikationssubskription für den Benutzer.

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;
Erste Synchronisation vorbereiten 

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 die Verwendung von -bg.

Der folgende Code definiert eine Skriptversion namens filebased_init für die konsolidierte Datenbank. Diese Skriptversion hat ein einziges begin_publication-Skript.

CALL ml_add_table_script( 
  'filebased_init', 'T1', 'download_cursor',
    'SELECT pk, c1 FROM T1' );

CALL ml_add_connection_script( 
  'filebased_init', 
  'begin_publication', 
      '{ call begin_pub( ?, ?, ? ) }' );
            COMMIT;

Die beiden folgenden Befehlszeilen erstellen eine Download-Ausgangsdatei, die die Skriptversion filebased_init und die Option -bg verwendet.

dbmlsync -c "uid=dba;pwd=sql;eng=tfdef_eng;dbf=tfdef.db" 
  -v+ -e "sv=filebased_init" -bc tfile1.df -be ok -bg 
  -ot tfdef1.txt

dbmlsync -c "uid=dba;pwd=sql;eng=tremote_eng;dbf=tremote.db" 
  -v+ -ba tfile1.df -ot tremote.txt
Dateibasierten Zeitstempel-Download veranschaulichen 

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(pk, c1) VALUES( 1, 1 );
INSERT INTO T1(pk, c1) VALUES( 2, 4 );
INSERT INTO T1(pk, c1) VALUES( 3, 9 );
commit;

Die folgende Befehlszeile erstellt eine Download-Datei, die die neuen Daten enthält.

dbmlsync -c 
   "uid=dba;pwd=sql;eng=tfdef_eng;dbf=tfdef.db" 
   -v+ -e "sv=filebased" -bc tfile2.df -be ok -ot tfdef2.txt

Die folgende Befehlszeile übernimmt eine Download-Datei in die entfernte Datenbank.

dbmlsync -c "uid=dba;pwd=sql;eng=tremote_eng;dbf=tremote.db" 
   -v+ -ba tfile2.df -ot tfdef3.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 den folgenden SQL-Befehl aus, um zu überprüfen, ob die entfernte Datenbank die Daten enthält:

SELECT * FROM T1
Zeitstempelbeispiel aufräumen 

Die folgenden Befehle stoppen alle drei Datenbank-Engines und löschen dann die Dateien.

del file1.df
dbmlstop -h -w
dbstop -y -c eng=tfdef_eng
dbstop -y -c eng=tcons_eng
dbstop -y -c eng=tremote_eng
dberase -y tfdef.db
dberase -y tcons.db
dberase -y tremote.db

Collection Contents Zurück Weiter PDF