Eliminazione di una sottoscrizione pullDelete a Pull Subscription

In questo argomento viene descritto come eliminare una sottoscrizione pull in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQLo RMO (Replication Management Objects).This topic describes how to delete a pull subscription in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO).

Contenuto dell'argomentoIn This Topic

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Eliminare una sottoscrizione pull nel server di pubblicazione, dalla cartella Pubblicazioni locali in SQL Server Management StudioSQL Server Management Studio, o nel Sottoscrittore, dalla cartella Sottoscrizioni locali .Delete a pull subscription at the Publisher (from the Local Publications folder in SQL Server Management StudioSQL Server Management Studio) or the Subscriber (from the Local Subscriptions folder). Se si elimina una sottoscrizione, gli oggetti o i dati non vengono rimossi automaticamente dalla sottoscrizione, ma è necessario rimuoverli manualmente.Deleting a subscription does not remove objects or data from the subscription; they must be removed manually.

Per eliminare una sottoscrizione pull nel server di pubblicazioneTo delete a pull subscription at the Publisher

  1. Connettersi al server di pubblicazione in SQL Server Management StudioSQL Server Management Studioe quindi espandere il nodo del server.Connect to the Publisher in SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Espandere la cartella Replica e quindi la cartella Pubblicazioni locali .Expand the Replication folder, and then expand the Local Publications folder.

  3. Espandere la pubblicazione associata alla sottoscrizione che si desidera eliminare.Expand the publication associated with the subscription you want to delete.

  4. Fare clic con il pulsante destro del mouse sulla sottoscrizione e quindi scegliere Elimina.Right-click the subscription, and then click Delete.

  5. Nella finestra di dialogo di conferma specificare se connettersi al Sottoscrittore per eliminare le informazioni sulla sottoscrizione.In the confirmation dialog box, select whether to connect to the Subscriber to delete subscription information. Se si deseleziona la casella di controllo Connetti al Sottoscrittore , sarà necessario connettersi al Sottoscrittore in seguito per eliminare le informazioni.If you clear the Connect to Subscriber check box, you should connect to the Subscriber later to delete the information.

Per eliminare una sottoscrizione pull nel SottoscrittoreTo delete a pull subscription at the Subscriber

  1. Connettersi al Sottoscrittore in SQL Server Management StudioSQL Server Management Studioe quindi espandere il nodo del server.Connect to the Subscriber in SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Espandere la cartella Replica e quindi la cartella Sottoscrizioni locali .Expand the Replication folder, and then expand the Local Subscriptions folder.

  3. Fare clic con il pulsante destro del mouse sulla sottoscrizione che si desidera eliminare e quindi scegliere Elimina.Right-click the subscription you want to delete, and then click Delete.

  4. Nella finestra di dialogo di conferma specificare se connettersi al server di pubblicazione per eliminare le informazioni sulla sottoscrizione.In the confirmation dialog box, select whether to connect to the Publisher to delete subscription information. Se si deseleziona la casella di controllo Connetti al server di pubblicazione , sarà necessario connettersi al server di pubblicazione in seguito per eliminare le informazioni.If you clear the Connect to Publisher check box, you should connect to the Publisher later to delete the information.

Utilizzo di Transact-SQL Using Transact-SQL

È possibile eliminare sottoscrizioni pull a livello di programmazione tramite le stored procedure di replica.Pull subscriptions can be deleted programmatically using replication stored procedures. Le stored procedure utilizzate dipenderanno dal tipo di pubblicazione a cui appartiene la sottoscrizione.The stored procedures used will depend on the type of publication to which the subscription belongs.

Per eliminare una sottoscrizione pull di una pubblicazione snapshot o transazionaleTo delete a pull subscription to a snapshot or transactional publication

  1. Nel database di sottoscrizione del Sottoscrittore eseguire sp_droppullsubscription (Transact-SQL).At the Subscriber on the subscription database, execute sp_droppullsubscription (Transact-SQL). Specificare i parametri @publication, @publishere @publisher_db.Specify @publication, @publisher, and @publisher_db.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_dropsubscription (Transact-SQL).At the Publisher on the publication database, execute sp_dropsubscription (Transact-SQL). Specificare i parametri @publication e @subscriber.Specify @publication and @subscriber. Specificare il valore all per il parametro @article.Specify a value of all for @article. (Facoltativo) Se non è possibile accedere al database di distribuzione, specificare il valore 1 per il parametro @ignore_distributor per eliminare la sottoscrizione senza rimuovere gli oggetti correlati nel database di distribuzione.(Optional) If the Distributor cannot be accessed, specify a value of 1 for @ignore_distributor to delete the subscription without removing related objects at the Distributor.

Per eliminare una sottoscrizione pull di una pubblicazione di tipo mergeTo delete a pull subscription to a merge publication

  1. Nel database di sottoscrizione del Sottoscrittore eseguire sp_dropmergepullsubscription (Transact-SQL).At the Subscriber on the subscription database, execute sp_dropmergepullsubscription (Transact-SQL). Specificare i parametri @publication, @publishere @publisher_db.Specify @publication, @publisher, and @publisher_db.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_dropmergesubscription (Transact-SQL).At the Publisher on the publication database, execute sp_dropmergesubscription (Transact-SQL). Specificare i parametri @publication, @subscribere @subscriber_db.Specify @publication, @subscriber, and @subscriber_db. Specificare il valore pull per il parametro @subscription_type.Specify a value of pull for @subscription_type. (Facoltativo) Se non è possibile accedere al database di distribuzione, specificare il valore 1 per il parametro @ignore_distributor per eliminare la sottoscrizione senza rimuovere gli oggetti correlati nel database di distribuzione.(Optional) If the Distributor cannot be accessed, specify a value of 1 for @ignore_distributor to delete the subscription without removing related objects at the Distributor.

Esempi (Transact-SQL) Examples (Transact-SQL)

Nell'esempio seguente viene eliminata una sottoscrizione pull di una pubblicazione transazionale.The following example deletes a pull subscription to a transactional publication. Il primo batch viene eseguito nel Sottoscrittore, mentre il secondo viene eseguito nel server di pubblicazione.The first batch is executed at the Subscriber and the second is executed at the Publisher.

-- 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 is the batch executed at the Subscriber to drop 
-- a pull subscription to a transactional publication.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB     AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2012';

USE [AdventureWorks2012Replica]
EXEC sp_droppullsubscription 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication;
GO
-- 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

Nell'esempio seguente viene eliminata una sottoscrizione pull di una pubblicazione di tipo merge.The following example deletes a pull subscription to a merge publication. Il primo batch viene eseguito nel Sottoscrittore, mentre il secondo viene eseguito nel server di pubblicazione.The first batch is executed at the Subscriber and the second is executed at the Publisher.

-- 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 Subscriber to remove 
-- a merge pull subscription.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publication_db AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publication_db = N'AdventureWorks2012';

USE [AdventureWorks2012Replica]
EXEC sp_dropmergepullsubscription 
  @publisher = @publisher, 
  @publisher_db = @publication_db, 
  @publication = @publication;
GO
-- 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

Utilizzo di RMO (Replication Management Objects) Using Replication Management Objects (RMO)

È possibile eliminare sottoscrizioni pull a livello di programmazione tramite gli oggetti RMO (Replication Management Objects).You can delete pull subscriptions programmatically by using Replication Management Objects (RMO). Le classi RMO utilizzate per l'eliminazione di una sottoscrizione pull dipendono dal tipo di pubblicazione per cui viene creata la sottoscrizione pull.The RMO classes that you use to delete a pull subscription depend on the type of publication to which the pull subscription is subscribed.

Per eliminare una sottoscrizione pull di una pubblicazione snapshot o transazionaleTo delete a pull subscription to a snapshot or transactional publication

  1. Creare una connessione sia al Sottoscrittore che al server di pubblicazione tramite la classe ServerConnection.Create connections to both the Subscriber and Publisher by using the ServerConnection Class.

  2. Creare un'istanza della classe TransPullSubscription e impostare le proprietà PublicationName, DatabaseName, PublisherName e PublicationDBName.Create an instance of the TransPullSubscription class, and set the PublicationName, DatabaseName, PublisherName, and PublicationDBName properties. Usare la connessione al Sottoscrittore del passaggio 1 per impostare la proprietà ConnectionContext.Use the Subscriber connection from step 1 to set the ConnectionContext property.

  3. Controllare la proprietà IsExistingObject per verificare che la sottoscrizione esista.Check the IsExistingObject property to verify that the subscription exists. Se il valore di questa proprietà è false, le proprietà di sottoscrizioni sono state definite in modo non corretto nel passaggio 2 oppure la sottoscrizione non esiste.If the value of this property is false, either the subscription properties in step 2 were defined incorrectly or the subscription does not exist.

  4. Chiamare il metodo Remove.Call the Remove method.

  5. Creare un'istanza della classe TransPublication usando la connessione al server di pubblicazione creata nel passaggio 1.Create an instance of the TransPublication class by using the Publisher connection from step 1. Specificare Name, DatabaseName e ConnectionContext.Specify Name, DatabaseName and ConnectionContext.

  6. Chiamare il metodo LoadProperties.Call the LoadProperties method. Se il metodo restituisce false, le proprietà specificate nel passaggio 5 non sono corrette oppure la pubblicazione non esiste nel server.If this method returns false, either the properties specified in step 5 are incorrect or the publication does not exist on the server.

  7. Chiamare il metodo RemovePullSubscription.Call the RemovePullSubscription method. Specificare il nome del Sottoscrittore e il database di sottoscrizione per i parametri subscriber e subscriberDB .Specify the name of the Subscriber and the subscription database for the subscriber and subscriberDB parameters.

Per eliminare una sottoscrizione pull di una pubblicazione di tipo mergeTo delete a pull subscription to a merge publication

  1. Creare una connessione sia al Sottoscrittore che al server di pubblicazione tramite la classe ServerConnection.Create connections to both the Subscriber and Publisher by using the ServerConnection Class.

  2. Creare un'istanza della classe MergePullSubscription e impostare le proprietà PublicationName, DatabaseName, PublisherName e PublicationDBName.Create an instance of the MergePullSubscription class, and set the PublicationName, DatabaseName, PublisherName, and PublicationDBName properties. Usare la connessione del passaggio 1 per impostare la proprietà ConnectionContext.Use the connection from step 1 to set the ConnectionContext property.

  3. Controllare la proprietà IsExistingObject per verificare che la sottoscrizione esista.Check the IsExistingObject property to verify that the subscription exists. Se il valore di questa proprietà è false, le proprietà di sottoscrizioni sono state definite in modo non corretto nel passaggio 2 oppure la sottoscrizione non esiste.If the value of this property is false, either the subscription properties in step 2 were defined incorrectly or the subscription does not exist.

  4. Chiamare il metodo Remove.Call the Remove method.

  5. Creare un'istanza della classe MergePublication usando la connessione al server di pubblicazione creata nel passaggio 1.Create an instance of the MergePublication class by using the Publisher connection from step 1. Specificare Name, DatabaseName e ConnectionContext.Specify Name, DatabaseName and ConnectionContext.

  6. Chiamare il metodo LoadProperties.Call the LoadProperties method. Se il metodo restituisce false, le proprietà specificate nel passaggio 5 non sono corrette oppure la pubblicazione non esiste nel server.If this method returns false, either the properties specified in step 5 are incorrect or the publication does not exist on the server.

  7. Chiamare il metodo RemovePullSubscription.Call the RemovePullSubscription method. Specificare il nome del Sottoscrittore e il database di sottoscrizione per i parametri subscriber e subscriberDB .Specify the name of the Subscriber and the subscription database for the subscriber and subscriberDB parameters.

Esempi (RMO) Examples (RMO)

In questo esempio viene eliminata una sottoscrizione pull a una pubblicazione transazionale e viene rimossa la registrazione della sottoscrizione nel server di pubblicazione.This example deletes a pull subscription to a transactional publication and removes the subscription registration at the Publisher.

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

//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);

// Create the objects that we need.
TransPublication publication;
TransPullSubscription subscription;

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

	// Define the pull subscription.
	subscription = new TransPullSubscription();
	subscription.ConnectionContext = subscriberConn;
	subscription.PublisherName = publisherName;
	subscription.PublicationName = publicationName;
	subscription.PublicationDBName = publicationDbName;
	subscription.DatabaseName = subscriptionDbName;

	// Define the publication.
	publication = new TransPublication();
	publication.Name = publicationName;
	publication.DatabaseName = publicationDbName;
	publication.ConnectionContext = publisherConn;

	// Delete the pull subscription, if it exists.
	if (subscription.IsExistingObject)
	{
		if (publication.LoadProperties())
		{
                     // Remove the pull subscription registration at the Publisher.
			publication.RemovePullSubscription(subscriberName, subscriptionDbName);
		}
		else
		{
			// Do something here if the publication does not exist.
			throw new ApplicationException(String.Format(
				"The publication '{0}' does not exist on {1}.",
				publicationName, publisherName));
		}
                 // 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
{
	subscriberConn.Disconnect();
	publisherConn.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 connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)

' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransPullSubscription

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

    ' Define the pull subscription.
    subscription = New TransPullSubscription()
    subscription.ConnectionContext = subscriberConn
    subscription.PublisherName = publisherName
    subscription.PublicationName = publicationName
    subscription.PublicationDBName = publicationDbName
    subscription.DatabaseName = subscriptionDbName

    ' Define the publication.
    publication = New TransPublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = publisherConn

    ' Delete the pull subscription, if it exists.
    If subscription.IsExistingObject Then
       
        If publication.LoadProperties() Then
            ' Remove the pull subscription registration at the Publisher.
            publication.RemovePullSubscription(subscriberName, subscriptionDbName)
        Else
            ' Do something here if the publication does not exist.
            Throw New ApplicationException(String.Format( _
             "The publication '{0}' does not exist on {1}.", _
             publicationName, publisherName))
        End If
        ' 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
    subscriberConn.Disconnect()
    publisherConn.Disconnect()
End Try

In questo esempio viene eliminata una sottoscrizione pull a una pubblicazione di tipo merge e viene rimossa la registrazione della sottoscrizione nel server di pubblicazione.This example deletes a pull subscription to a merge publication and removes the subscription registration at the Publisher.

// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";

//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);

// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;

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

	// Define the pull subscription.
	subscription = new MergePullSubscription();
	subscription.ConnectionContext = subscriberConn;
	subscription.PublisherName = publisherName;
	subscription.PublicationName = publicationName;
	subscription.PublicationDBName = publicationDbName;
	subscription.DatabaseName = subscriptionDbName;

	// Define the publication.
	publication = new MergePublication();
	publication.Name = publicationName;
	publication.DatabaseName = publicationDbName;
	publication.ConnectionContext = publisherConn;

	// Delete the pull subscription, if it exists.
	if (subscription.IsExistingObject)
	{
		// Delete the pull subscription at the Subscriber.
		subscription.Remove();

		if (publication.LoadProperties())
		{
			publication.RemovePullSubscription(subscriberName, subscriptionDbName);
		}
		else
		{
			// Do something here if the publication does not exist.
			throw new ApplicationException(String.Format(
				"The publication '{0}' does not exist on {1}.",
				publicationName, publisherName));
		}
	}
	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
{
	subscriberConn.Disconnect();
	publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)

' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription

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

    ' Define the pull subscription.
    subscription = New MergePullSubscription()
    subscription.ConnectionContext = subscriberConn
    subscription.PublisherName = publisherName
    subscription.PublicationName = publicationName
    subscription.PublicationDBName = publicationDbName
    subscription.DatabaseName = subscriptionDbName

    ' Define the publication.
    publication = New MergePublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = publisherConn

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

        ' Delete the pull subscription at the Subscriber.
        subscription.Remove()

        If publication.LoadProperties() Then
            publication.RemovePullSubscription(subscriberName, subscriptionDbName)
        Else
            ' Do something here if the publication does not exist.
            Throw New ApplicationException(String.Format( _
             "The publication '{0}' does not exist on {1}.", _
             publicationName, publisherName))
        End If
    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
    subscriberConn.Disconnect()
    publisherConn.Disconnect()
End Try

Vedere ancheSee Also

Sottoscrivere le pubblicazioni Subscribe to Publications
Replication Security Best Practices Replication Security Best Practices