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
Conecte-se ao Publicador no Management Studio e expanda o nó do 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.
[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çã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
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çã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 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.
(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
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çã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 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 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
[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
Crie uma conexão com o Publicador usando a classe ServerConnection.
Crie 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:
Crie 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 a propriedade 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.
Crie 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:
Crie 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 a propriedade 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 = "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
[Top]
Consulte também
Conceitos
Conceitos dos procedimentos armazenados do sistema de replicação