Eliminazione di una pubblicazioneDelete a Publication

In questo argomento viene descritto come eliminare una pubblicazione 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 publication 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 le pubblicazioni dalla cartella Pubblicazioni locali in SQL Server Management StudioSQL Server Management Studio.Delete publications from the Local Publications folder in SQL Server Management StudioSQL Server Management Studio.

Per eliminare una pubblicazioneTo delete a publication

  1. Connettersi al server di pubblicazione in Management StudioManagement Studioe quindi espandere il nodo del server.Connect to the Publisher in Management StudioManagement 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. Fare clic con il pulsante destro del mouse sulla pubblicazione che si desidera eliminare e quindi scegliere Elimina.Right-click the publication you want to delete, and then click Delete.

Utilizzo di Transact-SQL Using Transact-SQL

È possibile eliminare pubblicazioni a livello di programmazione tramite le stored procedure di replica.Publications can be deleted programmatically using replication stored procedures. Le stored procedure utilizzate dipendono dal tipo di pubblicazione eliminato.The stored procedures that you use depend on the type of publication being deleted.

Nota

L'eliminazione di una pubblicazione non comporta la rimozione degli oggetti pubblicati dal database di pubblicazione o degli oggetti corrispondenti dal database di sottoscrizione.Deleting a publication does not remove published objects from the publication database or the corresponding objects from the subscription database. Utilizzare il comando DROP <object> per rimuovere manualmente questi oggetti, se necessario.Use the DROP <object> command to manually remove these objects if necessary.

Per eliminare una pubblicazione snapshot o transazionaleTo delete a snapshot or transactional publication

  1. Eseguire una delle operazioni seguenti:Do one of the following:

    • Per eliminare una singola pubblicazione, eseguire sp_droppublication nel database di pubblicazione del server di pubblicazione.To delete a single publication, execute sp_droppublication at the Publisher on the publication database.

    • Per eliminare tutte le pubblicazioni e rimuovere tutti gli oggetti di replica da un database pubblicato, eseguire sp_removedbreplication nel server di pubblicazione.To delete all publications in and remove all replication objects from a published database, execute sp_removedbreplication at the Publisher. Specificare il valore tran per @type.Specify a value of tran for @type. (Facoltativo) Se il server di distribuzione non è accessibile oppure se lo stato del database è sospetto oppure offline, specificare il valore 1 per @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. (Facoltativo) Specificare il nome del database per @dbname se sp_removedbreplication non viene eseguita nel database di pubblicazione.(Optional) Specify the name of the database for @dbname if sp_removedbreplication is not executed on the publication database.

      Nota

      Specificando il valore 1 per @force , è possibile che nel database rimangano oggetti di pubblicazione correlati alla replica.Specifying a value of 1 for @force may leave replication-related publishing objects in the database.

  2. (Facoltativo) Se il database non contiene altre pubblicazioni, eseguire sp_replicationdboption (Transact-SQL) per disabilitare la pubblicazione del database corrente usando la replica snapshot o transazionale.(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. (Facoltativo) Nel database di sottoscrizione del Sottoscrittore eseguire sp_subscription_cleanup per rimuovere gli eventuali metadati di replica rimanenti nel database di sottoscrizione.(Optional) At the Subscriber on the subscription database, execute sp_subscription_cleanup to remove any remaining replication metadata in the subscription database.

Per eliminare una pubblicazione di tipo mergeTo delete a merge publication

  1. Eseguire una delle operazioni seguenti:Do one of the following:

    • Per eliminare una singola pubblicazione, eseguire sp_dropmergepublication (Transact-SQL) nel database di pubblicazione del server di pubblicazione.To delete a single publication, execute sp_dropmergepublication (Transact-SQL) at the Publisher on the publication database.

    • Per eliminare tutte le pubblicazioni e rimuovere tutti gli oggetti di replica da un database pubblicato, eseguire sp_removedbreplication nel server di pubblicazione.To delete all publications in and remove all replication objects from a published database, execute sp_removedbreplication at the Publisher. Specificare il valore merge per @type.Specify a value of merge for @type. (Facoltativo) Se il server di distribuzione non è accessibile oppure se lo stato del database è sospetto oppure offline, specificare il valore 1 per @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. (Facoltativo) Specificare il nome del database per @dbname se sp_removedbreplication non viene eseguita nel database di pubblicazione.(Optional) Specify the name of the database for @dbname if sp_removedbreplication is not executed on the publication database.

      Nota

      Specificando il valore 1 per @force , è possibile che nel database rimangano oggetti di pubblicazione correlati alla replica.Specifying a value of 1 for @force may leave replication-related publishing objects in the database.

  2. (Facoltativo) Se il database non contiene altre pubblicazioni, eseguire sp_replicationdboption (Transact-SQL) per disabilitare la pubblicazione del database corrente usando la replica di tipo merge.(Optional) If this database has no other publications, execute sp_replicationdboption (Transact-SQL) to disable publication of the current database using merge replication.

  3. (Facoltativo) Nel database di sottoscrizione del Sottoscrittore eseguire sp_mergesubscription_cleanup (Transact-SQL) per rimuovere gli eventuali metadati di replica rimanenti nel database di sottoscrizione.(Optional) At the Subscriber on the subscription database, execute sp_mergesubscription_cleanup (Transact-SQL) to remove any remaining replication metadata in the subscription database.

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

In questo esempio viene illustrato come rimuovere una pubblicazione transazionale e disabilitare la pubblicazione transazionale per un database.This example shows how to remove a transactional publication and disable transactional publishing for a database. Si presuppone che in precedenza siano state rimosse tutte le sottoscrizioni.This example assumes that all subscriptions were previously removed. Per ulteriori informazioni, vedere Delete a Pull Subscription o 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

In questo esempio viene illustrato come rimuovere una pubblicazione di tipo merge e disabilitare la pubblicazione di tipo merge per un database.This example shows how to remove a merge publication and disable merge publishing for a database. Si presuppone che in precedenza siano state rimosse tutte le sottoscrizioni.This example assumes that all subscriptions were previously removed. Per ulteriori informazioni, vedere Delete a Pull Subscription o 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

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

È possibile eliminare pubblicazioni a livello di programmazione tramite gli oggetti RMO (Replication Management Objects).You can delete publications programmatically by using Replication Management Objects (RMO). Le classi RMO utilizzate per rimuovere una pubblicazione dipendono dal tipo di pubblicazione rimossa.The RMO classes that you use to remove a publication depend on the type of publication you remove.

Per rimuovere una pubblicazione snapshot o transazionaleTo remove a snapshot or transactional publication

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection.Create a connection to the Publisher by using the ServerConnection class.

  2. Creare un'istanza della classe TransPublication.Create an instance of the TransPublication class.

  3. Impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  4. Controllare la proprietà IsExistingObject per verificare che la pubblicazione esista.Check the IsExistingObject property to verify that the publication exists. Se il valore di questa proprietà è false, le proprietà di pubblicazione sono state definite in modo non corretto nel passaggio 3 oppure la pubblicazione non esiste.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. Chiamare il metodo Remove.Call the Remove method.

  6. (Facoltativo) Se per il database non esistono altre pubblicazioni transazionali, è possibile disabilitare il database per la pubblicazione transazionale come illustrato di seguito:(Optional) If no other transactional publications exist for this database, the database can be disabled for transactional publishing as follows:

    1. Creare un'istanza della classe ReplicationDatabase.Create an instance of the ReplicationDatabase class. Impostare la proprietà ConnectionContext sull'istanza di ServerConnection dal passaggio 1.Set the ConnectionContext property to the instance of ServerConnection from step 1.

    2. Chiamare il metodo LoadProperties.Call the LoadProperties method. Se il metodo restituisce false, verificare che il database esista.If this method returns false, confirm that the database exists.

    3. Impostare la proprietà EnabledTransPublishing su false.Set the EnabledTransPublishing property to false.

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

  7. Chiudere le connessioni.Close the connections.

Per rimuovere una pubblicazione di tipo mergeTo remove a merge publication

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection.Create a connection to the Publisher by using the ServerConnection class.

  2. Creare un'istanza della classe MergePublication.Create an instance of the MergePublication class.

  3. Impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  4. Controllare la proprietà IsExistingObject per verificare che la pubblicazione esista.Check the IsExistingObject property to verify that the publication exists. Se il valore di questa proprietà è false, le proprietà di pubblicazione sono state definite in modo non corretto nel passaggio 3 oppure la pubblicazione non esiste.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. Chiamare il metodo Remove.Call the Remove method.

  6. (Facoltativo) Se per il database non esistono altre pubblicazioni di tipo merge, è possibile disabilitare il database per la pubblicazione di tipo merge come illustrato di seguito:(Optional) If no other merge publications exist for this database, the database can be disabled for merge publishing as follows:

    1. Creare un'istanza della classe ReplicationDatabase.Create an instance of the ReplicationDatabase class. Impostare la proprietà ConnectionContext sull'istanza di ServerConnection dal passaggio 1.Set the ConnectionContext property to the instance of ServerConnection from Step 1.

    2. Chiamare il metodo LoadProperties.Call the LoadProperties method. Se il metodo restituisce false, verificare che il database esista.If this method returns false, verify that the database exists.

    3. Impostare la proprietà EnabledMergePublishing su false.Set the EnabledMergePublishing property to false.

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

  7. Chiudere le connessioni.Close the connections.

Esempi (RMO) Examples (RMO)

Nell'esempio seguente viene eliminata una pubblicazione transazionale.The following example deletes a transactional publication. Se per il database non esistono altre pubblicazioni transazionali, verrà anche disabilitata la pubblicazione transazionale.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

Nell'esempio seguente viene eliminata una pubblicazione di tipo merge.The following example deletes a merge publication. Se per il database non esistono altre pubblicazioni di tipo merge, verrà anche disabilitata la pubblicazione di tipo merge.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

Vedere ancheSee Also

Concetti di base relativi alle stored procedure del sistema di replica Replication System Stored Procedures Concepts
Pubblicare dati e oggetti di database Publish Data and Database Objects