Steuern von Einschränkungen, Identitäten und Triggern mithilfe von NOT FOR REPLICATION
In einigen Fällen ist es in einer Replikationstopologie vorteilhaft, wenn die Benutzeraktivität anders behandelt wird als die Agentaktivität. Beispiel: Eine Zeile wird von einem Benutzer auf dem Verleger eingefügt, und diese Einfügung erfüllt eine CHECK-Einschränkung für die Tabelle. Es ist dann gegebenenfalls nicht erforderlich, dieselbe Einschränkung zu erzwingen, wenn die Zeile von einem Replikations-Agent auf dem Abonnenten eingefügt wird. Mithilfe der Option NOT FOR REPLICATION können Sie angeben, dass die folgenden Datenbankobjekte unterschiedlich behandelt werden, wenn ein Replikations-Agent einen Vorgang ausführt:
FOREIGN KEY-Einschränkungen
Bei Einfügungs-, Aktualisierungs- oder Löschvorgängen durch den Replikations-Agent wird die FOREIGN KEY-Einschränkung nicht erzwungen.
CHECK-Einschränkungen
Bei Einfügungs-, Aktualisierungs- oder Löschvorgängen durch den Replikations-Agent wird die CHECK-Einschränkung nicht erzwungen.
Identitätsspalten
Der Wert der Identitätsspalte wird nicht inkrementiert, wenn ein Replikations-Agent einen Einfügungsvorgang ausführt.
Trigger
Bei Einfügungs-, Aktualisierungs- oder Löschvorgängen durch den Replikations-Agent wird die CHECK-Einschränkung nicht erzwungen.
Wenn eine Tabelle veröffentlicht wird, steuern Schemaoptionen, wie Objekte in der Abonnementdatenbank erstellt werden. Die Standardschemaoptionen unterscheiden sich je nach Veröffentlichung. Wenn Optionen so festgelegt sind, dass FOREIGN KEY- und CHECK-Einschränkungen in der Abonnementdatenbank erstellt werden, muss die NOT FOR REPLICATION-Option festgelegt sein.Die Option NOT FOR REPLICATION wird auch festgelegt, wenn Identitätsspalten in Mergeveröffentlichungen und Transaktionsveröffentlichungen repliziert werden, die aktualisierbare Abonnements unterstützen. Weitere Informationen zur Replikation von Identitätsspalten finden Sie unter Replizieren von Identitätsspalten.
In den meisten Fällen sind die Standardeinstellungen zweckdienlich, sie können jedoch den Anforderungen der Anwendung entsprechend geändert werden. Am meisten zu berücksichtigen sind Trigger. Wenn Sie z. B. einen INSERT-Trigger definieren und die Option NOT FOR REPLICATION festgelegt ist, werden bei allen Einfügungen von Benutzern Trigger ausgelöst, nicht jedoch bei Einfügungen von Replikations-Agents. Angenommen, ein Trigger fügt Daten in eine Nachverfolgungstabelle ein: Wenn der Benutzer die ursprüngliche Zeile einfügt, muss der Trigger ausgelöst werden und eine Zeile in die Nachverfolgungstabelle eintragen. Der Trigger sollte jedoch nicht ausgelöst werden, wenn diese Daten auf dem Abonnenten repliziert werden, da sonst eine überflüssige Zeile in die Nachverfolgungstabelle eingefügt wird.
So geben Sie die Option NOT FOR REPLICATION an
Sie haben folgende Möglichkeiten, die Option NOT FOR REPLICATION anzugeben:
Sie verwenden Schemaoptionen der Replikation. Weitere Informationen finden Sie unter Vorgehensweise: Angeben von Schemaoptionen (SQL Server Management Studio) und Vorgehensweise: Angeben von Schemaoptionen (Replikationsprogrammierung mit Transact-SQL).
Direkt in der Transact-SQL-Syntax oder in Microsoft SQL Server Management Studio, wenn Sie folgende Vorgänge ausführen:
Erstellen oder Ändern eines Objekts in der Veröffentlichungsdatenbank.
Erstellen oder Ändern eines Objekts in der Abonnementdatenbank. Objekte werden in der Regel nur dann manuell erstellt (statt durch Replikation), wenn ein Abonnement ohne Snapshot initialisiert wird.
Weitere Informationen finden Sie in den folgenden Themen: