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 » Überlappungspartitionen verwenden

 

Die "subscribe_by_remote"-Option in Viele-zu-Viele-Beziehungen verwenden

Wenn die Option subscribe_by_remote auf On gesetzt wurde, wird bei Vorgängen von entfernten Datenbanken mit einem SUBSCRIBE BY-Wert von NULL oder einer leeren Zeichenfolge davon ausgegangen, dass der entfernte Benutzer die Zeile subskribiert hat. Standardmäßig ist die Option "subscribe_by_remote" auf On gesetzt.

Die Option "subscribe_by_remote" löst ein Problem, das sonst in manchen Publikationen auftreten würde. Die folgende Publikation verwendet eine Unterabfrage für den Subskriptionsausdruck der Customers-Tabelle, da Kunden zu mehreren Handelsvertretern gehören können:

CREATE PUBLICATION SalesRepData (
   TABLE SalesReps,
   TABLE Policy SUBSCRIBE BY rep_key,
   TABLE Customers SUBSCRIBE BY (
      SELECT rep_key FROM Policy
      WHERE Policy.cust_key =
         Customers.cust_key
   ),
);

Beispiel: Marc Dill ist ein Handelsvertreter, der gerade eine Police für einen neuen Kunden erstellt hat. Er fügt eine neue Zeile in die Customers-Tabelle und zusätzlich eine Zeile in die Policy-Tabelle ein, um sich selbst den neuen Kunden zuzuordnen.

Die Policy-Tabelle hat Fremdschlüssel zur Customers-Tabelle und zur SalesReps-Tabelle.

In der konsolidierten Datenbank führt SQL Remote die Einfügung der Customers-Zeile durch und SQL Anywhere zeichnet den Subskriptionswert im Transaktionslog zum Zeitpunkt der Einfügung auf.

Später, wenn SQL Remote das Transaktionslog durchsucht, wird eine Liste der Subskribenten anhand des Subskriptionsausdrucks zusammengestellt, und Marc Dill befindet sich nicht auf der Liste, da die Zeile in der Policy-Tabelle, die ihm den Kunden zuordnet, noch nicht übernommen wurde. Wenn subscribe_by_remote auf Off gesetzt ist, tritt der Fall ein, dass der neue Kunde an Marc Dill als eine DELETE-Anweisung zurückgesendet wird.

Solange subscribe_by_remote auf On gesetzt ist, nimmt SQL Remote an, dass die Zeile dem Handelsvertreter gehört, der sie eingefügt hat. Die INSERT-Anweisung wird nicht an Marc Dill zurück repliziert, und das Replikationssystem bleibt intakt.

Wenn "subscribe_by_remote" auf Off gesetzt ist, müssen Sie sicherstellen, dass die "Policy"-Zeile vor der "Customers"-Zeile eingefügt wird, wobei eine Verletzung der referenziellen Integrität dadurch vermieden werden kann, dass die Überprüfung bis ans Ende der Transaktion aufgeschoben wird.

 Siehe auch