Condividi tramite


Eliminazione di una sottoscrizione push

In questo argomento viene descritto come eliminare una sottoscrizione push in SQL Server 2012 tramite SQL Server Management Studio, Transact-SQL o RMO (Replication Management Objects).

Contenuto dell'argomento

  • Per eliminare una sottoscrizione push, utilizzando:

    SQL Server Management Studio

    Transact-SQL

    Oggetti RMO (Replication Management Objects)

Utilizzo di SQL Server Management Studio

Eliminare una sottoscrizione push dal server di pubblicazione (dalla cartella Pubblicazioni locali in SQL Server Management Studio) o dal Sottoscrittore (dalla cartella Sottoscrizioni locali). Se si elimina una sottoscrizione non si rimuovono gli oggetti o i dati della sottoscrizioni, pertanto è necessario rimuoverli manualmente.

Per eliminare una sottoscrizione push dal server di pubblicazione

  1. Connettersi al server di pubblicazione in SQL Server Management Studio e quindi espandere il nodo del server.

  2. Espandere la cartella Replica e quindi la cartella Pubblicazioni locali.

  3. Espandere la pubblicazione associata alla sottoscrizione che si desidera eliminare.

  4. Fare clic con il pulsante destro del mouse sulla sottoscrizione e quindi scegliere Elimina.

  5. Nella finestra di dialogo di conferma specificare se connettersi al Sottoscrittore per eliminare le informazioni sulla sottoscrizione. Se si deseleziona la casella di controllo Connetti al Sottoscrittore, è necessario connettersi al Sottoscrittore in un secondo momento per eliminare le informazioni.

Per eliminare una sottoscrizione push dal Sottoscrittore

  1. Connettersi al Sottoscrittore in SQL Server Management Studio e quindi espandere il nodo del server.

  2. Espandere la cartella Replica e quindi la cartella Sottoscrizioni locali.

  3. Fare clic con il pulsante destro del mouse sulla sottoscrizione che si desidera eliminare e quindi scegliere Elimina.

  4. Nella finestra di dialogo di conferma specificare se connettersi al server di pubblicazione per eliminare le informazioni sulla sottoscrizione. 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.

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Utilizzo di Transact-SQL

È possibile eliminare sottoscrizioni push a livello di programmazione tramite le stored procedure di replica. Le stored procedure utilizzate dipendono dal tipo di pubblicazione a cui appartiene la sottoscrizione.

Per eliminare una sottoscrizione push di una pubblicazione snapshot o transazionale

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_dropsubscription (Transact-SQL). Specificare i parametri @publication e @subscriber. Specificare il valore all per il parametro @article. (Facoltativo) Se non è possibile accedere al server di distribuzione, specificare il valore 1 per il parametro @ignore_distributor per eliminare la sottoscrizione senza rimuovere gli oggetti correlati nel server di distribuzione.

  2. Nel database di sottoscrizione del Sottoscrittore eseguire sp_subscription_cleanup (Transact-SQL) per rimuovere i metadati di replica del database di sottoscrizione.

Per eliminare una sottoscrizione push di una pubblicazione di tipo merge

  1. Nel server di pubblicazione eseguire sp_dropmergesubscription (Transact-SQL), specificando @publication, @subscriber e @subscriber_db. (Facoltativo) Se non è possibile accedere al server di distribuzione, specificare il valore 1 per il parametro @ignore_distributor per eliminare la sottoscrizione senza rimuovere gli oggetti correlati nel server di distribuzione.

  2. Nel database di sottoscrizione del Sottoscrittore eseguire sp_mergesubscription_cleanup (Transact-SQL). Specificare i parametri @publisher, @publisher_db e @publication per rimuovere i metadati di merge dal database di sottoscrizione.

Esempi (Transact-SQL)

In questo esempio viene eliminata una sottoscrizione push di una pubblicazione transazionale.

-- 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

In questo esempio viene eliminata una sottoscrizione push di una pubblicazione di tipo merge.

-- 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

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Utilizzo di RMO (Replication Management Objects)

Le classi RMO utilizzate per l'eliminazione di una sottoscrizione push dipendono dal tipo di pubblicazione per cui viene creata la sottoscrizione push.

Per eliminare una sottoscrizione push di una pubblicazione snapshot o transazionale

  1. Creare una connessione al Sottoscrittore tramite la classe ServerConnection.

  2. Creare un'istanza della classe TransSubscription.

  3. Impostare le proprietà PublicationName, SubscriptionDBName, SubscriberName e DatabaseName.

  4. Impostare l'oggetto ServerConnection del passaggio 1 per la proprietà ConnectionContext.

  5. Controllare la proprietà IsExistingObject per verificare che la sottoscrizione sia esistente. Se il valore di questa proprietà è false, le proprietà della sottoscrizione sono state definite in modo non corretto nel passaggio 2 oppure la sottoscrizione non esiste.

  6. Chiamare il metodo Remove.

Per eliminare una sottoscrizione push di una pubblicazione di tipo merge

  1. Creare una connessione al Sottoscrittore tramite la classe ServerConnection.

  2. Creare un'istanza della classe MergeSubscription.

  3. Impostare le proprietà PublicationName, SubscriptionDBName, SubscriberName e DatabaseName.

  4. Impostare l'oggetto ServerConnection del passaggio 1 per la proprietà ConnectionContext.

  5. Controllare la proprietà IsExistingObject per verificare che la sottoscrizione sia esistente. Se il valore di questa proprietà è false, le proprietà della sottoscrizione sono state definite in modo non corretto nel passaggio 2 oppure la sottoscrizione non esiste.

  6. Chiamare il metodo Remove.

Esempi (RMO)

È possibile eliminare sottoscrizioni push a livello di programmazione tramite gli oggetti 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

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Vedere anche

Concetti

Sottoscrizione delle pubblicazioni

Procedure consigliate per la sicurezza della replica