Excluir uma publicação
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Este tópico descreve como excluir uma publicação no SQL Server usando o SQL Server Management Studio, o Transact-SQL ou o RMO (Replication Management Objects).
Neste tópico
Para excluir uma publicação, usando:
Como usar o SQL Server Management Studio.
Exclua publicações da pasta Publicações Locais no SQL Server Management Studio.
Para excluir uma publicação
Conecte-se ao Publicador no Management Studio e, em seguida, expanda o nó de servidor.
Expanda a pasta Replicação e, em seguida, a pasta Publicações Locais .
Clique com o botão direito na publicação que você deseja excluir e clique em Excluir.
Usando o 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çã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
Realize um dos seguintes 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ção
Especificar um valor 1 para @force pode deixar objetos de publicação relacionados a replicação no banco de dados.
(Opcional) Se esse banco de dados não tiver outras publicações, execute sp_replicationdboption (Transact-SQL) para desabilitar a publicação do banco de dados atual usando replicação de instantâneo ou transacional.
(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
Realize um dos seguintes 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ção
Especificar um valor 1 para @force pode deixar objetos de publicação relacionados a replicação no banco de dados.
(Opcional) Se esse banco de dados não tiver outras publicações, execute sp_replicationdboption (Transact-SQL) para desabilitar a publicação do banco de dados atual usando replicação de mesclagem.
(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 Delete a Pull Subscription ou 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 [AdventureWorks2022]
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 Delete a Pull Subscription ou 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
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
Crie uma conexão com o Publicador usando a classe ServerConnection .
Criar uma instância da classe TransPublication.
Defina as propriedades Name e DatabaseName para a publicação, e a propriedade ConnectionContext para a conexão criada na etapa 1.
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.
Chame o método Remove .
(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:
Criar uma instância da classe ReplicationDatabase. Defina a propriedade ConnectionContext para a instância de ServerConnection na etapa 1.
Chame o método LoadProperties . Se esse método retorna false, confirme que o banco de dados existe.
Defina as propriedades EnabledTransPublishing como false.
Chame o método CommitPropertyChanges .
Feche as conexões.
Para remover uma publicação de mesclagem
Crie uma conexão com o Publicador usando a classe ServerConnection .
Criar uma instância da classe MergePublication.
Defina as propriedades Name e DatabaseName para a publicação, e a propriedade ConnectionContext para a conexão criada na etapa 1.
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.
Chame o método Remove .
(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:
Criar uma instância da classe ReplicationDatabase. Defina a propriedade ConnectionContext para a instância de ServerConnection na etapa 1.
Chame o método LoadProperties . Se esse método retornar false, verifique se o banco de dados existe.
Defina as propriedades EnabledMergePublishing como false.
Chame o método CommitPropertyChanges .
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 = "AdventureWorks2022";
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 = "AdventureWorks2022"
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 = "AdventureWorks2022";
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 = "AdventureWorks2022"
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