Supprimer une publicationDelete a Publication

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed InstanceS’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance

Cette rubrique explique comment supprimer une publication dans SQL Server 2019 (15.x)SQL Server 2019 (15.x) à l'aide de SQL Server Management StudioSQL Server Management Studio, de Transact-SQLTransact-SQLou d'objets RMO (Replication Management Objects).This topic describes how to delete a publication in SQL Server 2019 (15.x)SQL Server 2019 (15.x) by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO).

Dans cette rubriqueIn This Topic

Utilisation de SQL Server Management StudioUsing SQL Server Management Studio

Supprimer les publications dans le dossier Publications locales de SQL Server Management StudioSQL Server Management Studio.Delete publications from the Local Publications folder in SQL Server Management StudioSQL Server Management Studio.

Pour supprimer une publicationTo delete a publication

  1. Connectez-vous au serveur de publication dans Management StudioManagement Studio, puis développez le nœud du serveur.Connect to the Publisher in Management StudioManagement Studio, and then expand the server node.

  2. Développez le dossier Réplication , puis développez le dossier Publications locales .Expand the Replication folder, and then expand the Local Publications folder.

  3. Cliquez avec le bouton droit sur la publication à supprimer, puis cliquez sur Supprimer.Right-click the publication you want to delete, and then click Delete.

Utilisation de Transact-SQLUsing Transact-SQL

Il est possible de supprimer des publications par programme en utilisant les procédures stockées de réplication.Publications can be deleted programmatically using replication stored procedures. Les procédures stockées à utiliser dépendent du type de publication à supprimer.The stored procedures that you use depend on the type of publication being deleted.

Notes

La suppression d'une publication ne supprime pas les objets publiés de la base de données de publication ni les objets correspondants de la base de données d'abonnement.Deleting a publication does not remove published objects from the publication database or the corresponding objects from the subscription database. Utilisez la commande DROP <object> pour supprimer manuellement ces objets, si nécessaire.Use the DROP <object> command to manually remove these objects if necessary.

Pour supprimer une publication d'instantané ou une publication transactionnelleTo delete a snapshot or transactional publication

  1. Effectuez l’une des actions suivantes :Do one of the following:

    • Pour supprimer une publication unique, exécutez sp_droppublication sur la base de données de publication du serveur de publication.To delete a single publication, execute sp_droppublication at the Publisher on the publication database.

    • Pour supprimer toutes les publications et tous les objets de réplication d'une base de données publiée, exécutez sp_removedbreplication sur le serveur de publication.To delete all publications in and remove all replication objects from a published database, execute sp_removedbreplication at the Publisher. Spécifiez la valeur tran pour @type.Specify a value of tran for @type. (Facultatif) Si le serveur de distribution est inaccessible ou si l’état de la base de données est suspect ou hors connexion, spécifiez la valeur 1 pour @force.(Optional) If the Distributor cannot be accessed or if the status of the database is suspect or offline, specify a value of 1 for @force. (Facultatif) Spécifiez le nom de la base de données pour @dbname si sp_removedbreplication n’est pas exécuté sur la base de données de publication.(Optional) Specify the name of the database for @dbname if sp_removedbreplication is not executed on the publication database.

      Notes

      Spécifier la valeur 1 pour @force peut laisser des objets de publication liés à la réplication dans la base de données.Specifying a value of 1 for @force may leave replication-related publishing objects in the database.

  2. (Facultatif) Si cette base de données n’a pas d’autres publications, exécutez sp_replicationdboption (Transact-SQL) pour désactiver la publication de la base de données actuelle à l’aide de la réplication transactionnelle ou d’instantané.(Optional) If this database has no other publications, execute sp_replicationdboption (Transact-SQL) to disable publication of the current database using snapshot or transactional replication.

  3. (Facultatif) Exécutez sp_subscription_cleanup sur la base de données d'abonnement de l'Abonné pour supprimer toutes les métadonnées de réplication restantes dans la base de données d'abonnement.(Optional) At the Subscriber on the subscription database, execute sp_subscription_cleanup to remove any remaining replication metadata in the subscription database.

Pour supprimer une publication de fusionTo delete a merge publication

  1. Effectuez l’une des actions suivantes :Do one of the following:

    • Pour supprimer une publication unique, exécutez sp_dropmergepublication (Transact-SQL) sur la base de données de publication du serveur de publication.To delete a single publication, execute sp_dropmergepublication (Transact-SQL) at the Publisher on the publication database.

    • Pour supprimer toutes les publications et tous les objets de réplication d'une base de données publiée, exécutez sp_removedbreplication sur le serveur de publication.To delete all publications in and remove all replication objects from a published database, execute sp_removedbreplication at the Publisher. Spécifiez la valeur merge pour @type.Specify a value of merge for @type. (Facultatif) Si le serveur de distribution est inaccessible ou si l’état de la base de données est suspect ou hors connexion, spécifiez la valeur 1 pour @force.(Optional) If the Distributor cannot be accessed or if the status of the database is suspect or offline, specify a value of 1 for @force. (Facultatif) Spécifiez le nom de la base de données pour @dbname si sp_removedbreplication n’est pas exécuté sur la base de données de publication.(Optional) Specify the name of the database for @dbname if sp_removedbreplication is not executed on the publication database.

      Notes

      Spécifier la valeur 1 pour @force peut laisser des objets de publication liés à la réplication dans la base de données.Specifying a value of 1 for @force may leave replication-related publishing objects in the database.

  2. (Facultatif) Si cette base de données n’a pas d’autres publications, exécutez sp_replicationdboption (Transact-SQL) pour désactiver la publication de la base de données actuelle à l’aide de la réplication de fusion.(Optional) If this database has no other publications, execute sp_replicationdboption (Transact-SQL) to disable publication of the current database using merge replication.

  3. (Facultatif) Exécutez sp_mergesubscription_cleanup (Transact-SQL) sur la base de données d’abonnement de l’Abonné pour supprimer toutes les métadonnées de réplication restantes dans la base de données d’abonnement.(Optional) At the Subscriber on the subscription database, execute sp_mergesubscription_cleanup (Transact-SQL) to remove any remaining replication metadata in the subscription database.

Exemples (Transact-SQL)Examples (Transact-SQL)

Cet exemple montre comment supprimer une publication transactionnelle et désactiver la publication transactionnelle d'une base de données.This example shows how to remove a transactional publication and disable transactional publishing for a database. Cet exemple suppose que tous les abonnements ont été supprimés précédemment.This example assumes that all subscriptions were previously removed. Pour plus d'informations, consultez Delete a Pull Subscription ou Delete a Push Subscription.For more information, see Delete a Pull Subscription or Delete a Push Subscription.

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 

-- Remove a transactional publication.
USE [AdventureWorks2012]
EXEC sp_droppublication @publication = @publication;

-- Remove replication objects from the database.
USE [master]
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname = N'publish', 
  @value = N'false';
GO

Cet exemple montre comment supprimer une publication de fusion et désactiver la publication de fusion d'une base de données.This example shows how to remove a merge publication and disable merge publishing for a database. Cet exemple suppose que tous les abonnements ont été supprimés précédemment.This example assumes that all subscriptions were previously removed. Pour plus d'informations, consultez Delete a Pull Subscription ou Delete a Push Subscription.For more information, see Delete a Pull Subscription or Delete a Push Subscription.

DECLARE @publication AS sysname
DECLARE @publicationDB    AS sysname
SET @publication = N'AdvWorksSalesOrdersMerge' 
SET @publicationDB = N'AdventureWorks'

-- Remove the merge publication.
USE [AdventureWorks]
EXEC sp_dropmergepublication @publication = @publication;

-- Remove replication objects from the database.
USE master
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname = N'merge publish', 
  @value = N'false'
GO

Utilisation d'objets RMO (Replication Management Objects)Using Replication Management Objects (RMO)

Vous pouvez supprimer des publications par programme à l'aide d'objets RMO (Replication Management Objects).You can delete publications programmatically by using Replication Management Objects (RMO). Les classes RMO que vous utilisez pour supprimer une publication dépendent du type de publication que vous supprimez.The RMO classes that you use to remove a publication depend on the type of publication you remove.

Pour supprimer une publication transactionnelle ou d'instantanéTo remove a snapshot or transactional publication

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Créez une instance de la classe TransPublication.Create an instance of the TransPublication class.

  3. Définissez les propriétés Name et DatabaseName de la publication, et définissez la propriété ConnectionContext avec la connexion créée à l'étape 1.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  4. Vérifiez la propriété IsExistingObject pour vous assurer que la publication existe.Check the IsExistingObject property to verify that the publication exists. Si la valeur de cette propriété est false, les propriétés de la publication définies à l'étape 3 sont incorrectes ou la publication n'existe pas.If the value of this property is false, either the publication properties in step 3 were defined incorrectly or the publication does not exist.

  5. Appelez la méthode Remove .Call the Remove method.

  6. (Facultatif) Si aucune autre publication transactionnelle n'existe pour cette base de données, vous pouvez désactiver la base de données pour la publication transactionnelle en procédant comme suit :(Optional) If no other transactional publications exist for this database, the database can be disabled for transactional publishing as follows:

    1. Créez une instance de la classe ReplicationDatabase.Create an instance of the ReplicationDatabase class. Affectez à la propriété ConnectionContext l'instance de ServerConnection créée à l'étape 1.Set the ConnectionContext property to the instance of ServerConnection from step 1.

    2. Appelez la méthode LoadProperties .Call the LoadProperties method. Si cette méthode retourne false, confirmez que la base de données existe.If this method returns false, confirm that the database exists.

    3. Définissez les propriétés EnabledTransPublishing la valeur false.Set the EnabledTransPublishing property to false.

    4. Appelez la méthode CommitPropertyChanges .Call the CommitPropertyChanges method.

  7. Fermez les connexions.Close the connections.

Pour supprimer une publication de fusionTo remove a merge publication

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Créez une instance de la classe MergePublication.Create an instance of the MergePublication class.

  3. Définissez les propriétés Name et DatabaseName de la publication, et définissez la propriété ConnectionContext avec la connexion créée à l'étape 1.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  4. Vérifiez la propriété IsExistingObject pour vous assurer que la publication existe.Check the IsExistingObject property to verify that the publication exists. Si la valeur de cette propriété est false, les propriétés de la publication définies à l'étape 3 sont incorrectes ou la publication n'existe pas.If the value of this property is false, either the publication properties in step 3 were defined incorrectly or the publication does not exist.

  5. Appelez la méthode Remove .Call the Remove method.

  6. (Facultatif) Si aucune autre publication de fusion n'existe pour cette base de données, vous pouvez désactiver la base de données pour la publication de fusion en procédant comme suit :(Optional) If no other merge publications exist for this database, the database can be disabled for merge publishing as follows:

    1. Créez une instance de la classe ReplicationDatabase.Create an instance of the ReplicationDatabase class. Affectez à la propriété ConnectionContext l'instance de ServerConnection créée à l'étape 1.Set the ConnectionContext property to the instance of ServerConnection from Step 1.

    2. Appelez la méthode LoadProperties .Call the LoadProperties method. Si cette méthode retourne false, vérifiez que la base de données existe.If this method returns false, verify that the database exists.

    3. Définissez les propriétés EnabledMergePublishing la valeur false.Set the EnabledMergePublishing property to false.

    4. Appelez la méthode CommitPropertyChanges .Call the CommitPropertyChanges method.

  7. Fermez les connexions.Close the connections.

Exemples (RMO)Examples (RMO)

L'exemple suivant supprime une publication transactionnelle.The following example deletes a transactional publication. Si aucune autre publication transactionnelle n'existe pour cette base de données, la publication transactionnelle est également désactivée.If no other transactional publications exist for this database, transactional publishing is also disabled.

// Define the Publisher, publication database, 
// and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

TransPublication publication;
ReplicationDatabase publicationDb;

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

try
{
    conn.Connect();

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

    // Delete the publication, if it exists and has no subscriptions.
    if (publication.LoadProperties() && !publication.HasSubscription)
    {
        publication.Remove();
    }
    else
    {
        // Do something here if the publication does not exist
        // or has subscriptions.
        throw new ApplicationException(String.Format(
            "The publication {0} could not be deleted. " +
            "Ensure that the publication exists and that all " +
            "subscriptions have been deleted.",
            publicationName, publisherName));
    }

    // If no other transactional publications exists,
    // disable publishing on the database.
    publicationDb = new ReplicationDatabase(publicationDbName, conn);
    if (publicationDb.LoadProperties())
    {
        if (publicationDb.TransPublications.Count == 0)
        {
            publicationDb.EnabledTransPublishing = false;
        }
    }
    else
    {
        // Do something here if the database does not exist.
        throw new ApplicationException(String.Format(
            "The database {0} does not exist on {1}.",
            publicationDbName, publisherName));
    }
}
catch (Exception ex)
{
    // Implement application error handling here.
    throw new ApplicationException(String.Format(
        "The publication {0} could not be deleted.",
        publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the Publisher, publication database, 
' and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"

Dim publication As TransPublication
Dim publicationDb As ReplicationDatabase

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

Try
    conn.Connect()

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

    ' Delete the publication, if it exists and has no subscriptions.
    If publication.LoadProperties() And Not publication.HasSubscription Then
        publication.Remove()
    Else
        ' Do something here if the publication does not exist
        ' or has subscriptions.
        Throw New ApplicationException(String.Format( _
         "The publication {0} could not be deleted. " + _
         "Ensure that the publication exists and that all " + _
         "subscriptions have been deleted.", _
         publicationName, publisherName))
    End If

    ' If no other transactional publications exists,
    ' disable publishing on the database.
    publicationDb = New ReplicationDatabase(publicationDbName, conn)
    If publicationDb.LoadProperties() Then
        If publicationDb.TransPublications.Count = 0 Then
            publicationDb.EnabledTransPublishing = False
        End If
    Else
        ' Do something here if the database does not exist.
        Throw New ApplicationException(String.Format( _
         "The database {0} does not exist on {1}.", _
         publicationDbName, publisherName))
    End If
Catch ex As Exception
    ' Implement application error handling here.
    Throw New ApplicationException(String.Format( _
     "The publication {0} could not be deleted.", _
     publicationName), ex)
Finally
    conn.Disconnect()
End Try

L'exemple suivant supprime une publication de fusion.The following example deletes a merge publication. Si aucune autre publication de fusion n'existe pour cette base de données, la publication de fusion est également désactivée.If no other merge publications exist for this database, merge publishing is also disabled.

// Define the Publisher, publication database, 
// and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";

MergePublication publication;
ReplicationDatabase publicationDb;

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

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

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

    // Delete the publication, if it exists and has no subscriptions.
    if (publication.LoadProperties() && !publication.HasSubscription)
    {
        publication.Remove();
    }
    else
    {
        // Do something here if the publication does not exist
        // or has subscriptions.
        throw new ApplicationException(String.Format(
            "The publication {0} could not be deleted. " +
            "Ensure that the publication exists and that all " +
            "subscriptions have been deleted.",
            publicationName, publisherName));
    }

    // If no other merge publications exists,
    // disable publishing on the database.
    publicationDb = new ReplicationDatabase(publicationDbName, conn);
    if (publicationDb.LoadProperties())
    {
        if (publicationDb.MergePublications.Count == 0 && publicationDb.EnabledMergePublishing)
        {
            publicationDb.EnabledMergePublishing = false;
        }
    }
    else
    {
        // Do something here if the database does not exist.
        throw new ApplicationException(String.Format(
            "The database {0} does not exist on {1}.",
            publicationDbName, publisherName));
    }
}
catch (Exception ex)
{
    // Implement application error handling here.
    throw new ApplicationException(String.Format(
        "The publication {0} could not be deleted.",
        publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the Publisher, publication database, 
' and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"

Dim publication As MergePublication
Dim publicationDb As ReplicationDatabase

' 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 merge publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' Delete the publication, if it exists and has no subscriptions.
    If (publication.LoadProperties() And Not publication.HasSubscription) Then
        publication.Remove()
    Else
        ' Do something here if the publication does not exist
        ' or has subscriptions.
        Throw New ApplicationException(String.Format( _
         "The publication {0} could not be deleted. " + _
         "Ensure that the publication exists and that all " + _
         "subscriptions have been deleted.", _
         publicationName, publisherName))
    End If

    ' If no other merge publications exists,
    ' disable publishing on the database.
    publicationDb = New ReplicationDatabase(publicationDbName, conn)
    If publicationDb.LoadProperties() Then
        If publicationDb.MergePublications.Count = 0 _
        And publicationDb.EnabledMergePublishing Then
            publicationDb.EnabledMergePublishing = False
        End If
    Else
        ' Do something here if the database does not exist.
        Throw New ApplicationException(String.Format( _
         "The database {0} does not exist on {1}.", _
         publicationDbName, publisherName))
    End If
Catch ex As Exception
    ' Implement application error handling here.
    Throw New ApplicationException(String.Format( _
     "The publication {0} could not be deleted.", _
     publicationName), ex)
Finally
    conn.Disconnect()
End Try

Voir aussiSee Also

Concepts liés aux procédures stockées système de réplication Replication System Stored Procedures Concepts
Publier des données et des objets de base de donnéesPublish Data and Database Objects