Parametrisierte Filter – Parametrisierte ZeilenfilterParameterized Filters - Parameterized Row Filters

Mit parametrisierten Zeilenfiltern können verschiedene Datenpartitionen an verschiedene Abonnenten gesendet werden, ohne dass hierfür mehrere Veröffentlichungen erstellt werden müssen (parametrisierte Filter wurden in früheren Versionen von SQL ServerSQL Serverals dynamische Filter bezeichnet).Parameterized row filters allow different partitions of data to be sent to different Subscribers without requiring multiple publications to be created (parameterized filters were referred to as dynamic filters in previous versions of SQL ServerSQL Server). Der Begriff Partition bezeichnet nichts weiter als eine Teilmenge der Zeilen in einer Tabelle. Abhängig von den Einstellungen für den parametrisierten Zeilenfilter, die im Zuge der Erstellung des Filters festgelegt werden, kann jede Zeile in einer veröffentlichten Tabelle entweder nur zu einer Partition (nicht überlappende Partitionen) oder aber zu mehreren Partitionen (überlappende Partitionen) gehören.A partition is a subset of the rows in a table; depending on the settings chosen when creating a parameterized row filter, each row in a published table can belong to one partition only (which produces nonoverlapping partitions) or to two or more partitions (which produces overlapping partitions).

Nicht überlappende Partitionen können für mehrere Abonnenten freigegeben werden, oder es kann einschränkend festgelegt werden, dass eine bestimmte Partition einem Abonnement zugewiesen wird.Nonoverlapping partitions can be shared among subscriptions or they can be restricted so that only one subscription receives a given partition. Die Einstellungen, mit denen das Verhalten der Partition gesteuert wird, werden weiter unten unter "Verwenden der richtigen Filteroptionen" erläutert.The settings that control partition behavior are described in "Using the Appropriate Filtering Options" later in this topic. Mithilfe dieser Einstellungen können Sie die parametrisierten Filter an die jeweiligen Anwendungs- und Leistungsanforderungen anpassen.Using these settings you can tailor parameterized filtering according to application and performance requirements. Allgemein gilt, dass überlappende Partitionen ein höheres Maß an Flexibilität ermöglichen, während nicht überlappende Partitionen, die nur für ein einzelnes Abonnement repliziert werden, eine höhere Leistungsfähigkeit aufweisen.In general, overlapping partitions allow for greater flexibility, and nonoverlapping partitions replicated to a single subscription provide better performance.

Parametrisierte Filter werden in einer einzelnen Tabelle verwendet und in der Regel mit Joinfiltern kombiniert, um auch verknüpfte Tabellen filtern zu können.Parameterized filters are used on a single table and are typically combined with join filters to extend filtering to related tables. Weitere Informationen finden Sie unter Join Filters.For more information, see Join Filters.

Informationen zum Definieren oder Ändern eines parametrisierten Zeilenfilters finden Sie unter Definieren und Ändern eines parametrisierten Zeilenfilters für einen Mergeartikel.To define or modify a parameterized row filter, see Define and Modify a Parameterized Row Filter for a Merge Article.

Funktionsweise parametrisierter FilterHow Parameterized Filters Work

Parametrisierte Zeilenfilter verwenden zum Auswählen der Daten, die veröffentlicht werden sollen, eine WHERE-Klausel.A parameterized row filter uses a WHERE clause to select the appropriate data to be published. Statt in der Klausel einen Literalwert anzugeben (wie dies bei statischen Zeilenfiltern der Fall wäre), wird mindestens eine der folgenden Systemfunktionen angegeben: SUSER_SNAME() und HOST_NAME().Rather than specifying a literal value in the clause (as you do with a static row filter), you specify one or both of the following system functions: SUSER_SNAME() and HOST_NAME(). Darüber hinaus können auch benutzerdefinierte Funktionen verwendet werden, sofern diese in ihrem Hauptteil SUSER_SNAME() oder HOST_NAME() enthalten bzw. eine dieser Systemfunktionen auswerten (wie beispielsweise MyUDF(SUSER_SNAME()).User-defined functions can also be used, but they must include SUSER_SNAME() or HOST_NAME() in the body of the function, or evaluate one of these system functions (such as MyUDF(SUSER_SNAME()). Wenn eine benutzerdefinierte Funktion in ihrem Hauptteil SUSER_SNAME() oder HOST_NAME() enthält, können dieser Funktion keine Parameter übergeben werden.If a user-defined function includes SUSER_SNAME() or HOST_NAME() in the body of the function, you cannot pass parameters to the function.

Die SUSER_SNAME() und HOST_NAME()-Systemfunktionen können auch für andere Zwecke als die Mergereplikation verwendet werden, sie werden von dieser aber für das parametrisierte Filtern verwendet:The system functions SUSER_SNAME() and HOST_NAME() are not specific to merge replication, but they are used by merge replication for parameterized filtering:

  • SUSER_SNAME() gibt Anmeldeinformationen für Verbindungen mit einer Instanz von SQL ServerSQL Serverzurück.SUSER_SNAME() returns login information for connections made to an instance of SQL ServerSQL Server. Bei Verwendung in einem parametrisierten Filter wird der Anmeldename zurückgegeben, mit dessen Hilfe der Merge-Agent eine Verbindung mit dem Verleger herstellt (den Anmeldenamen müssen Sie beim Erstellen des Abonnements angeben).When used in a parameterized filter, it returns the login used by the Merge Agent to connect to the Publisher (you specify a login when you create a subscription).

  • HOST_NAME() gibt den Namen des Computers zurück, der mit einer Instanz von SQL ServerSQL Serververbunden ist.HOST_NAME() returns the name of the computer that is connecting to an instance of SQL ServerSQL Server. Bei Verwendung in einem parametrisierten Filter gibt die Funktion standardmäßig den Namen des Computers zurück, auf dem der Merge-Agent ausgeführt wird.When used in a parameterized filter, by default it returns the name of the computer on which the Merge Agent is running. Bei Pullabonnements ist dies der Name des Abonnenten, während bei Pushabonnements der Name des Verteilers zurückgegeben wird.For pull subscriptions it is the name of the Subscriber; for push subscriptions it is the name of the Distributor.

    Durch Eingabe eines anderen Wertes als den Namen des Abonnenten oder Verteilers kann diese Funktion überschrieben werden.It is also possible to override this function with a value other than the name of the Subscriber or Distributor. In der Regel überschreiben Anwendungen diese Funktion mit sinnvolleren Werten, z. B. einem Vertriebsmitarbeiternamen oder einer Vertriebsmitarbeiter-ID.Typically applications override this function with more meaningful values, such as a salesperson name or salesperson ID. Weitere Informationen finden Sie im Abschnitt zu "Überschreiben des HOST_NAME()-Werts" weiter unten in diesem Thema.For more information, see the section "Overriding the HOST_NAME() Value" in this topic.

    Der Wert, der von der Systemfunktion zurückgegeben wird, wird mit der von Ihnen angegebenen Spalte in der gefilterten Tabelle verglichen. Danach werden die entsprechenden Daten auf den Abonnenten heruntergeladen.The value returned by the system function is compared to a column you specify in the table you are filtering, and the appropriate data is downloaded to the Subscriber. Dieser Vergleich erfolgt sowohl bei der Initialisierung des Abonnements (damit in der Anfangsmomentaufnahme nur die relevanten Daten enthalten sind) als auch bei jeder Abonnementsynchronisierung.This comparison is made when the subscription is initialized (so only the appropriate data is contained in the initial snapshot) and every time the subscription is synchronized. Wenn eine Änderung auf dem Abonnenten dazu führt, dass eine Zeile aus einer Partition herausgenommen wird, wird diese Zeile standardmäßig auf dem Abonnenten gelöscht. (Dieses Verhalten kann mit dem @allow_partition_realignment-Parameter von sp_addmergepublication (Transact-SQL) gesteuert werden.)By default, if a change at the Publisher results in a row being moved out of a partition, the row is deleted at the Subscriber (this behavior is controlled using the @allow_partition_realignment parameter of sp_addmergepublication (Transact-SQL)).

Hinweis

Bei Vergleichen für parametrisierte Filter wird in jedem Fall die Datenbanksortierung verwendet.When comparisons are made for parameterized filters, the database collation is always used. Wenn die Datenbanksortierung z. B. ohne Unterscheidung von Groß- und Kleinschreibung erfolgt, die Tabellen- oder Spaltensortierung dagegen mit, wird beim Vergleich nicht zwischen Groß-/Kleinschreibung unterschieden.For example, if the database collation is case insensitive, but the table or column collation is case sensitive, the comparison will be case insensitive.

Filtern mit SUSER_SNAME()Filtering with SUSER_SNAME()

Sehen Sie sich die Employee-Tabelle in der Adventure WorksAdventure Works -Beispieldatenbank an.Consider the Employee Table in the Adventure WorksAdventure Works sample database. Diese Tabelle enthält die LoginID-Spalte, in der Sie die Domäne und den Anmeldenamen (Anmelde-ID) für jeden Mitarbeiter in der Formdomain\loginfinden.This table includes the column LoginID, which contains the login for each employee in the form 'domain\login'. Wenn Sie diese Tabelle so filtern möchten, dass alle Mitarbeiter nur die Daten erhalten, die für sie jeweils relevant sind, geben Sie folgende Filterklausel an:To filter this table so that employees receive only the data related to them, specify a filter clause of:

LoginID = SUSER_SNAME()  

Nehmen wir z. B. an, der Wert für einen der Mitarbeiter ist 'adventure-works\john5'.For example, the value for one of the employees is 'adventure-works\john5'. Wenn der Merge-Agent eine Verbindung mit dem Verleger herstellt, verwendet dieser den Anmeldenamen, den Sie bei der Erstellung des Abonnements angegeben haben (in diesem Fall 'adventure-works\john5').When the Merge Agent connects to the Publisher, it uses the login you specified when creating the subscription (in this case 'adventure-works\john5'). Der Merge-Agent vergleicht dann den von SUSER_SNAME() zurückgegebenen Wert mit den Werten in der Tabelle und lädt nur die Zeile herunter, die in der LoginID -Spalte den Wert 'adventure-works\john5' enthält.The Merge Agent then compares the value returned by SUSER_SNAME() to the values in the table and downloads only the row that contains a value of 'adventure-works\john5' in the LoginID column.

Filtern mit HOST_NAME()Filtering with HOST_NAME()

Sehen Sie sich die HumanResources.Employee -Tabelle an.Consider the HumanResources.Employee table. Nehmen wir an, diese Tabelle enthält eine ComputerName -Spalte, in der die Namen der Computer der einzelnen Mitarbeiter aufgeführt sind. Die Einträge weisen die Form 'name_computertype' auf.Suppose this table contained a column such as ComputerName with the name of each employee's computer in the form 'name_computertype'. Wenn Sie diese Tabelle so filtern möchten, dass alle Mitarbeiter nur die Daten erhalten, die für sie jeweils relevant sind, geben Sie folgende Filterklausel an:To filter this table so that employees receive only the data related to them, specify a filter clause of:

ComputerName = HOST_NAME()  

Nehmen wir z. B. an, der Wert für einen der Mitarbeiter ist 'john5_laptop'.For example, the value for one of the employees could be 'john5_laptop'. Wenn der Merge-Agent eine Verbindung mit dem Verleger hergestellt hat, vergleicht er den von HOST_NAME() zurückgegebenen Wert mit den Werten in der Tabelle und lädt nur die Zeile herunter, die in der ComputerName -Spalte den Wert 'john5_laptop' enthält.When the Merge Agent connects to the Publisher, it compares the value returned by HOST_NAME() to the values in the table and downloads only the row that contains a value of 'john5_laptop' in the ComputerName column.

Die beiden Funktionen können zu Filterzwecken auch kombiniert werden.It is also possible to combine the functions in a filter. Wenn Sie beispielsweise sicherstellen möchten, dass ein Mitarbeiter nur dann Daten erhält, wenn er sich mit seinem Anmeldenamen auf seinem Computer angemeldet hat, könnte folgende Filterklausel eingerichtet werden:For example, if you wanted to ensure that an employee received data only if they used their login on their computer, the filter clause could be:

LoginID = SUSER_SNAME() AND ComputerName = HOST_NAME()  

Sofern Sie nicht den HOST_NAME()-Wert überschreiben, wird das Filtern mit HOST_NAME() in der Regel nur bei Pullabonnements verwendet.Unless you are overriding the HOST_NAME() value, filtering with HOST_NAME() is typically used only with pull subscriptions. Die Funktion gibt den Namen des Computers zurück, auf dem der Merge-Agent ausgeführt wird.The value returned by the function is the name of the computer on which the Merge Agent is running. Bei Pullabonnements ist dieser Wert für jedes Abonnement anders. Im Falle der Pushabonnements bleibt der Wert jedoch immer gleich, weil bei diesem Abonnementtyp alle Merge-Agents auf dem Verteiler ausgeführt werden.For pull subscriptions, the value is different for each subscription, but for push subscriptions, the value is the same (all Merge Agents run at the Distributor for push subscriptions).

Wichtig

Der Wert für die HOST_NAME()-Funktion kann überschrieben werden. Daher können Filter, die HOST_NAME() enthalten, nicht für die Steuerung des Zugriffs auf Datenpartitionen verwendet werden.The value for the HOST_NAME() function can be overridden; therefore it is not possible to use filters that include HOST_NAME() to control access to partitions of data. Für die Steuerung des Zugriffs auf Datenpartitionen sollten Sie daher SUSER_SNAME(), SUSER_SNAME() in Kombination mit HOST_NAME() oder statische Zeilenfilter verwenden.To control access to partitions of data, use SUSER_SNAME(), SUSER_SNAME() in combination with HOST_NAME(), or use static row filters.

Überschreiben des HOST_NAME()-WertesOverriding the HOST_NAME() Value

Wie bereits erwähnt, gibt HOST_NAME() den Namen des Computers zurück, der eine Verbindung mit einer Instanz von SQL ServerSQL Serverherstellt.As noted earlier, HOST_NAME() by default returns the name of the computer that is connecting to an instance of SQL ServerSQL Server. Bei der Verwendung parametrisierter Filter wird dieser Wert häufig überschrieben, indem bei der Abonnementerstellung ein anderer Wert angegeben wird.When using parameterized filters, it is common to override this value by supplying a value when you create a subscription. Daraufhin wird durch die HOST_NAME()-Funktion nicht der Name des Computers, sondern der von Ihnen angegebene Wert zurückgegeben.The HOST_NAME() function then returns the value you specify rather than the name of the computer.

Hinweis

Wenn Sie HOST_NAME() überschreiben, wird für sämtliche Aufrufe der HOST_NAME()-Funktion der von Ihnen angegebene Wert zurückgegeben.If you override HOST_NAME(), all calls to the HOST_NAME() function will return the value you specify. Stellen Sie sicher, dass keine andere Anwendung darauf angewiesen ist, dass HOST_NAME() den Computernamen zurückgibt.Ensure that other applications are not depending on HOST_NAME() returning the computer name.

Sehen Sie sich die HumanResources.Employee -Tabelle an.Consider the HumanResources.Employee table. Diese Tabelle enthält die EmployeeID-Spalte.This table includes the column EmployeeID. Wenn Sie diese Tabelle so filtern möchten, dass jeder Mitarbeiter nur die Daten erhält, die für ihn relevant sind, geben Sie folgende Filterklausel an:To filter this table so that each employee receives only the data related to them, specify a filter clause of:

EmployeeID = CONVERT(int,HOST_NAME())

Der Mitarbeiterin Pamela Ansman-Wolfe wurde z. B. eine Mitarbeiter-ID von 280 zugewiesen.For example, employee Pamela Ansman-Wolfe has been assigned an employee ID of 280. Geben Sie bei der Erstellung eines Abonnements für diese Mitarbeiterin als Wert für HOST-NAME() die Mitarbeiternummer (hier: 280) an.Specify the value of the employee ID (280 in our example) for the HOST_NAME() value when creating a subscription for this employee. Wenn der Merge-Agent eine Verbindung mit dem Verleger hergestellt hat, vergleicht er den von HOST_NAME() zurückgegebenen Wert mit den Werten in der Tabelle und lädt nur die Zeile herunter, bei der der Wert 280 in der EmployeeID -Spalte enthalten ist.When the Merge Agent connects to the Publisher, it compares the value returned by HOST_NAME() to the values in the table and downloads only the row that contains a value of 280 in the EmployeeID column.

Wichtig

Die HOST_NAME()-Funktion gibt einen nchar -Wert zurück, sodass Sie CONVERT verwenden müssen, wenn es sich bei der Spalte in der Filterklausel um eine numerische Spalte handelt (wie im Beispiel oben).The HOST_NAME() function returns an nchar value, so you must use CONVERT if the column in the filter clause is of a numeric data type, as it is in the example above. Zur Verbesserung der Leistung sollten Funktionen nicht auf Spaltennamen in Klauseln für parametrisierte Zeilenfilter (wie CONVERT(nchar,EmployeeID) = HOST_NAME()) angewendet werden.For performance reasons, we recommended that you do not apply functions to column names in parameterized row filter clauses, such as CONVERT(nchar,EmployeeID) = HOST_NAME(). Gehen Sie stattdessen wie im folgenden Beispiel vor: EmployeeID = CONVERT(int,HOST_NAME()).Instead, we recommend using the approach shown in the example: EmployeeID = CONVERT(int,HOST_NAME()). Diese Klausel kann zwar für den @subset_filterclause -Parameter von @subset_filterclauseverwendet werden, in der Regel aber nicht im Assistenten für neue Veröffentlichung. (Der Assistent führt die Filterklausel aus, um sie zu überprüfen, erhält dabei aber ein negatives Ergebnis, weil der Computername nicht in einen intals dynamische Filter bezeichnet).This clause can be used for the @subset_filterclause parameter of sp_addmergearticle, but it typically cannot be used in the New Publication Wizard (the wizard executes the filter clause to validate it, which fails because the computer name cannot be converted to an int). Wenn Sie mit dem Assistenten für neue Veröffentlichung arbeiten, sollten Sie vor dem Erstellen einer Momentaufnahme für die Veröffentlichung CONVERT(nchar,EmployeeID) = HOST_NAME() im Assistenten angeben und dann sp_changemergearticle verwenden, um die Klausel in EmployeeID = CONVERT(int,HOST_NAME()) zu ändern.If you use the New Publication Wizard, we recommend specifying CONVERT(nchar,EmployeeID) = HOST_NAME() in the wizard and then use sp_changemergearticle to change the clause to EmployeeID = CONVERT(int,HOST_NAME()) before creating a snapshot for the publication.

So überschreiben Sie den HOST_NAME()-WertTo override the HOST_NAME() value

Verwenden Sie zum Überschreiben des Wertes für HOST_NAME() eine der folgenden Methoden:Use one of the following methods to override the HOST_NAME() value:

Initialisieren von Veröffentlichungsabonnements mit parametrisierten FilternInitializing a Subscription to a Publication with Parameterized Filters

Wenn parametrisierte Zeilenfilter in Mergeveröffentlichungen verwendet werden, wird jedes Abonnement bei der Replikation mit einer zweiteiligen Momentaufnahme initialisiert.When parameterized row filters are used in merge publications, replication initializes each subscription with a two-part snapshot. Weitere Informationen finden Sie unter Snapshots for Merge Publications with Parameterized Filters.For more information, see Snapshots for Merge Publications with Parameterized Filters.

Verwenden der richtigen FilteroptionenUsing the Appropriate Filtering Options

Bei der Verwendung von parametrisierten Filtern können Sie die folgenden beiden Schlüsselbereiche steuern:There are two key areas over which you have control when using parameterized filters:

  • Sie können festlegen, wie die Filter durch die Mergereplikation verarbeitet werden. Dazu stehen zwei Veröffentlichungseinstellungen zur Verfügung: use partition groups und keep partition changes.How the filters are processed by merge replication, which is controlled by one of two publication settings: use partition groups and keep partition changes.

  • Sie können steuern, wie die Daten auf die einzelnen Abonnenten aufgeteilt werden. Dies muss sich in der Artikeleinstellung partition optionswiderspiegeln.How the data is shared among Subscribers, which must be reflected by the article setting partition options.

    Informationen zum Festlegen von Filteroptionen finden Sie unter Optimize Parameterized Row Filters.To set filtering options, see Optimize Parameterized Row Filters.

Festlegen von 'use partition groups' und 'keep partition changes'Setting 'use partition groups' and 'keep partition changes'

Die Optionen use partition groups und keep partition changes verbessern bei Veröffentlichungen mit gefilterten Artikeln die Synchronisierungsleistung, da in der Veröffentlichungsdatenbank zusätzliche Metadaten gespeichert werden.Both the use partition groups and keep partition changes options improve the synchronization performance for publications with filtered articles by storing additional metadata in the publication database. Da die Option use partition groups auf vorausberechnete Partitionen zurückgreift, bietet sie das größere Potenzial für eine Leistungserhöhung.The use partition groups option provides greater performance improvement through the use of the precomputed partitions feature. Diese Option ist standardmäßig auf true festgelegt, wenn die Artikel in Ihrer Veröffentlichung einem Satz von Anforderungen entsprechen.This option is set to true by default if the articles in your publication adhere to a set of requirements. Weitere Informationen zu diesen Anforderungen finden Sie unter Optimieren der Leistung parametrisierter Filter mithilfe vorausberechneter Partitionen.For more information about these requirements, see Optimize Parameterized Filter Performance with Precomputed Partitions. Wenn die Anforderungen für die Verwendung vorausberechneter Partitionen von Ihren Artikeln nicht erfüllt werden, wird die Option keep partition changes auf truefestgelegt.If your articles do not meet the requirements for using precomputed partitions, the keep partition changes option to is set to true.

Festlegen von 'partition options'Setting 'partition options'

Der Wert für die partition options -Eigenschaft wird angegeben, wenn Sie einen Artikel erstellen. Ausschlaggebend für den Wert ist dabei die Art und Weise, wie die Daten in der gefilterten Tabelle für mehrere Abonnenten freigegeben werden.You specify a value for the partition options property when creating an article, according to the way in which data in the filtered table will be shared by Subscribers. Die Eigenschaft kann mithilfe von sp_addmergearticle, sp_changemergearticleund dem Dialogfeld Artikeleigenschaften auf einen von vier Werten festgelegt werden.The property can be set to one of four values using sp_addmergearticle, sp_changemergearticle, and the Article Properties dialog box. Wird das Dialogfeld Filter hinzufügen oder Filter bearbeiten verwendet, kann aus zwei Werten ausgewählt werden. Diese beiden Dialogfelder stehen über den Assistenten für neue Veröffentlichung und das Dialogfeld Veröffentlichungseigenschaften zur Verfügung.The property can be set to one of two values using the Add Filter or Edit Filter dialog boxes, which are available from the New Publication Wizard and the Publication Properties dialog box. Die folgende Tabelle gibt einen Überblick über die verfügbaren Werte für diese Eigenschaft:The following table summarizes the available values:

BeschreibungDescription Wert in Filter hinzufügen und Filter bearbeitenValue in Add Filter and Edit Filter Wert in ArtikeleigenschaftenValue in Article Properties Wert in gespeicherten ProzedurenValue in stored procedures
Daten in den Partitionen überlappen sich. Der Abonnent kann die Spalten, auf die im parametrisierten Filter verwiesen wird, aktualisieren.Data in the partitions is overlapping, and the Subscriber can update columns referenced in a parameterized filter. Eine Zeile aus dieser Tabelle wird an mehrere Abonnements gesendetA row from this table will go to multiple subscriptions ÜberlappendOverlapping 00
Daten in den Partitionen überlappen sich. Der Abonnent kann die Spalten, auf die in parametrisierten Filtern verwiesen wird, nicht aktualisieren.Data in the partitions is overlapping, and the Subscriber cannot update columns referenced in a parameterized filter. Nicht zutreffendN/A Überlappend, Datenänderungen außerhalb der Partition nicht zulassenOverlapping, disallow out-of-partition data changes 11
Daten in den Partitionen überlappen sich nicht. Die Daten werden für die Abonnements freigegeben.Data in the partitions is not overlapping, and the data is shared between subscriptions. Der Abonnent kann Spalten, auf die in einem parametrisierten Filter verwiesen wird, nicht aktualisieren.The Subscriber cannot update columns referenced in a parameterized filter. Nicht zutreffendN/A Nicht überlappend, für mehrere Abonnements freigegebenNonoverlapping, shared between subscriptions 22
Daten in den Partitionen überlappen sich nicht. Jeder Partition ist genau ein Abonnement zugewiesen.Data in the partitions is not overlapping, and there is a single subscription per partition. Der Abonnent kann Spalten, auf die in einem parametrisierten Filter verwiesen wird, nicht aktualisieren.The Subscriber cannot update columns referenced in a parameterized filter. Eine Zeile aus dieser Tabelle wird nur an ein Abonnement gesendetA row from this table will go to only one subscription Nicht überlappend, ein AbonnementNonoverlapping, single subscription 33

*Wenn die zugrunde liegende Filteroption auf den Wert 0, 1 oder 2 festgelegt ist, wird in den Dialogfeldern Filter hinzufügen und Filter bearbeiten die Meldung Eine Zeile aus dieser Tabelle wird an mehrere Abonnements gesendet angezeigt.*If the underlying filtering option is set to 0, or 1, or 2, the Add Filter and Edit Filter dialog boxes will display A row from this table will go to multiple subscriptions.

Wenn Sie diese Option angeben, gibt es für jede Datenpartition im Artikel genau ein Abonnement.If you specify this option, there can only be a single subscription for each partition of data in that article. Wird ein zweites Abonnement erstellt, in dem das Filterkriterium des neuen Abonnements die gleiche Partition ergibt wie das vorhandene Abonnement, wird das vorhandene Abonnement gelöscht.If a second subscription is created in which the filtering criterion of the new subscription resolves to the same partition as the existing subscription, the existing subscription is dropped.

Wichtig

Der Wert für partition options muss sich danach richten, wie die Daten für mehrere Abonnenten freigegeben werden.The partition options value must be set according to how data is shared by Subscribers. Wenn Sie beispielsweise für eine Partition angeben, dass sie nicht überlappend und nur einem spezifischen Abonnenten zugewiesen sein soll, die Daten dann aber von einem anderen Abonnenten aktualisiert werden, kann dies zu einem Fehlschlagen der Synchronisierung des Merge-Agents und zu einer Nichtkonvergenz führen.If, for example, you specify that a partition is nonoverlapping with a single subscription per partition, but data is then updated at another Subscriber, the Merge Agent can fail during synchronization and non-convergence can occur.

Auswählen der richtigen PartitionsoptionSelecting the Appropriate Partition Option

Nicht überlappende Partitionen arbeiten mit vorausberechneten Partitionen zusammen, um dort, wo einige funktionale Einschränkungen akzeptabel sind, die Leistung zu verbessern.Nonoverlapping partitions work in conjunction with precomputed partitions to improve performance in situations where some functional limitations are acceptable. Die vorausberechneten Partitionen beschleunigen Downloads auf Abonnenten, verlangsamen aber Uploads.Precomputed partitions quicken downloads to Subscribers, but slow uploads. Nicht überlappende Partitionen minimieren die bei vorausberechneten Partitionen entstehenden Uploadkosten.Nonoverlapping partitions minimize the upload cost associated with precomputed partitions. Die Leistungsvorteile nicht überlappender Partitionen treten deutlicher hervor, wenn die verwendeten parametrisierten Filter und Joinfilter komplexer sind.The performance benefit of nonoverlapping partitions is more noticeable when the parameterized filters and join filters used are more complex.

Die folgenden Szenarien sollen veranschaulichen, welche Partitionsoptionen in einer Veröffentlichung ausgewählt werden sollten.Consider the following scenarios when deciding which partition options to use in a publication.

  • Adventure WorksAdventure Works unterhält einen mobilen Außendienst, wobei die Vertreter jeweils für einen bestimmten Postleitzahlenbereich zuständig sind. has a mobile sales force with each sales person responsible for customers in a given zip code. Die Anwendung soll in der Lage sein, bei Umzügen von Kunden von einem Postleitzahlenbereich in einen anderen die Kundenpostleitzahl so zu aktualisieren, dass der Kunde einem anderen Vertreter zugewiesen wird.The application requires that the zip code be updated if a customer moves from one sales territory to another, so that the customer is assigned to a different sales person. Der parametrisierte Filter basiert auf der Postleitzahl des Kunden. Das Update führt dazu, dass die Postleitzahl aus der Partition des früheren Vertreters entfernt und in die Partition des neuen Vertreters eingefügt wird.The parameterized filter is based on the customer's zip code, and the update removes the zip code from one sales person's partition and inserts it into another sales person's partition. Dafür sind überlappende Partitionen mit der Möglichkeit erforderlich, Spalten zu aktualisieren, auf die im parametrisierten Filter verwiesen wird.This requires overlapping partitions with the ability to update columns referenced in a parameterized filter. Diese Option bietet ein Höchstmaß an Flexibilität, führt aber im Vergleich zu nicht überlappenden Partitionen zu Einbußen bei der Leistung.This option maximizes flexibility but might not perform as well as nonoverlapping partitions.

  • Eine Arbeitsvermittlung verfügt über Daten, die an die untergeordneten Behörden in den einzelnen Landkreisen verteilt werden sollen.An employment agency has data that is supplied to regional offices in each county of the state. Die Daten sind nicht überlappend, d. h., jede Zeile in der Tabelle in der Landeszentrale gehört nur zu einer Partition, diese Partition wird aber an mehrere Außenstellen im selben Landkreis gesendet.The data does not overlap; each row in the table at the agency's headquarters is included in only one partition, but that partition is sent to multiple offices in the same county. In diesem Fall empfiehlt sich die Verwendung von nicht überlappenden Partitionen, die für mehrere Abonnements freigegeben werden. Dies ermöglicht eine höhere Leistung als bei überlappenden Partitionen, ohne dass dabei Abstriche an der Erfüllung der Anwendungsanforderungen gemacht werden müssen.The nonoverlapping partition option with partitions shared between subscriptions is appropriate, providing a performance improvement over overlapping partitions while satisfying the application requirements.

  • Wenn Sie nicht überlappende Partitionen haben und nur ein Abonnent die Daten in der Partition empfängt und aktualisiert, lassen sich weitere Leistungsverbesserungen erzielen.If you have nonoverlapping partitions and only one subscription receives and updates the data in a partition, further performance benefits can be realized. Dieses Szenario ist beispielsweise für Point-of-Sale-Systeme und Außendienstanwendungen typisch, in denen Daten vor allem auf dem Abonnenten erfasst und zum Verleger hochgeladen werden.This scenario is common for point of sale systems, and field force applications in which data is primarily collected at the Subscriber and uploaded to the Publisher. Angenommen, in einer Außendienstanwendung ist eine Package -Tabelle vorhanden: Jedes Mal, wenn ein Paket auf einen LKW verladen wird, wird der Status des Pakets in der Package -Tabelle entsprechend geändert, und die Änderung wird an die Zentrale zurückrepliziert.Consider a Package table in a delivery application: as each package is loaded onto a truck, the status of the package is changed in the Package table, and the change is replicated back to headquarters. Da der Status ein und desselben Pakets nicht auf zwei unterschiedlichen LKWs aktualisiert werden wird, eignet sich die Package -Tabelle hervorragend für eine nicht überlappende Partition mit einem Abonnenten pro Partition.Drivers would not update the status of the same package on two different trucks, so the Package table is a good candidate for a nonoverlapping partition with a single subscription per partition.

Überlegungen zu nicht überlappenden PartitionenConsiderations for Nonoverlapping Partitions

Beachten Sie bei der Verwendung von nicht überlappenden Partitionen Folgendes:Keep the following considerations in mind when using nonoverlapping partitions.

Allgemeine ÜberlegungenGeneral Considerations
  • Die Veröffentlichung muss vorausberechnete Partitionen verwenden.The publication must use precomputed partitions.

  • Jede Zeile darf nur zu einer einzigen Partition gehören.A row must belong to only one partition.

  • Artikel dürfen nicht Teil logischer Datensätze sein.Articles cannot be part of a logical record.

  • Alternative Synchronisierungspartner werden nicht unterstützt (diese Funktion ist als veraltet markiert).Alternate synchronization partners are not supported (this feature is deprecated).

  • Der Abonnent kann Spalten, auf die in einem parametrisierten Filter verwiesen wird, nicht aktualisieren.The Subscriber cannot update columns referenced in a parameterized filter.

  • Wenn eine Einfügung bei einem Abonnenten nicht zur Partition gehört, wird sie nicht gelöscht.If an insert at a Subscriber does not belong to the partition, it is not deleted. Sie wird aber auch nicht auf die anderen Abonnenten repliziert.However, it will not be replicated to other Subscribers.

  • In einigen Fällen kann es bei überlappenden Partitionen passieren, dass Identitätsbereiche angepasst werden, wenn der Merge-Agent Daten einfügt.In some circumstances with overlapping partitions, identity ranges are adjusted when the Merge Agent inserts data. Bei nicht überlappenden Partitionen können Bereiche nur während des Einfügens durch einen Benutzer angepasst werden, der zur Anpassung von Identitätsbereichen in der Abonnementdatenbank berechtigt ist.With nonoverlapping partitions, ranges can only be adjusted during inserts by a user who has permission to adjust identity ranges in the subscription database. Der Benutzer muss die Tabelle besitzen oder Mitglied der festen Serverrolle sysadmin bzw. der festen Datenbankrolle db_owner oder db_ddladmin sein.The user must either own the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

Zusätzliche Überlegungen für nicht überlappende Partitionen mit einem Abonnenten pro PartitionAdditional Considerations for Nonoverlapping Partitions with a Single Subscription per Partition
Zusätzliche Überlegungen zu JoinfilternAdditional Considerations for Join Filters
  • Artikel mit einer überlappenden Partition dürfen in Joinfilterhierarchien nicht oberhalb von Artikeln mit einer nicht überlappenden Partition angezeigt werden.In a join filter hierarchy, an article with an overlapping partition cannot appear above an article with a nonoverlapping partition. Anders ausgedrückt: Ein übergeordneter Artikel muss nicht überlappende Partitionen verwenden, wenn dies für den untergeordneten Artikel zutrifft.In other words, a parent article must use nonoverlapping partitions if the child article does. Informationen zu Joinfiltern finden Sie unter Join Filters.For information about join filters, see Join Filters.

  • Bei Joinfiltern, in denen die nicht überlappende Partition untergeordnet ist, muss für die join unique key -Eigenschaft der Wert 1 festgelegt sein.A join filter in which the nonoverlapping partition is a child must have the join unique key property set to 1. Weitere Informationen finden Sie unter Join Filters.For more information, see Join Filters.

  • Der Artikel sollte nur einen einzigen parametrisierten Filter bzw. Joinfilter aufweisen.The article should only have one parameterized filter or join filter. Ein Artikel darf einen parametrisierten Filter aufweisen und gleichzeitig in einem Joinfilter übergeordnet sein.Having a parameterized filter and being the parent in a join filter is allowed. Hingegen ist es nicht möglich, dass ein Artikel einen parametrisierten Filter aufweist und gleichzeitig in einem Joinfilter untergeordnet ist.Having a parameterized filter and being the child in a join filter is not allowed. Darüber hinaus darf der Artikel nicht über mehrere Joinfilter verfügen.Having more than one join filter is also not allowed.

  • Wenn zwei Tabellen auf dem Abonnenten über eine Joinfilterbeziehung verfügen und die untergeordnete Tabelle Zeilen enthält, für die es in der übergeordneten Tabelle keine entsprechende Zeile gibt, führt das Einfügen der fehlenden übergeordneten Zeile nicht dazu, dass die zugehörigen Zeilen auf den Abonnenten heruntergeladen werden (bei überlappenden Partitionen würde ein Download erfolgen).If two tables at the Publisher have a join filter relationship and the child table has rows that have no corresponding row in the parent table, an insert of the missing parent row will not result in the related rows being downloaded to the Subscriber (the rows would be downloaded with overlapping partitions). Wenn z. B. die SalesOrderDetail -Tabelle über Zeilen ohne zugehörige Zeile in der SalesOrderHeader -Tabelle verfügt und Sie die fehlende Zeile in SalesOrderHeadereinfügen, wird zwar die Zeile auf dem Abonnenten heruntergeladen, nicht aber die zugehörigen Zeilen in SalesOrderDetail .For example, if the SalesOrderDetail table has rows with no corresponding row in the SalesOrderHeader table, and you insert the missing row in SalesOrderHeader, the row is downloaded to the Subscriber, but the corresponding rows in SalesOrderDetail are not.

Siehe auchSee Also

Bewährte Methoden für zeitbasierte Zeilenfilter Best Practices for Time-Based Row Filters
Filtern von veröffentlichten Daten Filter Published Data
Filtern veröffentlichter Daten für die Mergereplikation Filter Published Data for Merge Replication