Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Azure SQL Managed Instance
Este tópico descreve como eliminar uma publicação no SQL Server utilizando o SQL Server Management Studio, Transact-SQL ou Objectos de Gestão de Replicação (RMO).
Usando o SQL Server Management Studio
Eliminar publicações da pasta Publicações Locais no SQL Server Management Studio.
Para eliminar uma publicação
Liga-te ao Publisher no Management Studio e depois expande o nó servidor.
Expanda a pasta Replicação e depois expanda a pasta Publicações Locais .
Clique com o botão direito na publicação que pretende eliminar e depois clique em Eliminar.
Usando Transact-SQL
As publicações podem ser eliminadas programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados que utiliza dependem do tipo de publicação que está a ser eliminada.
Note
Eliminar uma publicação não remove objetos publicados da base de dados da publicação nem os objetos correspondentes da base de dados por subscrição. Use o DROP <object> comando para remover manualmente estes objetos, se necessário.
Para eliminar um instantâneo ou publicação transacional
Proceda de uma das seguintes formas:
Para eliminar uma única publicação, execute sp_droppublication no Publisher na base de dados de publicações.
Para eliminar todas as publicações e remover todos os objetos de replicação de uma base de dados publicada, execute sp_removedbreplication no Publisher. Especifique um valor de tran para @type. (Opcional) Se o Distribuidor não puder ser acedido ou se o estado da base de dados for suspeito ou offline, especifique um valor de 1 para @force. (Opcional) Especifique o nome da base de dados para @dbname se sp_removedbreplication não for executado na base de dados de publicação.
Note
Especificar um valor de 1 para @force pode deixar objetos de publicação relacionados com replicação na base de dados.
(Opcional) Se esta base de dados não tiver outras publicações, execute sp_replicationdboption (Transact-SQL) para desativar a publicação da base de dados atual usando snapshot ou replicação transacional.
(Opcional) No Assinante da base de dados de subscrição, execute sp_subscription_cleanup para remover quaisquer metadados de replicação remanescentes na base de dados de subscrição.
Para eliminar uma publicação de fusão
Proceda de uma das seguintes formas:
Para eliminar uma única publicação, execute sp_dropmergepublication (Transact-SQL) no Publisher na base de dados da publicação.
Para eliminar todas as publicações e remover todos os objetos de replicação de uma base de dados publicada, execute sp_removedbreplication no Publisher. Especifique um valor de merge para @type. (Opcional) Se o Distribuidor não puder ser acedido ou se o estado da base de dados for suspeito ou offline, especifique um valor de 1 para @force. (Opcional) Especifique o nome da base de dados para @dbname se sp_removedbreplication não for executado na base de dados de publicação.
Note
Especificar um valor de 1 para @force pode deixar objetos de publicação relacionados com replicação na base de dados.
(Opcional) Se esta base de dados não tiver outras publicações, execute sp_replicationdboption (Transact-SQL) para desativar a publicação da base de dados atual usando a replicação de fusão.
(Opcional) No Assinante na base de dados de subscrição, execute sp_mergesubscription_cleanup (Transact-SQL) para remover quaisquer metadados de replicação remanescentes na base de dados de subscrição.
Exemplos (Transact-SQL)
Este exemplo mostra como remover uma publicação transacional e desativar a publicação transacional numa base de dados. Este exemplo assume que todas as subscrições foram previamente removidas. Para mais informações, consulte Eliminar uma Subscrição Pull ou Eliminar uma Subscrição Push.
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 por fusão e desativar a publicação por fusão para uma base de dados. Este exemplo assume que todas as subscrições foram previamente removidas. Para mais informações, consulte Eliminar uma Subscrição Pull ou Eliminar uma Subscrição 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
Utilização de Objetos de Gestão de Replicação (RMO)
Pode eliminar publicações programaticamente usando os Objetos de Gestão de Replicação (RMO). As classes RMO que usas para remover uma publicação dependem do tipo de publicação que removes.
Para remover um snapshot ou publicação transacional
Crie uma conexão com o Publisher usando a classe ServerConnection.
Crie uma instância da TransPublication classe.
Defina as Name propriedades e DatabaseName para a publicação, e defina a ConnectionContext propriedade para a ligação criada no passo 1.
Verifique a IsExistingObject propriedade para confirmar que a publicação existe. Se o valor desta propriedade for falso, ou as propriedades de publicação no passo 3 foram definidas incorretamente ou a publicação não existe.
Chame o método Remove.
(Opcional) Se não existirem outras publicações transacionais para esta base de dados, esta pode ser desativada para publicação transacional da seguinte forma:
Crie uma instância da ReplicationDatabase classe. Defina a ConnectionContext propriedade para a instância de ServerConnection do passo 1.
Chame o método LoadProperties. Se este método devolver falso, confirme que a base de dados existe.
Defina a EnabledTransPublishing propriedade para falso.
Chame o método CommitPropertyChanges.
Fecha as ligações.
Para remover uma publicação de fusão
Crie uma conexão com o Publisher usando a classe ServerConnection.
Crie uma instância da MergePublication classe.
Defina as Name propriedades e DatabaseName para a publicação, e defina a ConnectionContext propriedade para a ligação criada no passo 1.
Verifique a IsExistingObject propriedade para confirmar que a publicação existe. Se o valor desta propriedade for falso, ou as propriedades de publicação no passo 3 foram definidas incorretamente ou a publicação não existe.
Chame o método Remove.
(Opcional) Se não existirem outras publicações de fusão para esta base de dados, a base de dados pode ser desativada para publicação por fusão da seguinte forma:
Crie uma instância da ReplicationDatabase classe. Defina a ConnectionContext propriedade para a instância de ServerConnection a partir do Passo 1.
Chame o método LoadProperties. Se este método devolver false, verifique se a base de dados existe.
Defina a EnabledMergePublishing propriedade para falso.
Chame o método CommitPropertyChanges.
Fecha as ligações.
Exemplos (RMO)
O exemplo seguinte elimina uma publicação transacional. Se não existirem outras publicações transacionais para esta base de dados, a publicação transacional também está desativada.
// 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 seguinte elimina uma publicação de fusão. Se não existirem outras publicações de fusão para esta base de dados, a publicação por fusão também está desativada.
// 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