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 basées sur les exigences des abonnés individuels.
Éviter ou réduire les conflits si 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. Les filtres de lignes et les filtres de colonnes peuvent être utilisés pour restreindre l'accès d'un abonné aux données. Pour la réplication de fusion, des règles de sécurité s'appliquent si vous utilisez un filtre paramétré comportant 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.
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. Prenez la Table Product (AdventureWorks) de la base de données exemple Adventure Works contenant 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 de capture instantanée 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).
[!REMARQUE]
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
SQL Server Management Studio: Procédure : définir et modifier un filtre de lignes statiques (SQL Server Management Studio)
Programmation de la réplication avec Transact-SQL : Procédure : définir et modifier un filtre de lignes statique (programmation Transact-SQL de la réplication)
Programmation d'objets RMO (Replication Management Objects) : Procédure : définir un article (programmation RMO)
Filtres de colonnes
L'illustration suivante montre une publication qui filtre la colonne C :
Vous pouvez également combiner le filtrage de lignes et de colonnes, comme le montre l'illustration suivante.
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 de capture instantanée 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 de capture instantanée ou publications transactionnelles qui autorisent les abonnements pouvant être mis à jour |
Colonnes avec contraintes ou index uniques |
Publications de capture instantanée 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 de capture instantanée 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
SQL Server Management Studio: Procédure : définir et modifier un filtre de colonne (SQL Server Management Studio)
Programmation de la réplication avec Transact-SQL : Procédure : définir et modifier un filtre de colonne (programmation Transact-SQL de la réplication)
Programmation d'objets RMO (Replication Management Objects) : Procédure : définir un article (programmation RMO)
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.