Disabilitazione della pubblicazione e della distribuzioneDisable Publishing and Distribution

In questo argomento viene descritto come disabilitare la pubblicazione e la distribuzione in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQLo RMO (Replication Management Objects).This topic describes how to disable publishing and distribution in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO).

È possibile eseguire le operazioni seguenti:You can do the following:

  • Eliminare tutti i database di distribuzione dal database di distribuzione.Delete all distribution databases on the Distributor.

  • Disabilitare tutti i server di pubblicazione che utilizzano il server di distribuzione ed eliminare da tali server tutte le pubblicazioni.Disable all Publishers that use the Distributor and delete all publications on those Publishers.

  • Eliminare tutte le sottoscrizioni delle pubblicazioni.Delete all subscriptions to the publications. I dati dei database di pubblicazione e sottoscrizione non vengono eliminati, ma la relazione di sincronizzazione con i database di pubblicazione andrà perduta.Data in the publication and subscription databases will not be deleted; however, it loses its synchronization relationship to any publication databases. L'eliminazione dei dati nel Sottoscrittore deve essere eseguita in modo manuale.If you want the data at the Subscriber to be deleted, you must delete it manually.

    Contenuto dell'argomentoIn This Topic

  • Prima di iniziare:Before you begin:

    PrerequisitiPrerequisites

  • Per disabilitare la pubblicazione e la distribuzione, utilizzando:To disable publishing and distribution, using:

    SQL Server Management StudioSQL Server Management Studio

    Transact-SQLTransact-SQL

    Oggetti RMO (Replication Management Objects)Replication Management Objects (RMO)

Prima di iniziare Before You Begin

Prerequisiti Prerequisites

  • Per disabilitare la pubblicazione e la distribuzione, è necessario che tutti i database di distribuzione e pubblicazione siano online.To disable publishing and distribution, all distribution and publication databases must be online. Se esistono snapshot del database per i database di distribuzione o di pubblicazione, è necessario eliminarli prima di disabilitare la pubblicazione e la distribuzione.If any database snapshots exist for distribution or publication databases, they must be dropped before disabling publishing and distribution. Uno snapshot di database rappresenta una copia offline di sola lettura di un database e non è correlato a uno snapshot di replica.A database snapshot is a read-only offline copy of a database and is not related to a replication snapshot. Per altre informazioni, vedere Snapshot del database (SQL Server).For more information, see Database Snapshots (SQL Server).

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

È possibile disabilitare la pubblicazione e la distribuzione utilizzando la Disabilitazione guidata pubblicazione e distribuzione.Disable publishing and distribution by using the Disable Publishing and Distribution Wizard.

Per disabilitare la pubblicazione e la distribuzioneTo disable publishing and distribution

  1. Connettersi al server di pubblicazione o al server di distribuzione da disabilitare in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studioe quindi espandere il nodo del server.Connect to the Publisher or Distributor you want to disable in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Fare clic con il pulsante destro del mouse sulla cartella Replica e quindi scegliere Disabilita pubblicazione e distribuzione.Right-click the Replication folder, and then click Disable Publishing and Distribution.

  3. Eseguire i vari passaggi della Disabilitazione guidata pubblicazione e distribuzione.Complete the steps in the Disable Publishing and Distribution Wizard.

Utilizzo di Transact-SQL Using Transact-SQL

La pubblicazione e la distribuzione della replica possono essere disabilitate a livello di programmazione tramite le stored procedure di replica.Publishing and distributing can be disabled programmatically using replication stored procedures.

Per disabilitare la pubblicazione e la distribuzioneTo disable publishing and distribution

  1. Arrestare tutti i processi correlati alla replica.Stop all replication-related jobs. Per un elenco di nomi di processo, vedere la sezione "Sicurezza agente in SQL Server Agent" sezione di Modello di sicurezza dell'agente di replica.For a list of job names, see the "Agent Security Under SQL Server Agent" section of Replication Agent Security Model.

  2. Nel database di sottoscrizione di ogni Sottoscrittore eseguire sp_removedbreplication per rimuovere gli oggetti di replica dal database.At each Subscriber on the subscription database, execute sp_removedbreplication to remove replication objects from the database. Questa stored procedure non rimuoverà i processi di replica nel server di distribuzione.This stored procedure will not remove replication jobs at the Distributor.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_removedbreplication per rimuovere gli oggetti di replica dal database.At the Publisher on the publication database, execute sp_removedbreplication to remove replication objects from the database.

  4. Se il database di pubblicazione utilizza un server di distribuzione remoto, eseguire sp_dropdistributor.If the Publisher uses a remote Distributor, execute sp_dropdistributor.

  5. Nel server di distribuzione eseguire sp_dropdistpublisher.At the Distributor, execute sp_dropdistpublisher. Questa stored procedure deve essere eseguita una volta per ogni server di pubblicazione registrato nel server di distribuzione.This stored procedure should be run once for each Publisher registered at the Distributor.

  6. Nel database di distribuzione eseguire sp_dropdistributiondb per eliminare il database di distribuzione.At the Distributor, execute sp_dropdistributiondb to delete the distribution database. Questa stored procedure deve essere eseguita una volta per ogni server di pubblicazione registrato nel server di distribuzione.This stored procedure should be run once for each distribution database at the Distributor. Verranno anche rimossi gli eventuali processi dell'agente di lettura coda associati al database di distribuzione.This also removes any Queue Reader Agent jobs associated with the distribution database.

  7. Nel server di distribuzione eseguire sp_dropdistributor per rimuovere la designazione di server di distribuzione dal server.At the Distributor, execute sp_dropdistributor to remove the Distributor designation from the server.

    Nota

    Se prima dell'esecuzione di sp_dropdistpublisher e sp_dropdistributornon vengono eliminati tutti gli oggetti di pubblicazione e distribuzione della replica, queste procedure restituiranno un errore.If all replication publishing and distribution objects are not dropped before you execute sp_dropdistpublisher and sp_dropdistributor, these procedures will return an error. Per eliminare tutti gli oggetti correlati alla replica quando un server di pubblicazione o un server di distribuzione viene eliminato, è necessario impostare il parametro @no_checks su 1.To drop all replication-related objects when a Publisher or Distributor is dropped, the @no_checks parameter must be set to 1. Se un server di pubblicazione o un database di distribuzione è offline o non è raggiungibile, il parametro @ignore_distributor può essere impostato su 1 in modo che possa essere eliminato. Tuttavia, gli eventuali oggetti di pubblicazione e distribuzione rimasti devono essere rimossi manualmente.If a Publisher or Distributor is offline or unreachable, the @ignore_distributor parameter can be set to 1 so that they can be dropped; however, any publishing and distributing objects left behind must be removed manually.

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

In questo esempio di script vengono rimossi oggetti della replica dal database di sottoscrizione.This example script removes replication objects from the subscription database.

-- Remove replication objects from the subscription database on MYSUB.
DECLARE @subscriptionDB AS sysname
SET @subscriptionDB = N'AdventureWorks2012Replica'

-- Remove replication objects from a subscription database (if necessary).
USE master
EXEC sp_removedbreplication @subscriptionDB
GO

In questo esempio di script vengono disabilitate la pubblicazione e la distribuzione in un server che è un server di pubblicazione e un database di distribuzione e il database di distribuzione viene eliminato.This example script disables publishing and distribution on a server that is a Publisher and Distributor and drops the distribution database.

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

-- Disable publishing and distribution.
DECLARE @distributionDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB as sysname;
SET @distributionDB = N'distribution';
SET @publisher = $(DistPubServer);
SET @publicationDB = N'AdventureWorks2012';

-- Disable the publication database.
USE [AdventureWorks2012]
EXEC sp_removedbreplication @publicationDB;

-- Remove the registration of the local Publisher at the Distributor.
USE master
EXEC sp_dropdistpublisher @publisher;

-- Delete the distribution database.
EXEC sp_dropdistributiondb @distributionDB;

-- Remove the local server as a Distributor.
EXEC sp_dropdistributor;
GO

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

Per disabilitare la pubblicazione e la distribuzioneTo disable publishing and distribution

  1. Rimuovere tutte le sottoscrizioni di pubblicazioni che utilizzano il database di distribuzione.Remove all subscriptions to publications that use the Distributor. Per ulteriori informazioni, vedere Delete a Pull Subscription e Delete a Push Subscription.For more information, see Delete a Pull Subscription and Delete a Push Subscription.

  2. Rimuovere tutte le pubblicazioni che utilizzano il server di distribuzione e disabilitare la pubblicazione per tutti i database se il server di pubblicazione e il server di distribuzione si trovano nello stesso server.Remove all publications that use the Distributor, and disable publishing for all databases if the Publisher and Distributor are on the same server. Per altre informazioni, vedere Delete a Publication.For more information, see Delete a Publication.

  3. Creare una connessione al database di distribuzione tramite la classe ServerConnection.Create a connection to the Distributor by using the ServerConnection class.

  4. Creare un'istanza della classe DistributionPublisher.Create an instance of the DistributionPublisher class. Specificare la proprietà Name e passare l'oggetto ServerConnection ottenuto al passaggio 3.Specify the Name property, and pass the ServerConnection object from step 3.

  5. (Facoltativo) Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto e verificare che il server di pubblicazione esista.(Optional) Call the LoadProperties method to get the properties of the object and verify that the Publisher exists. Se il metodo restituisce false, il nome del server di pubblicazione impostato al passaggio 4 non è corretto oppure il server di pubblicazione non è utilizzato da questo server di distribuzione.If this method returns false, the Publisher name set in step 4 was incorrect or the Publisher is not used by this Distributor.

  6. Chiamare il metodo Remove.Call the Remove method. Passare il valore true per force se il server di pubblicazione e il server di distribuzione si trovano in server diversi e quando il server di pubblicazione deve essere disinstallato dal server di distribuzione senza prima verificare non esistano più pubblicazioni nel server di pubblicazione.Pass a value of true for force if the Publisher and Distributor are on different servers, and when the Publisher should be uninstalled at the Distributor without first verifying that publications no longer exist at the Publisher.

  7. Creare un'istanza della classe ReplicationServer.Create an instance of the ReplicationServer class. Passare l'oggetto ServerConnection dal passaggio 3.Pass the ServerConnection object from step 3.

  8. Chiamare il metodo UninstallDistributor.Call the UninstallDistributor method. Passare il valore true affinché force rimuova tutti gli oggetti di replica nel database di distribuzione senza prima verificare che tutti i database di pubblicazione locali siano stati disabilitati e i database di distribuzione siano stati disinstallati.Pass a value of true for force to remove all replication objects at the Distributor without first verifying that all local publication databases have been disabled, and distribution databases have been uninstalled.

Esempi (RMO) Examples (RMO)

In questo esempio viene rimossa la registrazione del server di pubblicazione nel database di distribuzione, viene eliminato il database di distribuzione e viene disinstallato il database di distribuzione.This example removes the Publisher registration at the Distributor, drops the distribution database, and uninstalls the Distributor.

// Set the Distributor and publication database names.
// Publisher and Distributor are on the same server instance.
string publisherName = publisherInstance;
string distributorName = publisherInstance;
string distributionDbName = "distribution";
string publicationDbName = "AdventureWorks2012";

// Create connections to the Publisher and Distributor
// using Windows Authentication.
ServerConnection publisherConn = new ServerConnection(publisherName);
ServerConnection distributorConn = new ServerConnection(distributorName);

// Create the objects we need.
ReplicationServer distributor =
	new ReplicationServer(distributorConn);
DistributionPublisher publisher;
DistributionDatabase distributionDb =
	new DistributionDatabase(distributionDbName, distributorConn);
ReplicationDatabase publicationDb;
publicationDb = new ReplicationDatabase(publicationDbName, publisherConn);

try
{
	// Connect to the Publisher and Distributor.
	publisherConn.Connect();
	distributorConn.Connect();

	// Disable all publishing on the AdventureWorks2012 database.
	if (publicationDb.LoadProperties())
	{
		if (publicationDb.EnabledMergePublishing)
		{
			publicationDb.EnabledMergePublishing = false;
		}
		else if (publicationDb.EnabledTransPublishing)
		{
			publicationDb.EnabledTransPublishing = false;
		}
	}
	else
	{
		throw new ApplicationException(
			String.Format("The {0} database does not exist.", publicationDbName));
	}

	// We cannot uninstall the Publisher if there are still Subscribers.
	if (distributor.RegisteredSubscribers.Count == 0)
	{
		// Uninstall the Publisher, if it exists.
		publisher = new DistributionPublisher(publisherName, distributorConn);
		if (publisher.LoadProperties())
		{
			publisher.Remove(false);
		}
		else
		{
			// Do something here if the Publisher does not exist.
			throw new ApplicationException(String.Format(
				"{0} is not a Publisher for {1}.", publisherName, distributorName));
		}

		// Drop the distribution database.
		if (distributionDb.LoadProperties())
		{
			distributionDb.Remove();
		}
		else
		{
			// Do something here if the distribition DB does not exist.
			throw new ApplicationException(String.Format(
				"The distribution database '{0}' does not exist on {1}.",
				distributionDbName, distributorName));
		}

		// Uninstall the Distributor, if it exists.
		if (distributor.LoadProperties())
		{
			// Passing a value of false means that the Publisher 
			// and distribution databases must already be uninstalled,
			// and that no local databases be enabled for publishing.
			distributor.UninstallDistributor(false);
		}
		else
		{
			//Do something here if the distributor does not exist.
			throw new ApplicationException(String.Format(
				"The Distributor '{0}' does not exist.", distributorName));
		}
	}
	else
	{
		throw new ApplicationException("You must first delete all subscriptions.");
	}
}
catch (Exception ex)
{
	// Implement appropriate error handling here.
	throw new ApplicationException("The Publisher and Distributor could not be uninstalled", ex);
}
finally
{
	publisherConn.Disconnect();
	distributorConn.Disconnect();
}
' Set the Distributor and publication database names.
' Publisher and Distributor are on the same server instance.
Dim publisherName As String = publisherInstance
Dim distributorName As String = subscriberInstance
Dim distributionDbName As String = "distribution"
Dim publicationDbName As String = "AdventureWorks2012"

' Create connections to the Publisher and Distributor
' using Windows Authentication.
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
Dim distributorConn As ServerConnection = New ServerConnection(distributorName)

' Create the objects we need.
Dim distributor As ReplicationServer
distributor = New ReplicationServer(distributorConn)
Dim publisher As DistributionPublisher
Dim distributionDb As DistributionDatabase
distributionDb = New DistributionDatabase(distributionDbName, distributorConn)
Dim publicationDb As ReplicationDatabase
publicationDb = New ReplicationDatabase(publicationDbName, publisherConn)

Try
    ' Connect to the Publisher and Distributor.
    publisherConn.Connect()
    distributorConn.Connect()

    ' Disable all publishing on the AdventureWorks2012 database.
    If publicationDb.LoadProperties() Then
        If publicationDb.EnabledMergePublishing Then
            publicationDb.EnabledMergePublishing = False
        ElseIf publicationDb.EnabledTransPublishing Then
            publicationDb.EnabledTransPublishing = False
        End If
    Else
        Throw New ApplicationException( _
            String.Format("The {0} database does not exist.", publicationDbName))
    End If

    ' We cannot uninstall the Publisher if there are still Subscribers.
    If distributor.RegisteredSubscribers.Count = 0 Then
        ' Uninstall the Publisher, if it exists.
        publisher = New DistributionPublisher(publisherName, distributorConn)
        If publisher.LoadProperties() Then
            publisher.Remove(False)
        Else
            ' Do something here if the Publisher does not exist.
            Throw New ApplicationException(String.Format( _
                "{0} is not a Publisher for {1}.", publisherName, distributorName))
        End If

        ' Drop the distribution database.
        If distributionDb.LoadProperties() Then
            distributionDb.Remove()
        Else
            ' Do something here if the distribition DB does not exist.
            Throw New ApplicationException(String.Format( _
             "The distribution database '{0}' does not exist on {1}.", _
             distributionDbName, distributorName))
        End If

        ' Uninstall the Distributor, if it exists.
        If distributor.LoadProperties() Then
            ' Passing a value of false means that the Publisher 
            ' and distribution databases must already be uninstalled,
            ' and that no local databases be enabled for publishing.
            distributor.UninstallDistributor(False)
        Else
            'Do something here if the distributor does not exist.
            Throw New ApplicationException(String.Format( _
                "The Distributor '{0}' does not exist.", distributorName))
        End If
    Else
        Throw New ApplicationException("You must first delete all subscriptions.")
    End If

Catch ex As Exception
    ' Implement appropriate error handling here.
    Throw New ApplicationException("The Publisher and Distributor could not be uninstalled", ex)

Finally
    publisherConn.Disconnect()
    distributorConn.Disconnect()

End Try

In questo esempio viene disinstallato il server di distribuzione senza prima disabilitare i database di pubblicazione locali o eliminare il database di distribuzione.This example uninstalls the Distributor without first disabling local publication databases or dropping the distribution database.

// Set the Distributor and publication database names.
// Publisher and Distributor are on the same server instance.
string distributorName = publisherInstance;

// Create connections to the Distributor
// using Windows Authentication.
ServerConnection conn = new ServerConnection(distributorName);
conn.DatabaseName = "master";

// Create the objects we need.
ReplicationServer distributor = new ReplicationServer(conn);

try
{
	// Connect to the Publisher and Distributor.
	conn.Connect();


	// Uninstall the Distributor, if it exists.
	// Use the force parameter to remove everthing.  
	if (distributor.IsDistributor && distributor.LoadProperties())
	{
		// Passing a value of true means that the Distributor 
		// is uninstalled even when publishing objects, subscriptions,
		// and distribution databases exist on the server.
		distributor.UninstallDistributor(true);
	}
	else
	{
		//Do something here if the distributor does not exist.
	}
}
catch (Exception ex)
{
	// Implement appropriate error handling here.
	throw new ApplicationException("The Publisher and Distributor could not be uninstalled", ex);
}
finally
{
	conn.Disconnect();
}
' Set the Distributor and publication database names.
' Publisher and Distributor are on the same server instance.
Dim distributorName As String = publisherInstance

' Create connections to the Distributor
' using Windows Authentication.
Dim conn As ServerConnection = New ServerConnection(distributorName)
conn.DatabaseName = "master"

' Create the objects we need.
Dim distributor As ReplicationServer = New ReplicationServer(conn)

Try
    ' Connect to the Publisher and Distributor.
    conn.Connect()


    ' Uninstall the Distributor, if it exists.
    ' Use the force parameter to remove everthing.  
    If distributor.IsDistributor And distributor.LoadProperties() Then
        ' Passing a value of true means that the Distributor 
        ' is uninstalled even when publishing objects, subscriptions,
        ' and distribution databases exist on the server.
        distributor.UninstallDistributor(True)
    Else
        'Do something here if the distributor does not exist.
    End If

Catch ex As Exception
    ' Implement appropriate error handling here.
    Throw New ApplicationException("The Publisher and Distributor could not be uninstalled", ex)

Finally
    conn.Disconnect()

End Try

Vedere ancheSee Also

Concetti di base relativi a RMO (Replication Management Objects) Replication Management Objects Concepts
Concetti di base relativi alle stored procedure del sistema di replica Replication System Stored Procedures Concepts