Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico descreve como reinicializar uma assinatura no SQL Server 2014 usando o SQL Server Management Studio, o Transact-SQL ou o RMO (Replication Management Objects). Assinaturas individuais podem ser marcadas para reconfiguração, permitindo que uma nova captura seja aplicada durante a próxima sincronização.
Nesse Tópico
Para reinicializar uma assinatura usando:
Como usar o SQL Server Management Studio.
Reinicializar uma assinatura é um processo de duas partes:
Uma única assinatura ou todas as assinaturas de uma publicação são marcadas para reinicialização. Marque assinaturas para reinicialização na caixa de diálogo Reinicializar Assinaturas , que está disponível na pasta Publicações Locais e na pasta Assinaturas Locais no Microsoft SQL Server Management Studio. Você também pode marcar assinaturas da guia Todas as Assinaturas e do nó de publicações no Replication Monitor. Para obter informações sobre como iniciar o Replication Monitor, consulte Iniciar o Replication Monitor. Ao marcar uma assinatura para reinicialização, você tem as seguintes opções:
Usar o instantâneo atual
Selecione para aplicar o instantâneo atual ao Assinante na próxima vez que o Agente de Distribuição ou o Agente de Mesclagem for executado. Se não houver nenhum instantâneo válido disponível, essa opção não poderá ser selecionada.Usar um novo instantâneo
Selecione para reinicializar a assinatura com uma nova captura instantânea. O snapshot só pode ser aplicado ao Assinante depois de ter sido gerado pelo agente de geração de instantâneos. Se o Snapshot Agent estiver definido para ser executado em um agendamento, a assinatura não será reinicializada até depois da próxima execução agendada do Snapshot Agent. Selecione Gerar o novo instantâneo agora para iniciar o Snapshot Agent imediatamente.Carregar alterações não sincronizadas antes da reinicialização
Replicação de mesclagem somente. Selecione para enviar quaisquer alterações não salvas do banco de dados de assinatura antes que os dados no Assinante sejam substituídos por uma imagem instantânea.Se você adicionar, remover ou alterar um filtro parametrizado, as alterações pendentes no Assinante não poderão ser carregadas no Publicador durante a reinicialização. Se você quiser carregar alterações pendentes, sincronize todas as assinaturas antes de alterar o filtro.
Uma assinatura é reinicializada na próxima vez em que for sincronizada: o Agente de Distribuição (para replicação transacional) ou o Merge Agent (para replicação de mesclagem) aplica o instantâneo mais recente a cada Assinante que tem uma assinatura marcada para reinicialização. Para obter mais informações sobre como sincronizar assinaturas, consulte Synchronize a Push Subscription and Synchronize a Pull Subscription.
Para marcar uma única assinatura push ou pull para reinicialização no Management Studio (no Publisher)
Conecte-se ao Publicador no Management Studio e expanda o nó do servidor.
Expanda a pasta Replicação e expanda a pasta Publicações Locais .
Expanda a publicação que tem a assinatura que você deseja reinicializar.
Clique com o botão direito do mouse na assinatura e clique em Reinicializar.
Na caixa de diálogo Reinicializar Assinaturas , selecione opções e clique em Marcar para Reinicialização.
Para marcar uma assinatura de recebimento única para reinicialização no Management Studio (no Assinante)
Conecte-se ao Assinante no 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 e clique em Reinicializar.
Na caixa de diálogo de confirmação exibida, clique em Sim.
Para marcar todas as assinaturas para serem reinicializadas no Management Studio
Conecte-se ao Publicador no Management Studio e expanda o nó do servidor.
Expanda a pasta Replicação e expanda a pasta Publicações Locais .
Clique com o botão direito do mouse na publicação com assinaturas que você deseja reinicializar e clique em Reinicializar Todas as Assinaturas.
Na caixa de diálogo Reinicializar Assinaturas , selecione opções e clique em Marcar para Reinicialização.
Para marcar uma única assinatura push ou pull para reinicialização no Replication Monitor
No Replication Monitor, expanda um grupo publicador no painel esquerdo, expanda um Publicador e clique em uma publicação.
Clique na guia Todas as Assinaturas.
Clique com o botão direito do mouse na assinatura que você deseja reinicializar e clique em Reinicializar Assinatura.
Na caixa de diálogo Reinicializar Assinaturas , selecione opções e clique em Marcar para Reinicialização.
Para marcar todas as assinaturas para reinicialização no Replication Monitor
No Replication Monitor, expanda um grupo do Publisher no painel esquerdo e, em seguida, expanda um Publisher.
Clique com o botão direito do mouse na publicação com assinaturas que você deseja reinicializar e clique em Reinicializar Todas as Assinaturas.
Na caixa de diálogo Reinicializar Assinaturas , selecione opções e clique em Marcar para Reinicialização.
Usando Transact-SQL
As assinaturas podem ser reinicializadas programaticamente usando procedimentos armazenados de replicação. O procedimento armazenado usado depende do tipo de assinatura (push ou pull) e do tipo de publicação a que a assinatura está vinculada.
Para reinicializar uma assinatura de solicitação para uma publicação transacional
No Assinante do banco de dados de assinatura, execute sp_reinitpullsubscription (Transact-SQL). Especifique @publisher, @publisher_db e @publication. Isso marca a assinatura para ser reinicializada na próxima vez que o Agente de Distribuição for executado.
(Opcional) Inicie o Agente de Distribuição no Assinante para sincronizar a assinatura. Para obter mais informações, consulte Synchronize a Pull Subscription.
Para reinicializar uma assinatura push para uma publicação transacional
No Publicador, execute sp_reinitsubscription (Transact-SQL). Especifique @publication, @subscriber e @destination_db. Isso marca a assinatura para reinicialização na próxima vez que o Agente de Distribuição for executado.
(Opcional) Inicie o Distribution Agent no Distribuidor para sincronizar a assinatura. Para obter mais informações, consulte Synchronize a Push Subscription.
Para reinicializar uma assinatura de coleta para uma publicação de mesclagem
No Assinante do banco de dados de assinatura, execute sp_reinitmergepullsubscription (Transact-SQL). Especifique @publisher, @publisher_db e @publication. Para carregar alterações do Assinante antes da reinicialização, especifique o valor de
true@upload_first. Isso marca a assinatura para reinicialização na próxima vez que o Merge Agent for executado.Importante
Se você adicionar, remover ou alterar um filtro parametrizado, as alterações pendentes no Assinante não poderão ser carregadas no Publicador durante a reinicialização. Se você quiser carregar alterações pendentes, sincronize todas as assinaturas antes de alterar o filtro.
(Opcional) Inicie o agente de mesclagem no assinante para sincronizar a assinatura. Para obter mais informações, consulte Synchronize a Pull Subscription.
Para reinicializar uma assinatura push para uma publicação de mesclagem
No Publicador, execute sp_reinitmergesubscription (Transact-SQL). Especifique @publication, @subscriber e @subscriber_db. Para carregar alterações do Assinante antes da reinicialização, especifique um valor de
truede @upload_first. Isso marca a assinatura para reinicialização na próxima vez que o Agente de Distribuição for executado.Importante
Se você adicionar, remover ou alterar um filtro parametrizado, as alterações pendentes no Assinante não poderão ser carregadas no Publicador durante a reinicialização. Se você quiser carregar alterações pendentes, sincronize todas as assinaturas antes de alterar o filtro.
(Opcional) Inicie o Merge Agent no Distribuidor para sincronizar a assinatura. Para obter mais informações, consulte Synchronize a Push Subscription.
Para definir a política de reinicialização ao criar uma nova publicação de mesclagem
No Publicador do banco de dados de publicação, execute sp_addmergepublication, especificando um dos seguintes valores para @automatic_reinitialization_policy:
1 – as alterações são enviadas pelo Assinante antes que uma assinatura seja reinicializada automaticamente, conforme exigido por uma alteração na publicação.
0 – as alterações no Assinante são descartadas quando uma assinatura é reinicializada automaticamente, conforme exigido por uma alteração na publicação.
Importante
Se você adicionar, remover ou alterar um filtro parametrizado, as alterações pendentes no Assinante não poderão ser carregadas no Publicador durante a reinicialização. Se você quiser carregar alterações pendentes, sincronize todas as assinaturas antes de alterar o filtro.
Para obter mais informações, consulte Criar uma publicação.
Para alterar a política de reinicialização de uma publicação de mesclagem existente
No Publicador da base de dados de publicação, execute sp_changemergepublication, especificando automatic_reinitialization_policy para @property e um dos seguintes valores para @value:
1 – as alterações são carregadas do Assinante antes de a assinatura ser reinicializada automaticamente, conforme exigido por uma alteração na publicação.
0 – as alterações no Assinante são descartadas quando uma assinatura é reinicializada automaticamente, conforme exigido por uma alteração na publicação.
Importante
Se você adicionar, remover ou alterar um filtro parametrizado, as alterações pendentes no Assinante não poderão ser carregadas no Publicador durante a reinicialização. Se você quiser carregar alterações pendentes, sincronize todas as assinaturas antes de alterar o filtro.
Para obter mais informações, consulte Exibir e modificar propriedades de publicação.
Usando Objetos de Gerenciamento de Replicação (RMO)
As assinaturas individuais podem ser marcadas para reinicialização com o objetivo de que, durante a próxima sincronização, um novo snapshot seja aplicado. As assinaturas podem ser reinicializadas programaticamente usando RMO (Replication Management Objects). As classes que você usa dependem do tipo de publicação à qual a assinatura pertence e do tipo de assinatura (ou seja, uma assinatura push ou pull).
Reinicializar uma assinatura pull para uma publicação transacional
Crie uma conexão com o Assinante usando a ServerConnection classe.
Crie uma instância da classe TransPullSubscription, e defina PublicationName, DatabaseName, PublisherName, PublicationDBName, e a conexão da etapa 1 para ConnectionContext.
Chame o método LoadProperties para obter as propriedades do objeto.
Observação
Se esse método retornar
false, as propriedades da assinatura na etapa 2 foram definidas incorretamente ou a assinatura pull não existe.Chame o método Reinitialize . Esse método marca a assinatura para reinicialização.
Sincronize a assinatura pull. Para obter mais informações, consulte Synchronize a Pull Subscription.
Para reinicializar uma assinatura push para uma publicação transacional
Crie uma conexão com o Publicador usando a classe ServerConnection .
Crie uma instância da classe TransSubscription, e defina PublicationName, DatabaseName, SubscriberName, SubscriptionDBName, e a conexão da etapa 1 para ConnectionContext.
Chame o método LoadProperties para obter as propriedades do objeto.
Observação
Se esse método retornar
false, as propriedades da assinatura na etapa 2 foram definidas incorretamente ou a assinatura push não existe.Chame o método Reinitialize . Esse método marca a assinatura para reinicialização.
Sincronize a assinatura push. Para obter mais informações, consulte Synchronize a Push Subscription.
Para reinicializar uma assinatura de pull para uma publicação de mesclagem
Crie uma conexão com o Assinante usando a ServerConnection classe.
Crie uma instância da classe MergePullSubscription, e defina PublicationName, DatabaseName, PublisherName, PublicationDBName e a conexão da etapa 1 para ConnectionContext.
Chame o método LoadProperties para obter as propriedades do objeto.
Observação
Se esse método retornar
false, as propriedades da assinatura na etapa 2 foram definidas incorretamente ou a assinatura pull não existe.Chame o método Reinitialize . Passe um valor de
truepara carregar as alterações no Assinante antes de reinicializar ou um valor defalsepara reinicializar e perder quaisquer alterações pendentes no Assinante. Esse método marca a assinatura para reinicialização.Observação
As alterações não poderão ser carregadas se a assinatura tiver expirado. Para obter mais informações, consulte Definir o período de expiração para assinaturas.
Sincronize a assinatura pull. Para obter mais informações, consulte Synchronize a Pull Subscription.
Para reinicializar uma assinatura push para uma publicação de mesclagem
Crie uma conexão com o Publicador usando a classe ServerConnection .
Crie uma instância da classe MergeSubscription, e defina PublicationName, DatabaseName, SubscriberName, SubscriptionDBName, e a conexão da etapa 1 para ConnectionContext.
Chame o método LoadProperties para obter as propriedades do objeto.
Observação
Se esse método retornar
false, as propriedades da assinatura na etapa 2 foram definidas incorretamente ou a assinatura push não existe.Chame o método Reinitialize . Passe um valor de
truepara carregar as alterações no Assinante antes da reinicialização ou um valor defalsepara reinicializar e perder as alterações pendentes no Assinante. Esse método marca a assinatura para reinicialização.Observação
As alterações não poderão ser carregadas se a assinatura tiver expirado. Para obter mais informações, consulte Definir o período de expiração para assinaturas.
Sincronize a assinatura push. Para obter mais informações, consulte Synchronize a Push Subscription.
Exemplos (RMO)
Este exemplo reinicializa uma assinatura pull para uma publicação transacional.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksProductTran";
String publicationDbName = "AdventureWorks2012";
String subscriptionDbName = "AdventureWorks2012Replica";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
TransPullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define subscription properties.
subscription = new TransPullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription and the job exists, mark the subscription
// for reinitialization and start the agent job.
if (subscription.LoadProperties() && subscription.AgentJobId != null)
{
subscription.Reinitialize();
subscription.SynchronizeWithJob();
}
else
{
// Do something here if the subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exists on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Do appropriate error handling here.
throw new ApplicationException("The subscription could not be reinitialized.", ex);
}
finally
{
conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As TransPullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define subscription properties.
subscription = New TransPullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription and the job exists, mark the subscription
' for reinitialization and start the agent job.
If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
subscription.Reinitialize()
subscription.SynchronizeWithJob()
Else
' Do something here if the subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exists on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Do appropriate error handling here.
Throw New ApplicationException("The subscription could not be reinitialized.", ex)
Finally
conn.Disconnect()
End Try
Este exemplo reinicializa uma assinatura pull para uma publicação de mesclagem depois de primeiro carregar as alterações pendentes no Assinante.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksSalesOrdersMerge";
String publicationDbName = "AdventureWorks2012";
String subscriptionDbName = "AdventureWorks2012Replica";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define subscription properties.
subscription = new MergePullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription and the job exists, mark the subscription
// for reinitialization after upload and start the agent job.
if (subscription.LoadProperties() && subscription.AgentJobId != null)
{
subscription.Reinitialize(true);
subscription.SynchronizeWithJob();
}
else
{
// Do something here if the subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exists on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Do appropriate error handling here.
throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define subscription properties.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription and the job exists, mark the subscription
' for reinitialization after upload and start the agent job.
If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
subscription.Reinitialize(True)
subscription.SynchronizeWithJob()
Else
' Do something here if the subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exists on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Do appropriate error handling here.
Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
conn.Disconnect()
End Try
Consulte Também
Reinicializar assinaturas
Conceitos de Objetos de Gerenciamento de Replicação
Práticas recomendadas de segurança de replicação