Kaskadierendes Löschen wird ebenfalls als Triggeraktion angesehen.
Der Standardwert ist OFF.
Wenn zwei Subskriptionen dieselbe(n) Tabelle(n) enthalten, müssen beide Subskriptionen mit derselben Einstellungen für die
SendTriggers-Option synchronisiert werden.
Hinweis
Wenn in der Downloadphase der Synchronisation Änderungen an der Datenbank vorgenommen werden und diese zu Triggeraktionen
führen, werden diese nie synchronisiert, unabhängig vom Wert der SendTriggers-Option.
Damit ein Vorgang in einem Trigger synchronisiert wird, wenn die SendTrigger-Option auf ON gesetzt ist, muss der Vorgang im Trigger auf eine zu synchronisierende Tabelle in einer Publikation angewendet werden. Es
ist nicht notwendig, dass der zugrunde liegende Vorgang, der den Trigger ausgelöst hat, sich ebenfalls in der Publikation
befindet.
Dbmlsync fügt Vorgänge aus einer einzelnen Zeile zusammen, aber wenn die SendTrigger-Option auf ON gesetzt ist, werden alle im Trigger ausgelösten Vorgänge ebenfalls gesendet, auch wenn der zugrunde liegende Vorgang, der
den Trigger ausgelöst hat, mit anderen Vorgängen zusammengefügt wurde.
Integrierte Aktionen für die referenzielle Integrität von Fremdschlüsseln (ON DELETE CASCADE und ON UPDATE CASCADE) gelten
als Triggeraktionen und werden nur synchronisiert, wenn die SendTrigger-Option auf ON gesetzt ist. Die einzige Ausnahme ist der Fall, dass eine Aktion für die referenzielle Integrität in einer Zeile ausgeführt
wird, die sich bereits im Upload-Datenstrom befindet. In diesem Fall wird die Aktion für die referenzielle Integrität im systemgenerierten
Trigger mit dem Zustand der Zeile zusammengefügt, die sich bereits im Upload-Datenstrom befindet, wie im folgenden Beispiel
dargestellt.
In diesem Beispiel gibt es einen Fremdschlüssel zwischen der Parent-Tabelle und der Child-Tabelle mit einer ON DELETE CASCADE-Aktion für die referenzielle Integrität.
INSERT INTO Parent (pid, pname) values ( 100, 'Amy' );
INSERT INTO Child (cid, pid, cname) values ( 2000, 100, 'Alex' );
COMMIT;
DELETE FROM Parent WHERE pid = 100;
COMMIT;
Es ist wichtig, zu beachten, dass die RI-Aktion auch Zeile 2000 aus der Child-Tabelle löscht, wenn Sie Zeile 100 aus der Parent-Tabelle löschen. Wenn dbmlsync zu diesem Zeitpunkt ausgeführt wird, führt der INSERT-Vorgang mit anschließendem DELETE in
Zeile 100 der Parent-Tabelle dazu, dass die Zeile nicht synchronisiert wird. Die Einfügung in die Child-Tabelle wird jedoch gesendet, wenn die SendTrigger-Option auf OFF gesetzt ist. Weil dbmlsync in diesem Fall bereits Zeile 2000 der Child-Tabelle zum Upload-Datenstrom hinzugefügt hat, wird die Aktion für die referenzielle Integrität beim Löschen von Zeile 100
der Parent-Tabelle, die Zeile 2000 der Child-Tabelle löscht, mit der vorhandenen Zeile im Upload-Datenstrom zusammengefügt, was dazu führt, dass keine der Zeilen synchronisiert
wird und die Konsistenz der Daten auf beiden Seiten erhalten bleibt.