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

SQL Anywhere 12.0.0 (Deutsch) » SQL Remote » SQL Remote-Systeme erstellen » Mehrfach vorhandene Primärschlüssel » Primärschlüsselpools verwenden

 

Den Primärschlüsselpool füllen und auffüllen

Jedes Mal, wenn ein entfernter Benutzer einen neuen Kunden hinzufügt, wird sein Pool an verfügbaren Primärschlüsseln um einen vermindert. Sie müssen regelmäßig den Inhalt der Primärschlüsselpool-Tabelle in der konsolidierten Datenbank auffüllen und die neuen Primärschlüssel an die entfernten Datenbanken replizieren.

 ♦  So füllen Sie den Primärschlüsselpool erstmals an (SQL)
  1. In der konsolidierten Datenbank erstellen Sie eine Prozedur, um den Primärschlüsselpool zu füllen.

    Verwenden Sie keinen Trigger zum Auffüllen des Primärschlüsselpools.

    Sie können keinen Trigger verwenden, um den Primärschlüsselpool anzufüllen, da Triggeraktionen nicht repliziert werden.

    Zum Beispiel:



    CREATE PROCEDURE ReplenishPool()
    BEGIN
       FOR EachTable AS TableCursor
       CURSOR FOR
          SELECT table_name
          AS CurrTable, max(value) as MaxValue
          FROM KeyPool
          GROUP BY table_name
       DO
          FOR EachRep AS RepCursor
          CURSOR FOR
             SELECT location
             AS CurrRep, COUNT(*) AS NumValues
             FROM KeyPool
             WHERE table_name = CurrTable
             GROUP BY location
          DO
             // make sure there are 100 values.
             // Fit the top-up value to your
             // requirements
             WHILE NumValues < 100 LOOP
                SET MaxValue = MaxValue + 1;
                SET NumValues = NumValues + 1;
                INSERT INTO KeyPool
                (table_name, location, value)
                VALUES
                (CurrTable, CurrRep, MaxValue);
             END LOOP;
          END FOR;
       END FOR;
    END;
  2. Fügen Sie einen ersten Primärschlüsselwert in den Primärschlüsselpool für jeden Benutzer ein.

    Die ReplenishPool-Prozedur verlangt, dass es zumindest einen Primärschlüssel für jeden Subskribenten geben muss, damit sie den Höchstwert bestimmen und eins hinzufügen kann, um die nächste Menge zu erzeugen.

    Um den Pool anfänglich zu füllen, fügen Sie einen einzelnen Wert für jeden Benutzer ein und rufen dann ReplenishPool auf, um den Rest aufzufüllen. Das folgende Beispiel zeigt dies für drei entfernte Benutzer und einen einzigen konsolidierten Benutzer namens Office:

    INSERT INTO KeyPool VALUES( 'Customers', 40, 'user1' );
    INSERT INTO KeyPool VALUES( 'Customers', 41, 'user2' );
    INSERT INTO KeyPool VALUES( 'Customers', 42, 'user3' );
    INSERT INTO KeyPool VALUES( 'Customers', 43, 'Office');
    CALL ReplenishPool();

    Die ReplenishPool-Prozedur füllt den Pool für jeden Benutzer mit bis zu 100 Werten an. Der benötigte Wert hängt davon ab, wie oft Benutzer Zeilen in die Tabellen der Datenbank einfügen.

  3. Führen Sie ReplenishPool regelmäßig aus.

    Die ReplenishPool-Prozedur muss in der konsolidierten Datenbank regelmäßig ausgeführt werden, um den Pool von Primärschlüsselwerten in der KeyPool-Tabelle wieder aufzufüllen.