Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico descreve como excluir uma assinatura pull no SQL Server 2014 usando o SQL Server Management Studio, o Transact-SQL ou o RMO (Replication Management Objects).
Nesse Tópico
Para excluir uma assinatura de pull usando:
Como usar o SQL Server Management Studio.
Exclua uma assinatura pull no Publicador (da pasta Publicações Locais no SQL Server Management Studio) ou no Assinante (da pasta Assinaturas Locais ). Excluir uma assinatura não remove objetos ou dados da assinatura; eles devem ser removidos manualmente.
Para excluir uma assinatura pull no Publicador
Conecte-se ao Publicador no SQL Server Management Studio e expanda o nó do servidor.
Expanda a pasta Replicação e expanda a pasta Publicações Locais .
Expanda a publicação associada à assinatura que você deseja excluir.
Clique com o botão direito do mouse na assinatura e clique em Excluir.
Na caixa de diálogo de confirmação, selecione se deseja se conectar ao Assinante para excluir informações da assinatura. Se você desmarcar a caixa de seleção Conectar ao Assinante, deverá se conectar ao Assinante mais tarde para excluir as informações.
Para excluir uma assinatura pull no Assinante
Conecte-se ao Assinante no SQL Server Management Studio, e expanda o nó do servidor.
Expanda a pasta Replicação e expanda a pasta Assinaturas Locais .
Clique com o botão direito do mouse na assinatura que você deseja excluir e clique em Excluir.
Na caixa de diálogo de confirmação, selecione se deseja se conectar ao Publicador para excluir informações de assinatura. Se você limpar a caixa de seleção Conectar ao Publicador , deverá se conectar ao Publicador mais tarde para excluir as informações.
Usando Transact-SQL
As assinaturas pull podem ser excluídas programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados usados dependerão do tipo de publicação ao qual a assinatura pertence.
Para excluir uma assinatura de pull para uma publicação de instantâneo ou transacional
No assinante do banco de dados de assinaturas, execute sp_droppullsubscription (Transact-SQL). Especifique @publication, @publisher e @publisher_db.
No Publicador do banco de dados de publicação, execute sp_dropsubscription (Transact-SQL). Especifique @publication e @subscriber. Especifique um valor de todos para @article. (Opcional) Se o Distribuidor não puder ser acessado, especifique um valor de 1 para @ignore_distributor excluir a assinatura sem remover objetos relacionados no Distribuidor.
Para excluir uma assinatura pull para uma publicação de mesclagem
No Assinante do banco de dados de assinatura, execute sp_dropmergepullsubscription (Transact-SQL). Especifique @publication, @publisher e @publisher_db.
No Publicador no banco de dados de publicação, execute sp_dropmergesubscription (Transact-SQL). Especifique @publication, @subscriber e @subscriber_db. Especifique um valor de pull para @subscription_type. (Opcional) Se o Distribuidor não puder ser acessado, especifique um valor de 1 para @ignore_distributor excluir a assinatura sem remover objetos relacionados no Distribuidor.
Exemplos (Transact-SQL)
O exemplo a seguir exclui uma assinatura pull para uma publicação transacional. O primeiro lote é executado no Assinante e o segundo é executado no Publicador.
-- 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".
-- This is the batch executed at the Subscriber to drop
-- a pull subscription to a transactional publication.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2012';
USE [AdventureWorks2012Replica]
EXEC sp_droppullsubscription
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication;
GO
-- 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".
-- This batch is executed at the Publisher to remove
-- a pull or push subscription to a transactional publication.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
USE [AdventureWorks2012]
EXEC sp_dropsubscription
@publication = @publication,
@article = N'all',
@subscriber = @subscriber;
GO
O exemplo a seguir exclui uma assinatura pull para uma publicação de mesclagem. O primeiro lote é executado no Assinante e o segundo é executado no Publicador.
-- 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".
-- This batch is executed at the Subscriber to remove
-- a merge pull subscription.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publication_db AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publication_db = N'AdventureWorks2012';
USE [AdventureWorks2012Replica]
EXEC sp_dropmergepullsubscription
@publisher = @publisher,
@publisher_db = @publication_db,
@publication = @publication;
GO
-- 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".
-- This batch is executed at the Publisher to remove
-- a pull or push subscription to a merge publication.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2012Replica';
USE [AdventureWorks2012]
EXEC sp_dropmergesubscription
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB;
GO
Usando Objetos de Gerenciamento de Replicação (RMO)
Você pode excluir assinaturas pull programaticamente usando RMO (Replication Management Objects). As classes RMO que você usa para excluir uma assinatura pull dependem do tipo de publicação na qual a assinatura pull é assinada.
Para excluir uma assinatura do tipo pull de um instantâneo ou publicação transacional
Crie conexões com o Assinante e o Publicador usando a ServerConnection Classe.
Crie uma instância da classe TransPullSubscription e defina as propriedades PublicationName, DatabaseName, PublisherName e PublicationDBName. Use a conexão de assinante da etapa 1 para definir a propriedade ConnectionContext.
Verifique a IsExistingObject propriedade para verificar se a assinatura existe. Se o valor dessa propriedade for
false, as propriedades da assinatura na etapa 2 foram definidas incorretamente ou a assinatura não existe.Chame o método Remove .
Crie uma instância da TransPublication classe usando a conexão do Publicador da etapa 1. Especifique Name, DatabaseName e ConnectionContext.
Chame o método LoadProperties . Se esse método retornar
false, as propriedades especificadas na etapa 5 estarão incorretas ou a publicação não existirá no servidor.Chame o método RemovePullSubscription . Especifique o nome do Assinante e o banco de dados de assinatura para os parâmetros assinante e subscriberDB .
Para excluir uma assinatura de coleta de uma publicação de mesclagem
Crie conexões com o Assinante e o Publicador usando a ServerConnection Classe.
Crie uma instância da classe MergePullSubscription e defina as propriedades PublicationName, DatabaseName, PublisherName e PublicationDBName. Use a conexão da etapa 1 para definir a ConnectionContext propriedade.
Verifique a IsExistingObject propriedade para verificar se a assinatura existe. Se o valor dessa propriedade for
false, as propriedades da assinatura na etapa 2 foram definidas incorretamente ou a assinatura não existe.Chame o método Remove .
Crie uma instância da MergePublication classe usando a conexão do Publicador da etapa 1. Especifique Name, DatabaseName e ConnectionContext.
Chame o método LoadProperties . Se esse método retornar
false, as propriedades especificadas na etapa 5 estarão incorretas ou a publicação não existirá no servidor.Chame o método RemovePullSubscription . Especifique o nome do Assinante e o banco de dados de assinatura para os parâmetros assinante e subscriberDB .
Exemplos (RMO)
Este exemplo exclui uma assinatura pull para uma publicação transacional e remove o registro de assinatura no Publicador.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
TransPublication publication;
TransPullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Define the pull subscription.
subscription = new TransPullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Define the publication.
publication = new TransPublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
// Delete the pull subscription, if it exists.
if (subscription.IsExistingObject)
{
if (publication.LoadProperties())
{
// Remove the pull subscription registration at the Publisher.
publication.RemovePullSubscription(subscriberName, subscriptionDbName);
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
// Delete the pull subscription at the Subscriber.
subscription.Remove();
}
else
{
throw new ApplicationException(String.Format(
"The subscription to {0} does not exist on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be deleted.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransPullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Define the pull subscription.
subscription = New TransPullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
' Define the publication.
publication = New TransPublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
' Delete the pull subscription, if it exists.
If subscription.IsExistingObject Then
If publication.LoadProperties() Then
' Remove the pull subscription registration at the Publisher.
publication.RemovePullSubscription(subscriberName, subscriptionDbName)
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
' Delete the pull subscription at the Subscriber.
subscription.Remove()
Else
Throw New ApplicationException(String.Format( _
"The subscription to {0} does not exist on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be deleted.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Este exemplo exclui uma assinatura pull para uma publicação de mesclagem e remove o registro de assinatura no Publicador.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Define the publication.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
// Delete the pull subscription, if it exists.
if (subscription.IsExistingObject)
{
// Delete the pull subscription at the Subscriber.
subscription.Remove();
if (publication.LoadProperties())
{
publication.RemovePullSubscription(subscriberName, subscriptionDbName);
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
else
{
throw new ApplicationException(String.Format(
"The subscription to {0} does not exist on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be deleted.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
' Define the publication.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
' Delete the pull subscription, if it exists.
If subscription.IsExistingObject Then
' Delete the pull subscription at the Subscriber.
subscription.Remove()
If publication.LoadProperties() Then
publication.RemovePullSubscription(subscriberName, subscriptionDbName)
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Else
Throw New ApplicationException(String.Format( _
"The subscription to {0} does not exist on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be deleted.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Consulte Também
Assinar publicações
Práticas recomendadas de segurança de replicação