Partager via


Supprimer un abonnement par émission (push)

S’applique à : SQL Server Azure SQL Database

Cette rubrique décrit comment supprimer un abonnement par émission de données dans SQL Server en utilisant SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO).

Dans cette rubrique

Utilisation de SQL Server Management Studio

Supprimez un abonnement par émission de données sur le serveur de publication (à partir du dossier Publications locales dans SQL Server Management Studio) ou sur l'Abonné (à partir du dossier Publications locales). La suppression d'un abonnement ne supprime pas les objets ou les données de ce dernier : ils doivent être supprimés manuellement.

Pour supprimer un abonnement par envoi de données au niveau du serveur de publication

  1. Connectez-vous au serveur de publication dans SQL Server 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. Développez la publication associée à l'abonnement à supprimer.

  4. Cliquez avec le bouton droit sur l'abonnement puis cliquez sur Supprimer.

  5. Dans la boîte de dialogue de confirmation, indiquez si vous souhaitez vous connecter à l'Abonné pour supprimer les informations d'abonnement. Si vous désactivez la case à cocher Se connecter à l'Abonné , vous devrez vous connecter plus tard à l'Abonné pour supprimer les informations.

Pour supprimer un abonnement par envoi de données au niveau de l'Abonné

  1. Connectez-vous à l’abonné dans SQL Server Management Studio, puis développez le nœud du serveur.

  2. Développez le dossier Réplication , puis développez le dossier Abonnements locaux .

  3. Cliquez avec le bouton droit sur l'abonnement à supprimer, puis cliquez sur Supprimer.

  4. Dans la boîte de dialogue de confirmation, indiquez si vous souhaitez vous connecter au serveur de publication pour supprimer les informations d'abonnement. Si vous désactivez la case à cocher Se connecter au serveur de publication , vous devez vous connecter ultérieurement au serveur de publication pour supprimer les informations.

Utilisation de Transact-SQL

Les abonnements par émission de données peuvent être supprimés par programme en utilisant des procédures stockées de réplication. Les procédures stockées utilisées dépendent du type de publication auquel l'abonnement appartient.

Pour supprimer un abonnement par émission de données à une publication transactionnelle ou d'instantané

  1. Dans la base de données de publication du serveur de publication, exécutez sp_dropsubscription (Transact-SQL). Spécifiez @publication et @subscriber. Affectez la valeur all à @article. (Facultatif) Si le serveur de distribution n'est pas accessible, affectez la valeur 1 à @ignore_distributor pour supprimer l'abonnement sans supprimer les objets connexes au niveau du serveur de distribution.

  2. Dans la base de données d’abonnement de l’Abonné, exécutez sp_subscription_cleanup (Transact-SQL) pour supprimer les métadonnées de réplication dans la base de données d’abonnement.

Pour supprimer un abonnement par émission de données à une publication de fusion

  1. Sur le serveur de publication, exécutez sp_dropmergesubscription (Transact-SQL), en spécifiant @publication, @subscriber et @subscriber_db. (Facultatif) Si le serveur de distribution n'est pas accessible, affectez la valeur 1 à @ignore_distributor pour supprimer l'abonnement sans supprimer les objets connexes au niveau du serveur de distribution.

  2. Dans la base de données d’abonnement de l’Abonné, exécutez sp_mergesubscription_cleanup (Transact-SQL). Specify @publisher, @publisher_dbet @publication. Les métadonnées de fusion sont alors supprimées de la base de données d'abonnement.

Exemples (Transact-SQL)

Cet exemple supprime un abonnement par émission de données à une publication transactionnelle.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

-- This batch is executed at the Publisher to remove 
-- a pull or push subscription to a transactional publication.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);

USE [AdventureWorks2022]
EXEC sp_dropsubscription 
  @publication = @publication, 
  @article = N'all',
  @subscriber = @subscriber;
GO

Cet exemple supprime un abonnement par émission de données à une publication de fusion.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

-- This batch is executed at the Publisher to remove 
-- a pull or push subscription to a merge publication.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';

USE [AdventureWorks2022]
EXEC sp_dropmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB;
GO

Utilisation d'objets RMO (Replication Management Objects)

Les classes RMO à utiliser pour supprimer un abonnement par émission de données dépendent du type de publication auquel l'abonnement par émission de données est souscrit.

Pour supprimer un abonnement par émission de données à 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 TransSubscription.

  3. Définissez les propriétés PublicationName, SubscriptionDBName, SubscriberNameet DatabaseName .

  4. Définissez la classe ServerConnection créée à l'étape 1 pour la propriété ConnectionContext .

  5. Vérifiez la propriété IsExistingObject pour vous assurer que l'abonnement existe. Si la valeur de cette propriété est false, les propriétés de l'abonnement ont été définies de manière incorrecte à l'étape 2, ou l'article n'existe pas.

  6. Appelez la méthode Remove .

Pour supprimer un abonnement par émission de données à 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 MergeSubscription.

  3. Définissez les propriétés PublicationName, SubscriptionDBName, SubscriberNameet DatabaseName .

  4. Définissez la classe ServerConnection créée à l'étape 1 pour la propriété ConnectionContext .

  5. Vérifiez la propriété IsExistingObject pour vous assurer que l'abonnement existe. Si la valeur de cette propriété est false, les propriétés de l'abonnement ont été définies de manière incorrecte à l'étape 2, ou l'article n'existe pas.

  6. Appelez la méthode Remove .

Exemples (RMO)

Vous pouvez supprimer par programme des abonnements par émission de données à l'aide d'objets RMO (Replication Management Objects).

// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";

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

// Create the objects that we need.
TransSubscription subscription;

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

    // Define the pull subscription.
    subscription = new TransSubscription();
    subscription.ConnectionContext = conn;
    subscription.SubscriberName = subscriberName;
    subscription.PublicationName = publicationName;
    subscription.SubscriptionDBName = subscriptionDbName;
    subscription.DatabaseName = publicationDbName;

    // Delete the pull subscription, if it exists.
    if (subscription.IsExistingObject)
    {
        // Delete the pull subscription at the Subscriber.
        subscription.Remove();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "The subscription to {0} does not exist on {1}",
            publicationName, subscriberName));
    }
}
catch (Exception ex)
{
    // Implement the appropriate error handling here.
    throw new ApplicationException(String.Format(
        "The subscription to {0} could not be deleted.", publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"

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

' Create the objects that we need.
Dim subscription As TransSubscription

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

    ' Define the pull subscription.
    subscription = New TransSubscription()
    subscription.ConnectionContext = conn
    subscription.SubscriberName = subscriberName
    subscription.PublicationName = publicationName
    subscription.SubscriptionDBName = subscriptionDbName
    subscription.DatabaseName = publicationDbName

    ' Delete the pull subscription, if it exists.
    If subscription.IsExistingObject Then

        ' Delete the pull subscription at the Subscriber.
        subscription.Remove()
    Else
        Throw New ApplicationException(String.Format( _
         "The subscription to {0} does not exist on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
        "The subscription to {0} could not be deleted.", publicationName), ex)
Finally
    conn.Disconnect()
End Try