Filtrage des données publiées

Le filtrage des articles de table vous permet de créer des partitions de données à publier. En filtrant les données publiées, vous pouvez :

  • Réduire la quantité de données envoyées via le réseau.

  • Réduire la quantité d’espace de stockage requis sur l’abonné.

  • Personnaliser les publications et les applications en fonction des exigences des abonnés individuels.

  • Éviter ou réduire les conflits lorsque les abonnés mettent à jour les données car différentes partitions de données peuvent être envoyées vers différents abonnés (deux abonnés ne mettent pas à jour les mêmes valeurs de données).

  • Éviter de transmettre des données sensibles. Vous pouvez utiliser les filtres de lignes et de colonne pour limiter l'accès d'un abonné aux données. Pour les réplications de fusion, vous devez tenir compte de certains points de sécurité si vous utilisez un filtre paramétré qui inclut HOST_NAME(). Pour plus d'informations, consultez la section « Filtrage avec HOST_NAME() » dans Filtres de lignes paramétrés.

La réplication offre quatre types de filtres :

  • Les filtres de lignes statiques, disponibles avec tous les types de réplication.

    À l'aide des filtres de lignes statiques, vous pouvez choisir un sous-ensemble de lignes à publier. Tous les abonnés à une publication filtrée reçoivent le même sous-ensemble de lignes pour la table filtrée. Pour plus d'informations, consultez la section « Filtres de lignes statiques » dans cette rubrique.

  • Les filtres de colonnes, disponibles avec tous les types de réplication.

    À l'aide des filtres de colonnes, vous pouvez choisir un sous-ensemble de colonnes à publier. Pour plus d'informations, consultez la section « Filtres de colonnes » dans cette rubrique.

  • Les filtres de lignes paramétrables, disponibles uniquement avec la réplication de fusion.

    À l'aide des filtres de lignes paramétrables, vous pouvez choisir un sous-ensemble de lignes à publier. Contrairement aux filtres statiques qui envoient le même sous-ensemble de lignes à chaque abonné, les filtres des lignes paramétrables se servent d'une valeur de données fournie par l'Abonné pour envoyer différents sous-ensembles de lignes aux abonnés. Pour plus d'informations, consultez Filtres de lignes paramétrés.

  • Les filtres de jointure, disponibles uniquement avec la réplication de fusion.

    À l'aide des filtres de jointure, vous pouvez étendre un filtre de lignes d'une table publiée à l'autre. Pour plus d'informations, consultez Filtres de jointure.

Filtres de lignes statiques

L'illustration suivante montre une table publiée filtrée pour que seules les lignes 2, 3 et 6 soient intégrées à la publication.

Filtrage de lignes

Un filtre de lignes statiques utilise une clause WHERE pour sélectionner les données appropriées à publier, c'est à vous de spécifier la dernière partie de la clause WHERE. Considérez la table Product dans l'exemple de base de données AdventureWorks2008R2, qui contient la colonne ProductLine. Pour publier uniquement les lignes comportant des données relatives aux vélos tout terrain, spécifiez ProductLine = 'M'.

Un filtre de lignes statiques a pour résultat un ensemble unique de données pour chaque publication. Dans l'exemple précédent, tous les abonnés doivent recevoir uniquement les lignes avec des données sur les produits relatifs aux vélos tout terrain. Si vous avez un autre abonné qui a également uniquement besoin des lignes avec des données relatives aux vélos tout terrain :

  • Avec la réplication d'instantané ou transactionnelle, vous pouvez créer une autre publication et inclure la table dans les deux publications (spécifiez ProductLine = 'R') dans la clause de filtre pour l'article de cette publication).

    Notes

    Dans les publications transactionnelles, les filtres de lignes peuvent ajouter un surcroît de traitement considérable car la clause de filtrage d'articles est évaluée pour chaque ligne de journal écrite pour une table publiée afin de déterminer si la ligne doit être répliquée. Les filtres de lignes doivent être évités dans les publications transactionnelles si chaque nœud de réplication peut prendre en charge la charge complète des données, et si l'ensemble global des données est relativement peu volumineux.

  • Avec la réplication de fusion, utilisez le filtrage des lignes paramétrables plutôt que la création de plusieurs publications à l'aide des filtres de lignes statiques. Pour plus d'informations, consultez Filtres de lignes paramétrés.

Pour définir et modifier un filtre de lignes statiques

Filtres de colonnes

L'illustration suivante montre une publication qui filtre la colonne C :

Filtrage de colonnes

Vous pouvez également combiner le filtrage de lignes et de colonnes, comme le montre l'illustration suivante.

Filtrage de lignes et de colonnes

Après qu'une publication soit créée, vous pouvez utiliser le filtrage de colonnes pour supprimer une colonne d'une publication existante, mais la conserver dans la table sur le serveur de publication, et vous pouvez également inclure une colonne existante dans la publication. Pour les autres modifications, comme l'ajout d'une nouvelle colonne à une table puis à l'article publié, utilisez la réplication de modification de schéma. Pour plus d'informations, consultez les sections « Ajout de colonnes » et « Suppression de colonnes » dans la rubrique Modification du schéma dans les bases de données de publication.

Les types de colonnes listés dans la table suivante ne peuvent pas être filtrés de certains types de publications.

Type de colonne

Type de publication et options

Colonne de clé primaire

Les colonnes de clé primaire sont requises pour toutes les tables des publications transactionnelles. Elles ne sont pas requises pour les tables des publications de fusion, mais si une colonne de clé primaire est présente, elle ne peut pas être filtrée.

Colonne de clé étrangère

Toutes les publications créées à l'aide de l'Assistant Nouvelle publication. Vous pouvez filtrer les colonnes de clé étrangère à l'aide des procédures stockées Transact-SQL. Pour plus d'informations, consultez Procédure : définir et modifier un filtre de colonne (programmation Transact-SQL de la réplication).

La colonne rowguid

Publications de fusion 1

La colonne msrepl_tran_version

Publications d'instantané ou publications transactionnelles qui autorisent les abonnements pouvant être mis à jour

Colonnes n'autorisant pas la valeur NULL et n'ayant pas de valeur par défaut ou n'ayant pas la propriété IDENTITY définie.

Publications d'instantané ou publications transactionnelles qui autorisent les abonnements pouvant être mis à jour

Colonnes avec contraintes ou index uniques

Publications d'instantané ou publications transactionnelles qui autorisent les abonnements pouvant être mis à jour

Toutes les colonnes d'une publication de fusion SQL Server 7.0

Il est impossible de filtrer les colonnes dans les publications de fusion SQL Server 7.0.

Horodateur

Publications d'instantané ou publications transactionnelles SQL Server 7.0 qui autorisent les abonnements pouvant être mis à jour

1 Si vous publiez une table dans une réplication de fusion et que cette table contient déjà une colonne de type de données uniqueidentifier avec la propriété ROWGUIDCOL définie, la réplication peut utiliser cette colonne au lieu de créer une colonne supplémentaire nommée rowguid. Dans ce cas, la colonne existante doit être publiée.

Pour définir ou modifier un filtre de colonne

Règles de filtrage

Retenez les règles suivantes lors du filtrage de données :

  • Toutes les colonnes référencées dans les filtres de lignes doivent être intégrées à la publication. En d'autres termes, vous ne pouvez pas utiliser un filtre de colonne pour exclure une colonne utilisée dans un filtre de lignes.

  • Si un filtre est ajouté ou modifié après l'initialisation des abonnements, ces derniers doivent être réinitialisés.

  • La taille maximale d'une colonne utilisée dans un filtre est de 1 024 octets pour un article d'une publication de fusion, et de 8 000 octets pour un article d'une publication transactionnelle.

  • Les colonnes avec les types de données suivants ne peuvent pas être référencées dans des filtres de lignes ou de jointure :

    • varchar(max) and nvarchar(max)

    • varbinary(max)

    • text and ntext

    • image

    • XML

    • UDT

  • La réplication transactionnelle vous permet de répliquer une vue indexée comme une vue ou une table. Si vous répliquez la vue comme une table, vous ne pouvez pas filtrer les colonnes de la table.