Partager via


Supprimer un abonnement par émission (push)

Cette rubrique explique comment supprimer un abonnement Push dans SQL Server 2014 à l’aide de SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO).

Dans cette rubrique

Utilisation de SQL Server Management Studio

Supprimez un abonnement Push sur le serveur de publication (à partir du dossier Publications locales dans SQL Server Management Studio) ou de l’Abonné (dans le dossier Abonnements locaux ). La suppression d’un abonnement ne supprime pas les objets ou les données de l’abonnement ; ils doivent être supprimés manuellement.

Pour supprimer un abonnement Push sur le 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 que vous souhaitez supprimer.

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

  5. Dans la boîte de dialogue de confirmation, sélectionnez s’il faut se connecter à l’Abonné pour supprimer les informations d’abonnement. Si vous désactivez la case à cocher Se connecter à l’Abonné , vous devez vous connecter ultérieurement à l’Abonné pour supprimer les informations.

Pour supprimer un abonnement Push chez 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, sélectionnez s’il faut se 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 Push peuvent être supprimés par programme à l’aide de procédures stockées de réplication. Les procédures stockées utilisées dépendent du type de publication auquel appartient l’abonnement.

Pour supprimer un abonnement Push à une publication d'instantané ou transactionnelle

  1. Sur la base de données de publication du serveur de publication, exécutez sp_dropsubscription (Transact-SQL). Spécifiez @publication et @subscriber. Spécifiez la valeur tout pour @article. (Facultatif) Si le serveur de distribution n’est pas accessible, spécifiez la valeur 1 pour @ignore_distributor pour supprimer l’abonnement sans supprimer les objets associés sur le serveur de distribution.

  2. Sur l’Abonné sur la base de données d’abonnement, 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 Push à 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, spécifiez la valeur 1 pour @ignore_distributor pour supprimer l’abonnement sans supprimer les objets associés sur le serveur de distribution.

  2. Sur l’Abonné sur la base de données d’abonnement, exécutez sp_mergesubscription_cleanup (Transact-SQL). Spécifiez @publisher, @publisher_db et @publication. Cela supprime les métadonnées de fusion de la base de données d’abonnement.

Exemples (Transact-SQL)

Cet exemple supprime un abonnement Push à 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 [AdventureWorks2012]
EXEC sp_dropsubscription 
  @publication = @publication, 
  @article = N'all',
  @subscriber = @subscriber;
GO

Cet exemple supprime un abonnement Push à 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'AdventureWorks2012Replica';

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

Utilisation des objets RMO (Replication Management Objects)

Les classes RMO que vous utilisez pour supprimer un abonnement Push dépendent du type de publication auquel l’abonnement Push est abonné.

Pour supprimer un abonnement push à une publication d’instantané ou transactionnelle

  1. Créez une connexion à l’Abonné à l’aide de la ServerConnection classe.

  2. Créez une instance de la TransSubscription classe.

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

  4. Configurez ServerConnection de l'étape 1 pour la propriété ConnectionContext.

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

  6. Appelez la méthode Remove .

Pour supprimer un abonnement Push à une publication de fusion

  1. Créez une connexion à l’Abonné à l’aide de la ServerConnection classe.

  2. Créez une instance de la MergeSubscription classe.

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

  4. Définir le ServerConnection de l'étape 1 pour la propriété ConnectionContext.

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

  6. Appelez la méthode Remove .

Exemples (RMO)

Vous pouvez supprimer des abonnements push par programmation à 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 = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";

//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 = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

'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

Voir aussi

S’abonner aux Publications
Meilleures pratiques en matière de sécurité de réplication