Publication de données et d'objets de base de données

Lors de la création d'une publication, vous choisissez les tables et les autres objets de base de données à publier. Vous pouvez publier les objets de base de données suivants à l'aide de la réplication.

Objet de base de données

Réplication de capture instantanée et réplication transactionnelle

Réplication de fusion

Tables

X

X

Tables partitionnées

X

X

Procédures stockées – Définition (Transact-SQL et CLR)

X

X

Procédures stockées – Exécution (Transact-SQL et CLR)

X

non

Vues

X

X

Vues indexées

X

X

Vues indexées comme des tables

X

non

Types définis par l'utilisateur (CLR)

X

X

Fonctions définies par l'utilisateur (Transact-SQL et CLR)

X

X

Types de données alias

X

X

Index de texte intégral

X

X

Objets de schéma (contraintes, index, déclencheurs DML utilisateur, propriétés étendues et classement)

X

X

Création de publications

Pour créer une publication, vous fournissez les informations suivantes :

  • Le serveur de distribution.

  • L'emplacement des fichiers de capture instantanée.

  • La base de données de publication.

  • Le type de publication à créer (capture instantanée, transactionnelle, transactionnelle avec abonnements pouvant être mis à jour ou fusion).

  • les données et les objets de base de données (articles) à inclure à la publication ;

  • Filtres de lignes statiques et filtres de colonnes statiques pour tous les types de publications, et filtres de lignes paramétrés et filtres de jointure pour les publications de fusion.

  • La planification de l'Agent de capture instantanée.

  • Les comptes sous lesquels les agents suivants s'exécutent : l'Agent de capture instantanée pour toutes les publications ; l'Agent de lecture du journal pour toutes les publications transactionnelles ; l'Agent de lecture de la file d'attente pour les publications transactionnelles qui autorisent les abonnements pouvant être mis à jour.

  • un nom et une description pour la publication ;

Pour créer des publications et définir des articles

Pour modifier des publications et des articles

Pour supprimer des publications et des articles

[!REMARQUE]

La suppression d'un article ou d'une publication ne supprime pas les objets sur l'Abonné.

Publication de tables

L'objet le plus couramment publié est une table. Les liens suivants donnent des informations supplémentaires sur les éléments relatifs à la publication des tables :

Lors de la publication d'une table pour la réplication, vous pouvez spécifier les objets de schéma qui doivent être copiés vers l'Abonné, tels que l'intégrité référentielle déclarée (contraintes de clé primaire, contraintes référentielles, contraintes uniques), des index, des déclencheurs DML utilisateur (des déclencheurs DDL qui ne peuvent pas être répliqués), des propriétés étendues et des classements. Les propriétés étendues sont répliquées uniquement dans la synchronisation initiale entre le serveur de publication et l'Abonné. Si vous ajoutez ou modifiez une propriété étendue après la synchronisation initiale, la modification n'est pas répliquée.

Pour spécifier des options de schéma

Tables et index partitionnés

La réplication prend en charge la publication de tables et d'index partitionnés. Le niveau de prise en charge dépend du type de réplication utilisé, ainsi que des options que vous spécifiez pour la publication et les articles associés aux tables partitionnées. Pour plus d'informations, consultez Réplication de tables et d'index partitionnés.

Publication de procédures stockées

Tous les types de réplication vous permettent de répliquer des définitions de procédure stockée : L'instruction CREATE PROCEDURE est copiée sur chaque Abonné. Dans le cas de procédures stockées CLR (Common Language Runtime), l'assembly associé est également copié. Les modifications des procédures sont répliquées vers les Abonnés ; les modifications des assemblys associés ne le sont pas.

En plus de répliquer la définition d'une procédure stockée, la réplication transactionnelle vous permet de répliquer l'exécution des procédures stockées. Ceci est particulièrement utile lors de la réplication des résultats de procédures stockées de maintenance qui affectent de gros volumes de données. Pour plus d'informations, consultez Publication de l'exécution de procédures stockées dans la réplication transactionnelle.

Publication de vues

Tous les types de réplication vous permettent de répliquer des vues. La vue (et l'index qui l'accompagne s'il s'agit d'une vue indexée) peut être copiée vers l'Abonné, mais la table de base doit aussi être répliquée.

Pour les vues indexées, la réplication transactionnelle vous permet aussi de répliquer la vue indexée en tant que table et non pas en tant que vue, éliminant ainsi la nécessité de répliquer aussi la table de base. Pour cela, spécifiez une des options « indexed view logbased » pour le paramètre @type de sp_addarticle (Transact-SQL). Pour plus d'informations sur l'utilisation de sp_addarticle, consultez Procédure : définir un article (programmation Transact-SQL de la réplication).

Publication de fonctions définies par l'utilisateur

Les instructions CREATE FUNCTION pour les fonctions CLR et pour les fonctions Transact-SQL sont copiées vers chaque Abonné. Dans le cas des fonctions CLR, l'assembly associé est également copié. Les modifications des fonctions sont répliquées vers les Abonnés ; les modifications aux assemblys associés ne le sont pas.

Publication de types définis par l'utilisateur et de types de données alias

Les colonnes qui utilisent des types définis par l'utilisateur et des types de données alias sont répliquées vers les Abonnés, tout comme les autres colonnes. L'instruction CREATE TYPEpour chaque type répliqué est exécutée sur l'Abonné avant la création de la table. Dans le cas de types définis par l'utilisateur, l'assembly associé est également copié vers chaque Abonné. Les modifications aux types définis par l'utilisateur et aux types de données alias ne sont pas répliquées vers les Abonnés.

Si un type est défini dans une base de données mais qu'il n'est référencé par aucune des colonnes quand une publication est créée, le type n'est pas copié vers les Abonnés. Si vous créez plus tard une colonne de ce type dans la base de données et que vous souhaitez la répliquer, vous devez d'abord copier manuellement le type (et l'assembly associé pour un type défini par l'utilisateur) vers chaque Abonné.

Publication d'index de texte intégral

L'instruction CREATE FULLTEXT INDEX est copiée sur chaque Abonné, et l'index de texte intégral est créé sur l'Abonné. Les modifications apportées aux index de texte intégral à l'aide d'ALTER FULLTEXT INDEX ne sont pas répliquées.

Modifications de schéma pour des objets publiés

La réplication prend en charge une grande variété de modifications de schéma pour les objets publiés. Quand vous effectuez une des modifications de schéma suivantes sur l'objet publié approprié sur un Abonné SQL Server, cette modification est propagée par défaut à tous les Abonnés SQL Server :

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

Pour plus d'informations, consultez Modification du schéma dans les bases de données de publication.

Considérations sur la publication

Soyez attentif aux problèmes suivants lors de la publication d'objets de base de données :

  • La base de données est accessible aux utilisateurs lors de la création de la publication et de la capture instantanée initiale, mais il est conseillé de créer les publications à des moments où l'activité est faible sur le serveur de publication.

  • Une base de données ne peut pas être renommée après qu'une publication y ait été créée. Pour la renommer, vous devez d'abord supprimer la réplication de la base de données. Pour plus d'informations, consultez Suppression de la réplication.

  • Si vous publiez un objet de base de données qui dépend d'un ou de plusieurs autres objets de base de données, vous devez publier tous les objets référencés. Par exemple, si vous publiez une vue qui dépend d'une table, vous devez publier la table également.

    [!REMARQUE]

    Si vous ajoutez un article à une publication de fusion et qu'un article existant dépend du nouvel article, vous devez spécifier un ordre de traitement pour les deux articles à l'aide du paramètre @processing_order de sp_addmergearticle et sp_changemergearticle. Examinez les cas suivants : vous publiez une table mais vous ne publiez pas une fonction référencée par la table. Si vous ne publiez pas la fonction, la table ne peut pas être créée au niveau de l'Abonné. Lorsque vous ajoutez la fonction à la publication : spécifiez la valeur 1 pour le paramètre @processing_order de sp_addmergearticle, spécifiez la valeur 2 pour le paramètre @processing_order de sp_changemergearticle, et spécifiez le nom de la table pour le paramètre @article. Cet ordre de traitement permet de créer la fonction au niveau de l'Abonné avant la table qui en dépend. Vous pouvez utiliser différents nombres pour chaque article tant que le nombre de la fonction est inférieur au nombre de la table.

  • Les noms de publication ne peuvent pas contenir les caractères suivants : % * [ ] | : " ? \ / < >.

Limitations de la publication d'objets

  • Le nombre maximal d'articles et de colonnes publiables diffère selon le type de publication. Pour plus d'informations, consultez la section « Réplication d'objets » de Spécifications des capacités maximales pour SQL Server.

  • Les procédures stockées, les vues, les déclencheurs et les fonctions définies par l'utilisateur qui sont définies avec WITH ENCRYPTION ne peuvent pas être publiées en tant que composants d'une réplication SQL Server.

  • Les collections de schémas XML peuvent être répliquées, mais les modifications ne sont pas répliquées après la capture instantanée initiale.

  • Les tables publiées pour la réplication transactionnelle doivent avoir une clé primaire. Si une table est dans une publication de réplication transactionnelle, vous ne pouvez pas désactiver les index qui sont associés à des colonnes de clé primaire. Ces index sont requis par la réplication. Pour désactiver un index, vous devez d'abord supprimer la table de la réplication.

  • Les valeurs par défaut liées créés avec sp_bindefault (Transact-SQL) ne sont pas répliqués (les valeurs par défaut liées sont abandonnés en faveur des valeurs par défaut créés avec le mot clé DEFAULT de ALTER TABLE ou CREATE TABLE).

Schémas et propriété des objets

La réplication fonctionne par défaut de la façon suivante dans l'Assistant Nouvelle publication quant aux schémas et à la propriété des objets :

  • Pour les articles dans les publications de fusion avec un niveau de compatibilité de 90 ou supérieur, dans les publications de capture instantanée et dans les publications transactionnelles : par défaut, le propriétaire d'un objet sur l'Abonné est le même que le propriétaire de l'objet correspondant sur le serveur de publication. Si les schémas qui détiennent les objets n'existent pas sur l'Abonné, ils sont créés automatiquement.

  • Pour les articles dans les publications de fusion avec un niveau de compatibilité inférieur à 90 : par défaut, le propriétaire est laissé à blanc et est spécifié en tant que dbo lors de la création de l'objet sur l'Abonné.

  • Pour les articles dans les publications Oracle : par défaut, le propriétaire est spécifié en tant que dbo.

  • Pour les articles dans les publications qui utilisent les captures instantanées en mode caractère (qui sont utilisées pour les Abonnées non-SQL Server et pour les Abonnés SQL Server Compact 3.5 SP1) : par défaut, le propriétaire est laissé à blanc. Le propriétaire est par défaut le propriétaire associé au compte utilisé par l'Agent de distribution ou par l'Agent de fusion pour se connecter à l'Abonné.

Le propriétaire de l'objet peut être modifié via la boîte de dialogue Propriétés de l'article - <article> et via les procédures stockées suivantes : sp_addarticle, sp_addmergearticle, sp_changearticle et sp_changemergearticle. Pour plus d'informations, consultez Procédure : Affichage et modification des propriétés de l'article et de la publication (SQL Server Management Studio), Procédure : définir un article (programmation Transact-SQL de la réplication) et Procédure : afficher et modifier les propriétés des articles (programmation Transact-SQL de la réplication).

Publication de données sur les Abonnés exécutant des versions antérieures de SQL Server

  • Si vous publiez sur un Abonné exécutant une version antérieure de SQL Server, vous êtes limité par les fonctionnalités de cette version, en termes de fonctionnalités spécifiques à la réplication et en termes de fonctionnalités globales du produit. Par exemple, vous ne pouvez pas publier des types de données définis par l'utilisateur ou des fonctions CLR sur les Abonnés exécutant SQL Server 2000.

  • Les publications de fusion utilisent un niveau de compatibilité, qui détermine les fonctionnalités qui peuvent être utilisées dans une publication et qui vous permet de prendre en charge des Abonnés exécutant des versions antérieures de SQL Server.

Pour plus d'informations, consultez Utilisation de plusieurs versions de SQL Server dans une topologie de réplication.

Publication de tables dans plusieurs publications

La réplication prend en charge la publication d'articles dans plusieurs publications (y compris la réédition de données) avec les restrictions suivantes :

  • Si un article est publié dans une publication transactionnelle et dans une publication de fusion, vérifiez que la propriété @published\_in\_tran\_pub a la valeur TRUE pour l'article de fusion. Pour plus d'informations sur la définition des propriétés, consultez Procédure : Affichage et modification des propriétés de l'article et de la publication (SQL Server Management Studio) et Procédure : afficher et modifier les propriétés des articles (programmation Transact-SQL de la réplication).

    Vous devez également définir la propriété @published\_in\_tran\_pub si un article fait partie d'un abonnement transactionnel et qu'il est inclus dans une publication de fusion. Si tel est le cas, gardez à l'esprit que, par défaut, la réplication transactionnelle suppose que les tables sur l'Abonné soient traitées en tant qu'objets accessibles en lecture seule ; si la réplication de fusion apporte des modifications aux données d'une table dans un abonnement transactionnel, une non-convergence de données peut se produire. Pour éviter cette éventualité, il est recommandé de spécifier toute table de ce type en tant qu'objet en téléchargement seul dans la publication de fusion. Cela empêche un Abonné de fusion de télécharger les modifications apportées aux données de la table. Pour plus d'informations, consultez Optimisation des performances de la réplication de fusion avec les articles en téléchargement seul.

  • Un article ne peut pas être publié à la fois dans une publication de fusion et dans une publication transactionnelle avec des abonnements mis à jour en file d'attente.

  • Les articles inclus dans les publications transactionnelles qui prennent en charge les abonnements mis à jour ne peuvent pas être republiés.

  • Si un article est publié dans plusieurs publications transactionnelles qui prennent en charge les abonnements mis à jour en attente, les propriétés suivantes doivent avoir la même valeur pour l'article dans toutes les publications :

    Propriété

    Paramètre dans sp_addarticle

    Gestion de plages d'identités

    @auto_identity_range (désapprouvé) et @identityrangemangementoption

    Plage d'identités du serveur de publication

    @pub_identity_range

    Plage d'identités

    @identity_range

    Seuil de plage d'identités

    @threshold

    Pour plus d'informations sur ces paramètres, consultez sp_addarticle (Transact-SQL).

  • Si un article est publié dans plusieurs publications de fusion, les propriétés suivantes doivent avoir la même valeur pour l'article dans toutes les publications :

    Propriété

    Paramètre dans sp_addmergearticle

    Suivi de colonne

    @column_tracking

    Options de schéma

    @schema_option

    Filtrage de colonnes

    @vertical_partition

    Options de chargement de l'Abonné

    @subscriber_upload_options

    Suivi des suppressions conditionnelles

    @delete_tracking

    Compensation d'erreur

    @compensate_for_errors

    Gestion de plages d'identités

    @auto_identity_range (désapprouvé) et @identityrangemangementoption

    Plage d'identités du serveur de publication

    @pub_identity_range

    Plage d'identités

    @identity_range

    Seuil de plage d'identités

    @threshold

    Options de partition

    @partition_options

    Diffusion de colonne de BLOB

    @stream_blob_columns

    Type de filtre

    @filter_type(paramètre dans sp_addmergefilter)

    Pour plus d'informations sur ces paramètres, consultez sp_addmergearticle (Transact-SQL) et sp_addmergefilter (Transact-SQL).

  • La réplication transactionnelle et la réplication de fusion non filtrée prennent en charge la publication d'une table dans plusieurs publications, puis les abonnements dans une table unique de la base de données d'abonnement (communément appelée un scénario de cumul (roll up)). Le cumul est souvent utilisé pour agréger en une seule table des sous-ensembles de données provenant de plusieurs emplacements sur un Abonné central. Les publications de fusion filtrées ne prennent pas en charge le scénario avec un Abonné central. Pour la réplication de fusion, le cumul est généralement mis en œuvre via une seule publication avec des filtres de lignes personnalisés. Pour plus d'informations, consultez Filtres de lignes paramétrés.