Afficher et modifier les propriétés d’une publication

S’applique à : SQL Server Azure SQL Managed Instance

Cette rubrique décrit comment afficher et modifier les propriétés d’une publication dans SQL Server à l’aide de SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO).

Dans cette rubrique

Avant de commencer

Limitations et restrictions

  • Certaines propriétés ne sont pas modifiables après la création d'une publication et d'autres s'il existe des abonnements à la publication. Les propriétés non modifiables sont affichées en lecture seule.

Recommandations

Utilisation de SQL Server Management Studio

Affichez et modifiez les propriétés de la publication dans la boîte de dialogue Propriétés de la publication - <Publication>, disponible dans SQL Server Management Studio et dans le moniteur de réplication. Pour plus d’informations sur le démarrage du Moniteur de réplication, consultez Démarrer le Moniteur de réplication.

La boîte de dialogue Propriétés de la publication - <Publication> comprend les pages suivantes :

  • La page Général contient le nom et la description de la publication, le nom de la base de données, le type de publication et les paramètres d'expiration des abonnements.

  • La page Articles correspond à la page Articles de l'Assistant Nouvelle publication. Utilisez-la pour ajouter et supprimer des articles, ainsi que pour modifier des propriétés et le filtrage des colonnes pour des articles.

  • La page Filtrer les lignes correspond à la page Filtrer les lignes de la table de l'Assistant Nouvelle publication. Utilisez-la pour ajouter, modifier et supprimer des filtres de lignes statiques pour tous les types de publications, ainsi que pour ajouter, modifier et supprimer des filtres de lignes paramétrés et des filtres de jointure pour des publications de fusion.

  • La page Instantané permet de spécifier le format et l'emplacement de l'instantané, la compression éventuelle de l'instantané, ainsi que des scripts à exécuter avant et après l'application de l'instantané.

  • La page Instantané FTP (pour les publications d'instantané et transactionnelles, et les publications de fusion pour les serveurs de publication exécutant des versions antérieures à SQL Server 2005) permet de spécifier si des Abonnés peuvent télécharger des fichiers d'instantanés via le protocole FTP.

  • La page Instantané FTP et Internet (pour les publications de fusion provenant des serveurs de publication exécutant SQL Server 2005 ou version ultérieure) permet de spécifier si des Abonnés peuvent télécharger des fichiers d'instantanés via FTP et si des Abonnés peuvent synchroniser des abonnements via HTTPS.

  • La page Options d'abonnement permet de définir diverses options qui s'appliquent à tous les abonnements. Les options diffèrent en fonction du type de publication.

  • La page Liste d'accès à la publication permet de spécifier les connexions et les groupes qui peuvent accéder à une publication.

  • La page Sécurité de l'agent permet d'accéder aux paramètres des comptes sous lesquels les agents ci-après s'exécutent et se connectent aux ordinateurs d'une topologie de réplication : l'Agent d'instantané pour toutes les publications, l'Agent de lecture du journal pour toutes les publications transactionnelles et l'Agent de lecture de la file d'attente pour les publications transactionnelles qui autorisent les abonnements mis à jour en attente.

  • La page Partitions de données (pour les publications de fusion provenant des serveurs de publication exécutant SQL Server 2005 ou version ultérieure) permet de spécifier si des Abonnés à des publications avec des filtres paramétrés peuvent demander un instantané si aucun n'est disponible. Elle permet de générer des instantanés pour une ou plusieurs partitions, soit au coup par coup, soit à intervalles récurrents.

Pour afficher et modifier les propriétés d'une publication dans Management Studio

  1. Connectez-vous au serveur de publication dans Management Studio, puis développez le nœud du serveur.

  2. Développez le dossier Réplication , puis développez le dossier Publications locales .

  3. Cliquez avec le bouton droit sur une publication, puis cliquez sur Propriétés.

  4. Modifiez les propriétés si nécessaire, puis cliquez sur OK.

Pour afficher et modifier les propriétés d'une publication dans le moniteur de réplication

  1. Développez un groupe du serveur de publication dans le volet gauche du moniteur de réplication, puis développez un serveur de publication.

  2. Cliquez avec le bouton droit sur une publication, puis cliquez sur Propriétés.

  3. Modifiez les propriétés si nécessaire, puis cliquez sur OK.

Utilisation de Transact-SQL

Les publications peuvent être modifiées et leurs propriétés retournées par programme à l'aide de procédures stockées de réplication. Les procédures stockées que vous utilisez dépendent du type de publication.

Pour afficher les propriétés d'une publication transactionnelle ou d'instantané

  1. Exécutez sp_helppublication, en spécifiant le nom de la publication pour le paramètre @publication . Si vous ne spécifiez pas ce paramètre, les informations sur toutes les publications sur le serveur de publication sont retournées.

Pour modifier les propriétés d'une publication transactionnelle ou d'instantané

  1. Exécutez sp_changepublication, en spécifiant la propriété de publication à modifier dans le paramètre @property et la nouvelle valeur de cette propriété dans le paramètre @value .

    Remarque

    Si la modification nécessite la génération d'un nouvel instantané, vous devez également spécifier la valeur 1 pour @force_invalidate_snapshotet si la modification nécessite la réinitialisation des Abonnés, vous devez spécifier la valeur 1 pour @force_reinit_subscription. Pour plus d’informations sur les propriétés qui, une fois modifiées, nécessitent un nouvel instantané ou une réinitialisation, consultez Modifier les propriétés des publications et des articles.

Pour afficher les propriétés d'une publication de fusion

  1. Exécutez sp_helpmergepublication, en spécifiant le nom de la publication pour le paramètre @publication . Si vous ne spécifiez pas ce paramètre, les informations sur toutes les publications sur le serveur de publication sont retournées.

Pour modifier les propriétés d'une publication de fusion

  1. Exécutez sp_changemergepublication, en spécifiant la propriété de publication à modifier dans le paramètre @property et la nouvelle valeur de cette propriété dans le paramètre @value .

    Remarque

    Si la modification nécessite la génération d’un nouvel instantané, vous devez également spécifier la valeur 1 pour @force_invalidate_snapshot et si la modification nécessite la réinitialisation des abonnés, vous devez spécifier la valeur 1 pour @force_reinit_subscription. Pour plus d’informations sur les propriétés qui, une fois modifiées, nécessitent un nouvel instantané ou une réinitialisation, consultez Modifier les propriétés des publications et des articles.

Pour afficher les propriétés d'un instantané

  1. Exécutez sp_helppublication_snapshot, en spécifiant le nom de la publication pour le paramètre @publication .

Pour modifier les propriétés d'un instantané

  1. Exécutez sp_changepublication_snapshot, en spécifiant une ou plusieurs des nouvelles propriétés d'instantané pour les paramètres d'instantané appropriés.

Exemples (Transact-SQL)

Cet exemple de réplication transactionnelle retourne les propriétés de la publication.

DECLARE @myTranPub AS sysname
SET @myTranPub = N'AdvWorksProductTran' 

USE [AdventureWorks2022]
EXEC sp_helppublication @publication = @myTranPub
GO

Cet exemple de réplication transactionnelle désactive la réplication du schéma pour la publication.

DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran' 

-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks2022]
EXEC sp_changepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0
GO

Cet exemple de réplication de fusion retourne les propriétés de la publication.

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';

USE [AdventureWorks2022]
EXEC sp_helpmergepublication @publication = @publication;
GO

Cet exemple de réplication de fusion désactive la réplication du schéma pour la publication.

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge'; 

-- Disable DDL replication for the publication.
USE [AdventureWorks2022]
EXEC sp_changemergepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0,
  @force_invalidate_snapshot = 0, 
  @force_reinit_subscription = 0;
GO

Utilisation d'objets RMO (Replication Management Objects)

Vous pouvez modifier des publications et accéder par programme à leurs propriétés à l'aide d'objets RMO (Replication Management Objects). Les classes RMO utilisées pour afficher ou modifier les propriétés d'une publication dépendent du type de publication.

Pour afficher ou modifier les propriétés d'une publication transactionnelle ou d'instantané

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection .

  2. Créez une instance de la classe TransPublication , définissez les propriétés Name et DatabaseName pour la publication et définissez la propriété ConnectionContext sur la connexion créée à l'étape 1.

  3. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet. Si cette méthode retourne false, soit les propriétés de la publication ont été définies de manière incorrecte à l'étape 2, soit la publication n'existe pas.

  4. (Facultatif) Pour modifier les propriétés, définissez une nouvelle valeur pour l'une des propriétés paramétrables. Utilisez l’opérateur AND logique (& en Microsoft Visual C# et And en Microsoft Visual Basic) pour déterminer si une valeur PublicationAttributes donnée est définie pour la propriété Attributes. Utilisez l'opérateur OR logique inclusif (| en Visual C# et Or en Visual Basic) et l'opérateur OR logique exclusif (^ en Visual C# et Xor en Visual Basic) pour modifier les valeurs PublicationAttributes de la propriété Attributes .

  5. (Facultatif) Si vous avez spécifié la valeur true pour CachePropertyChanges, appelez la méthode CommitPropertyChanges pour valider les modifications sur le serveur. Si vous avez spécifié la valeur false pour CachePropertyChanges (valeur par défaut), les modifications sont envoyées immédiatement au serveur.

Pour afficher ou modifier les propriétés d'une publication de fusion

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection .

  2. Créez une instance de la classe MergePublication , définissez les propriétés Name et DatabaseName pour la publication et définissez la propriété ConnectionContext sur la connexion créée à l'étape 1.

  3. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet. Si cette méthode retourne false, soit les propriétés de la publication ont été définies de manière incorrecte à l'étape 2, soit la publication n'existe pas.

  4. (Facultatif) Pour modifier les propriétés, définissez une nouvelle valeur pour l'une des propriétés paramétrables. Utilisez l’opérateur AND logique (& en Visual C# et And en Visual Basic) pour déterminer si une valeur PublicationAttributes donnée est définie pour la propriété Attributes. Utilisez l'opérateur OR logique inclusif (| en Visual C# et Or en Visual Basic) et l'opérateur OR logique exclusif (^ en Visual C# et Xor en Visual Basic) pour modifier les valeurs PublicationAttributes de la propriété Attributes .

  5. (Facultatif) Si vous avez spécifié la valeur true pour CachePropertyChanges, appelez la méthode CommitPropertyChanges pour valider les modifications sur le serveur. Si vous avez spécifié la valeur false pour CachePropertyChanges (valeur par défaut), les modifications sont envoyées immédiatement au serveur.

Exemples (RMO)

Cet exemple définit des attributs de publication pour une publication transactionnelle. Les modifications sont mises en cache jusqu'à leur envoi explicite au serveur.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = true;

    // If we can't get the properties for this publication, 
    // throw an application exception.
    if (publication.LoadProperties())
    {
        // Enable support for push subscriptions and disable support 
        // for pull subscriptions.
        if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
        {
            publication.Attributes ^= PublicationAttributes.AllowPull;
        }
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Send changes to the server.
        publication.CommitPropertyChanges();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"

Dim publication As TransPublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for the publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = True

    ' If we can't get the properties for this publication, 
    ' throw an application exception.
    If publication.LoadProperties() Then
        ' Enable support for push subscriptions and disable support 
        ' for pull subscriptions.
        If (publication.Attributes And PublicationAttributes.AllowPull) <> 0 Then
            publication.Attributes = publication.Attributes _
            Xor PublicationAttributes.AllowPull
        End If
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Send changes to the server.
        publication.CommitPropertyChanges()
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
        "The publication property could not be changed.", ex)
Finally
    conn.Disconnect()
End Try

Cet exemple désactive la réplication DDL pour une publication de fusion.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";

MergePublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new MergePublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;


    // If we can't get the properties for this merge publication, then throw an application exception.
    if (publication.LoadProperties())
    {
        // If DDL replication is currently enabled, disable it.
        if (publication.ReplicateDdl == DdlReplicationOptions.All)
        {
            publication.ReplicateDdl = DdlReplicationOptions.None;
        }
        else
        {
            publication.ReplicateDdl = DdlReplicationOptions.All;
        }
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"

Dim publication As MergePublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for the publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' If we can't get the properties for this merge publication, then throw an application exception.
    If publication.LoadProperties() Then
        ' If DDL replication is currently enabled, disable it.
        If publication.ReplicateDdl = DdlReplicationOptions.All Then
            publication.ReplicateDdl = DdlReplicationOptions.None
        Else
            publication.ReplicateDdl = DdlReplicationOptions.All
        End If
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
        "The publication property could not be changed.", ex)
Finally
    conn.Disconnect()
End Try