Excluir uma publicação

Este tópico descreve como excluir uma publicação no SQL Server 2012 usando o SQL Server Management Studio, Transact-SQL ou RMO (Replication Management Objects).

Neste tópico

  • Para excluir uma publicação, usando:

    SQL Server Management Studio

    Transact-SQL

    RMO (Replication Management Objects)

Usando o SQL Server Management Studio

Exclua publicações da pasta Publicações Locais no SQL Server Management Studio.

Para excluir uma publicação

  1. Conecte-se ao Publicador no Management Studio e expanda o nó do servidor.

  2. Expanda a pasta Replicação e, em seguida, a pasta Publicações Locais.

  3. Clique com o botão direito na publicação que você deseja excluir e clique em Excluir.

Ícone de seta usado com o link Voltar ao Início[Top]

Usando Transact-SQL

As publicações podem ser excluídas programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados que você usar dependerão do tipo de publicação a ser excluída.

ObservaçãoObservação

Excluir uma publicação não remove objetos publicados do banco de dados de publicação ou objetos correspondentes do banco de dados de assinatura. Use o comando DROP <object> para remover esses objetos manualmente, se necessário.

Para excluir uma publicação de instantâneo ou transacional

  1. Siga um destes procedimentos:

    • Para excluir uma única publicação, execute sp_droppublication no Publicador do banco de dados de publicação.

    • Para excluir todas as publicações e remover todos os objetos de replicação de um banco de dados publicado, execute sp_removedbreplication no Publicador. Especifique um valor de tran para @type. (Opcional) Se o Distribuidor não puder ser acessado ou se o status do banco de dados estiver suspeito ou offline, especifique um valor 1 para @force. (Opcional) Especifique o nome do banco de dados para @dbname se sp_removedbreplication não for executado no banco de dados de publicação.

      ObservaçãoObservação

      Especificar um valor 1 para @force pode deixar objetos de publicação relacionados a replicação no banco de dados.

  2. (Opcional) Se esse banco de dados não tem outras publicações, execute sp_replicationdboption (Transact-SQL) para desabilitar publicação do banco de dados atual usando replicação de instantâneo ou transacional.

  3. (Opcional) No Assinante no banco de dados de assinatura, execute sp_subscription_cleanup para remover quaisquer metadados de replicação remanescentes no banco de dados de assinatura.

Para excluir uma publicação de mesclagem

  1. Siga um destes procedimentos:

    • Para excluir uma única publicação, execute sp_dropmergepublication (Transact-SQL) no Publicador do banco de dados de publicação.

    • Para excluir todas as publicações e remover todos os objetos de replicação de um banco de dados publicado, execute sp_removedbreplication no Publicador. Especifique um valor de merge para @type. (Opcional) Se o Distribuidor não puder ser acessado ou se o status do banco de dados estiver suspeito ou offline, especifique um valor 1 para @force. (Opcional) Especifique o nome do banco de dados para @dbname se sp_removedbreplication não for executado no banco de dados de publicação.

      ObservaçãoObservação

      Especificar um valor 1 para @force pode deixar objetos de publicação relacionados a replicação no banco de dados.

  2. (Opcional) Se esse banco de dados não tiver outras publicações, execute sp_replicationdboption (Transact-SQL) para desabilitar publicação do banco de dados atual usando replicação de mesclagem.

  3. (Opcional) No Assinante no banco de dados de assinatura, execute sp_mergesubscription_cleanup (Transact-SQL) para remover quaisquer metadados de replicação remanescentes no banco de dados de assinatura.

Exemplos (Transact-SQL)

Este exemplo mostra como remover uma publicação transacional e desabilitar publicação transacional para um banco de dados. Este exemplo pressupõe que todas as assinaturas foram previamente removidas. Para obter mais informações, consulte Excluir uma assinatura pull ou Excluir uma assinatura push.

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

Este exemplo mostra como remover uma publicação de mesclagem e desabilitar publicação de mesclagem para um banco de dados. Este exemplo pressupõe que todas as assinaturas foram previamente removidas. Para obter mais informações, consulte Excluir uma assinatura pull ou Excluir uma assinatura push.

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

Ícone de seta usado com o link Voltar ao Início[Top]

Usando o RMO (Replication Management Objects)

É possível excluir publicações de forma programada usando o RMO (Replication Management Objects). As classes de RMO usadas para remover uma publicação dependem do tipo de publicação a ser removida.

Para remover uma publicação transacional ou instantâneo

  1. Crie uma conexão com o Publicador usando a classe ServerConnection.

  2. Crie uma instância da classe TransPublication.

  3. Defina as propriedades Name e DatabaseName para a publicação, e a propriedade ConnectionContext para a conexão criada na etapa 1.

  4. Verifique a propriedade IsExistingObject para saber se a publicação existe. Se o valor dessa propriedade for false, as propriedades de publicação na etapa 3 foram definidas incorretamente ou a publicação não existe.

  5. Chame o método Remove.

  6. (Opcional) Se nenhuma outra publicação transacional existir para esse banco de dados, ele pode ser desabilitado para a publicação transacional, como se segue:

    1. Crie uma instância da classe ReplicationDatabase. Defina a propriedade ConnectionContext para a instância de ServerConnection na etapa 1.

    2. Chame o método LoadProperties. Se esse método retorna false, confirme que o banco de dados existe.

    3. Defina a propriedade EnabledTransPublishing como false.

    4. Chame o método CommitPropertyChanges.

  7. Feche as conexões.

Para remover uma publicação de mesclagem

  1. Crie uma conexão com o Publicador usando a classe ServerConnection.

  2. Crie uma instância da classe MergePublication.

  3. Defina as propriedades Name e DatabaseName para a publicação, e a propriedade ConnectionContext para a conexão criada na etapa 1.

  4. Verifique a propriedade IsExistingObject para saber se a publicação existe. Se o valor dessa propriedade for false, as propriedades de publicação na etapa 3 foram definidas incorretamente ou a publicação não existe.

  5. Chame o método Remove.

  6. (Opcional) Se nenhuma outra publicação de mesclagem existir para esse banco de dados, ele pode ser desabilitado para a publicação de mesclagem, como se segue:

    1. Crie uma instância da classe ReplicationDatabase. Defina a propriedade ConnectionContext para a instância de ServerConnection na etapa 1.

    2. Chame o método LoadProperties. Se esse método retornar false, verifique se o banco de dados existe.

    3. Defina a propriedade EnabledMergePublishing como false.

    4. Chame o método CommitPropertyChanges.

  7. Feche as conexões.

Exemplos (RMO)

O exemplo a seguir exclui uma publicação transacional. Se nenhuma outra publicação transacional existir para esse banco de dados, a publicação transacional será também desabilitada.

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

O exemplo a seguir exclui uma publicação de mesclagem. Se nenhuma outra publicação de mesclagem existir para esse banco de dados, a publicação de mesclagem será também desabilitada.

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

Ícone de seta usado com o link Voltar ao Início[Top]

Consulte também

Conceitos

Conceitos dos procedimentos armazenados do sistema de replicação

Publicar dados e objetos de banco de dados