Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Erste Orientierung » Praktische Einführungen in MobiLink » Praktische Einführung: Skripten schreiben und Synchronisationen überwachen

 

Lektion 6: Skripten für die Erkennung und Lösung von Konflikten erstellen

Konflikte entstehen beim Upload von Zeilen in die konsolidierte Datenbank. Wenn zwei Benutzer dieselbe Zeile in zwei entfernten Datenbanken ändern, wird ein Konflikt erkannt, sobald die zweite Zeile den MobiLink-Server erreicht. Mithilfe von Synchronisationsskripten können Sie Skripten erkennen und auflösen.

Weitere Hinweise zur MobiLink-Konfliktlösung finden Sie unter Konfliktbehandlung.

Beispiel für einen Warenbestand

In diesem Beispiel sind zwei Vertriebsmitarbeiter im Außendienst tätig. Vertriebsmitarbeiter 1 (Salesman1) verfügt zunächst über einen Bestand aus zehn Artikeln und verkauft dann drei davon. Er aktualisiert den Bestand in der entfernten Datenbank remote1 auf sieben Artikel. Vertriebsmitarbeiterin 2 (Salesman2) verkauft vier Artikel und aktualisiert ihren Warenbestand (in remote2) auf sechs.

Wenn remote1 die Synchronisation mithilfe des MobiLink-Client-Synchronisationsprogramms durchführt, wird der Bestand in der konsolidierten Datenbank auf sieben aktualisiert. Bei der Synchronisation von remote2 wird ein Konflikt erkannt, weil sich der Wert für den Bestand in der konsolidierten Datenbank geändert hat.

Um diesen Konflikt programmiertechnisch zu lösen, brauchen Sie drei Zeilenwerte:

  1. Den aktuellen Wert in der konsolidierten Datenbank.

    Nach der Synchronisation von remote1 lautet der Wert in der konsolidierten Datenbank 7.

  2. Den neuen Zeilenwert, der von Remote2 ausgelesen wurde.

  3. Den alten Zeilenwert, der von Remote2 bei der vorherigen Synchronisation empfangen wurde.

In diesem Fall können Sie die folgende Geschäftslogik anwenden, um den neuen Bestandswert auszurechnen und den Konflikt zu beheben:

aktuelle konsolidierte DB - (alte entfernte DB – neue entfernte DB), d.h. 7 - (10-6) = 3

Der Ausdruck (alte entfernte DB – neue entfernte DB) liefert die Anzahl der Artikel, die Salesman2 verkauft hat, jedoch nicht den absoluten Bestandswert.

Synchronisationsskripten für die Konflikterkennung und -lösung

Um die Konflikterkennung und -lösung zu ermöglichen, fügen Sie die folgenden Skripten hinzu:

  • upload_update   Das Ereignis upload_update legt fest, wie Daten, die in die entfernte Datenbank eingefügt werden, in der konsolidierten Datenbank angewendet werden. Sie können auch einen erweiterten Prototyp von upload_update für die Ermittlung von Updatekonflikten verwenden.

    Weitere Hinweise zur Verwendung von upload_update für die Ermittlung von Konflikten finden Sie unter Konflikte erkennen.

    Weitere Hinweise zu upload_update finden Sie unter upload_update (Tabellenereignis).

  • upload_old_row_insert   Mit diesem Skript können Sie alte Zeilenwerte verarbeiten, die von der entfernten Datenbank während der letzten Synchronisation abgerufen wurden.

    Weitere Hinweise zu upload_old_row_insert finden Sie unter upload_old_row_insert (Tabellenereignis).

  • upload_new_row_insert   Mit diesem Skript verarbeiten Sie neue Zeilenwerte (die aktualisierten Werte in der entfernten Datenbank).

    Weitere Hinweise zu upload_new_row_insert finden Sie unter upload_new_row_insert (Tabellenereignis).

  • resolve_conflict   Das Konfliktlösungsskript wendet Geschäftslogik für die Lösung des Konflikts an.

    Weitere Hinweise zu resolve_conflict finden Sie unter resolve_conflict (Tabellenereignis).

♦  So installieren Sie Skripten für die Konflikterkennung und -lösung
  1. Starten Sie Interactive SQL.

    1. Geben Sie an der Eingabeaufforderung den Befehl dbisql ein.

    2. Klicken Sie auf das Register Identifizierung.

    3. Im Feld Benutzer-ID geben Sie DBA ein.

    4. Im Feld Kennwort geben Sie sql ein.

    5. Klicken Sie auf das Register Datenbank.

    6. Im Feld Servername geben Sie cons ein.

    7. Klicken Sie auf OK.

  2. Installieren Sie die Skripten für die Konflikterkennung und -lösung.

    Führen Sie Folgendes in Interactive SQL aus:

    /* upload_update */
    call ml_add_table_script( 'ver1', 'Product',
     'upload_update',
     'UPDATE Product
       SET quantity = ?, last_modified = ?
        WHERE name = ?
        AND quantity=? AND last_modified=?' )
    go
    
    /* upload_old_row_insert */
    call ml_add_table_script( 'ver1', 'Product',
     'upload_old_row_insert',
     'INSERT INTO Product_old (name,quantity,last_modified)
       values (?,?,?)')
    go
    
    /* upload_new_row_insert */
    call ml_add_table_script( 'ver1', 'Product',
     'upload_new_row_insert',
     'INSERT INTO Product_new (name,quantity,last_modified)
       values (?,?,?)')
    go
    
    /* resolve_conflict */
    call ml_add_table_script( 'ver1', 'Product',
     'resolve_conflict',
     'declare @product_name varchar(128);
      declare @old_rem_val integer;
      declare @new_rem_val integer;
      declare @curr_cons_val integer; 
      declare @resolved_value integer;
    
      // obtain the product name
      SELECT name INTO @product_name
         FROM Product_old;
    
      // obtain the old remote value
      SELECT quantity INTO @old_rem_val
        FROM Product_old;
    
      //obtain the new remote value
      SELECT quantity INTO @new_rem_val
        FROM Product_new;
    
      // obtain the current value in cons
      SELECT quantity INTO @curr_cons_val
       FROM Product WHERE name = @product_name;
    
      // determine the resolved value
      SET @resolved_value =
        @curr_cons_val- (@old_rem_val - @new_rem_val);
    
      // update cons with the resolved value
      UPDATE Product
       SET quantity = @resolved_value
       WHERE name = @product_name;
    
      // clear the old and new row tables
      delete from Product_new;
      delete from Product_old
     ')

Die Einrichtung der konsolidierten SQL Anywhere-Datenbank ist abgeschlossen.

Weitere Hinweise

Weitere Hinweise zur MobiLink-Konflikterkennung und -lösung finden Sie unter Konfliktbehandlung.

Weitere Hinweise zu konsolidierten MobiLink-Datenbanken finden Sie unter MobiLink - konsolidierte Datenbanken.