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.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Este tópico descreve como reinicializar uma subscrição no SQL Server utilizando SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO). As subscrições individuais podem ser marcadas para reinicialização, de modo a que um novo snapshot seja aplicado durante a próxima sincronização.
Observação
A Instância Gerenciada SQL do Azure pode ser um editor, distribuidor e assinante para replicação de instantâneo e transacional. Os bancos de dados no Banco de Dados SQL do Azure só podem ser assinantes por push para replicação de instantâneo e transacional. Para obter mais informações, consulte Replicação transacional com o Banco de Dados SQL do Azure e a Instância Gerenciada SQL do Azure.
Usando o SQL Server Management Studio
Reiniciar uma subscrição é um processo em duas fases:
Uma única assinatura ou todas as subscrições de uma publicação são marcadas para reinicialização. Marque as subscrições para reinicialização na caixa de diálogo Reinicializar Subscrição(s ), que está disponível na pasta Publicações Locais e na pasta Subscrições Locais no Microsoft SQL Server Management Studio. Pode também marcar as subscrições no separador Todas as Subscrições e no nó de publicações do Monitor de Replicação. Para informações sobre como iniciar o Monitor de Replicação, consulte Iniciar o Monitor de Replicação. Quando marca uma subscrição para reinicialização, tem as seguintes opções:
Utilize o snapshot atual
Selecione para aplicar a captura instantânea atual ao Assinante quando o Agente de Distribuição ou o Agente de Fusão forem executados novamente. Se não houver um snapshot válido disponível, esta opção não pode ser selecionada.Usar um novo snapshot
Selecione para reinicializar a subscrição com um novo snapshot. O snapshot só pode ser aplicado ao Subscritor depois de ter sido gerado pelo Snapshot Agent. Se o Snapshot Agent estiver configurado para funcionar num calendário, a subscrição só é reiniciada após a próxima execução agendada do Snapshot Agent. Selecione Gerar o novo snapshot agora para iniciar o Snapshot Agent imediatamente.Carregar alterações não sincronizadas antes da reinicialização
Apenas fusão de replicação. Selecione para carregar quaisquer alterações pendentes da base de dados de subscrição antes de os dados do assinante serem sobrescritos com um snapshot.Se adicionar, eliminar ou alterar um filtro parametrizado, as alterações pendentes no Assinante não podem ser carregadas para o Publisher durante a reinicialização. Se quiseres carregar alterações pendentes, sincroniza todas as subscrições antes de mudar o filtro.
Uma subscrição é reinicializada na próxima sincronização: o Agente de Distribuição (para replicação transacional) ou o Agente de Fusão (para replicação de fusão) aplica o snapshot mais recente a cada Assinante que tenha uma subscrição marcada para reinicialização. Para mais informações sobre a sincronização de subscrições, consulte Sincronizar uma Subscrição Push e Sincronizar uma Subscrição Pull.
Para assinalar uma única subscrição push ou pull para reinicialização no Management Studio (no Publisher)
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 .
Expande a publicação que tem a subscrição que queres reiniciar.
Clique com o botão direito na subscrição e depois clique em Reinicializar.
Na caixa de diálogo Reinicializar Subscrição(s ), selecione opções e depois clique em Marcar para Reinicialização.
Para assinalar uma subscrição de pull única para ser reinicializada no Management Studio (no Assinante)
Ligue-se ao Subscritor no Management Studio e expanda depois o nó do servidor.
Expanda a pasta Replicação e depois expanda a pasta Subscrições Locais .
Clique com o botão direito na subscrição e depois clique em Reinicializar.
Na caixa de diálogo de confirmação que é mostrada, clique em Sim.
Para assinalar todas as subscrições para reinicialização no Management Studio
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 com as subscrições que pretende reinicializar e depois clique em Reinicializar Todas as Subscrições.
Na caixa de diálogo Reinicializar Subscrição(s ), selecione opções e depois clique em Marcar para Reinicialização.
Para marcar uma única subscrição push ou pull para reinicialização no Replication Monitor
No Replication Monitor, expanda um grupo de Publishers no painel esquerdo, expanda um Publisher e depois clique numa publicação.
Clique no separador Todas as Subscrições .
Clique com o botão direito na subscrição que quer reinicializar e depois clique em Reinicializar Subscrição.
Na caixa de diálogo Reinicializar Subscrição(s ), selecione opções e depois clique em Marcar para Reinicialização.
Para assinalar todas as subscrições para reinicialização no Replication Monitor
No Replication Monitor, expande um grupo de Publishers no painel esquerdo e depois expande um Publisher.
Clique com o botão direito na publicação com as subscrições que pretende reinicializar e depois clique em Reinicializar Todas as Subscrições.
Na caixa de diálogo Reinicializar Subscrição(s ), selecione opções e depois clique em Marcar para Reinicialização.
Usando Transact-SQL
As subscrições podem ser reinicializadas programaticamente usando procedimentos armazenados de replicação. O procedimento armazenado utilizado depende do tipo de subscrição (push ou pull) e do tipo de publicação a que a subscrição pertence.
Para re-inicializar uma subscrição pull para uma publicação transacional
Na subscrição na base de dados, execute sp_reinitpullsubscription (Transact-SQL). Especifique @publisher, @publisher_db e @publication. Isto marca a subscrição para reinicialização quando o Agente de Distribuição for executado da próxima vez.
(Opcional) Inicie o Agente de Distribuição no Assinante para sincronizar a subscrição. Para mais informações, consulte Sincronizar uma Subscrição Pull.
Reiniciar uma subscrição push de uma publicação transacional
Na Editora, execute sp_reinitsubscription (Transact-SQL). Especifique @publication, @subscriber e @destination_db. Isto define a subscrição para reinicialização na próxima vez que o Agente de Distribuição for executado.
(Opcional) Inicie o Agente de Distribuição no distribuidor para sincronizar a subscrição. Para mais informações, consulte Sincronizar uma Subscrição Push.
Reiniciar uma subscrição pull numa publicação de fusão
No Assinante, execute na base de dados de subscrição o comando sp_reinitmergepullsubscription (Transact-SQL). Especifique @publisher, @publisher_db e @publication. Para carregar alterações do Assinante antes da reinicialização, especifique um valor true para @upload_first. Isto indica que a subscrição será reinicializada na próxima execução do Merge Agent.
Importante
Se adicionar, eliminar ou alterar um filtro parametrizado, as alterações pendentes no Assinante não podem ser carregadas para o Publisher durante a reinicialização. Se quiseres carregar alterações pendentes, sincroniza todas as subscrições antes de mudar o filtro.
(Opcional) Inicie o Merge Agent no Subscritor para sincronizar a subscrição. Para mais informações, consulte Sincronizar uma Subscrição Pull.
Reiniciar uma subscrição push a uma publicação de fusão
No Editor, execute sp_reinitmergesubscription (Transact-SQL). Especifique @publication, @subscriber e @subscriber_db. Para carregar alterações do Assinante antes da reinicialização, especifique o valor true para @upload_first. Isto marca a subscrição para reinicialização na próxima execução do Agente de Distribuição.
Importante
Se adicionar, eliminar ou alterar um filtro parametrizado, as alterações pendentes no Assinante não podem ser carregadas para o Publisher durante a reinicialização. Se quiseres carregar alterações pendentes, sincroniza todas as subscrições antes de mudar o filtro.
(Opcional) Inicie o Merge Agent no distribuidor para sincronizar a subscrição. Para mais informações, consulte Sincronizar uma Subscrição Push.
Para configurar a política de reinicialização ao criar uma nova publicação de fusão
No Publisher da base de dados de publicações, execute sp_addmergepublication, especificando um dos seguintes valores para @automatic_reinitialization_policy:
1 - as alterações são carregadas pelo Assinante antes de uma subscrição ser automaticamente reinicializada, conforme exigido por uma alteração na publicação.
0 - as alterações no Assinante são descartadas quando uma subscrição é automaticamente reiniciada, conforme exigido por uma alteração na publicação.
Importante
Se adicionar, eliminar ou alterar um filtro parametrizado, as alterações pendentes no Assinante não podem ser carregadas para o Publisher durante a reinicialização. Se quiseres carregar alterações pendentes, sincroniza todas as subscrições antes de mudar o filtro.
Para mais informações, consulte Criar uma Publicação.
Para alterar a política de reinicialização de uma publicação de fusão existente
No Publisher na base de dados de publicações, execute sp_changemergepublication, especificando automatic_reinitialization_policy para @property e um dos seguintes valores para @value:
1 - as alterações são carregadas pelo Assinante antes de uma subscrição ser automaticamente reinicializada, conforme exigido por uma alteração na publicação.
0 - as alterações no Assinante são descartadas quando uma subscrição é automaticamente reiniciada, conforme exigido por uma alteração na publicação.
Importante
Se adicionar, eliminar ou alterar um filtro parametrizado, as alterações pendentes no Assinante não podem ser carregadas para o Publisher durante a reinicialização. Se quiseres carregar alterações pendentes, sincroniza todas as subscrições antes de mudar o filtro.
Para mais informações, consulte Visualizar e Modificar Propriedades de Publicação.
Utilização de Objetos de Gestão de Replicação (RMO)
As subscrições individuais podem ser marcadas para reinicialização, de modo que, durante a próxima sincronização, seja aplicado um novo snapshot. As subscrições podem ser reinicializadas programaticamente utilizando Objetos de Gestão de Replicação (RMO). As classes que utiliza dependem do tipo de publicação a que a subscrição pertence e do tipo de subscrição (ou seja, uma subscrição do tipo push ou pull).
Para re-inicializar uma subscrição pull para uma publicação transacional
Crie uma ligação ao Assinante usando a ServerConnection classe.
Crie uma instância da TransPullSubscription classe e defina PublicationName, DatabaseName, PublisherName, PublicationDBName, e a ligação do passo 1 para ConnectionContext.
Chama o LoadProperties método para obter as propriedades do objeto.
Observação
Se este método devolver falso, ou as propriedades de subscrição no passo 2 foram definidas incorretamente ou a subscrição pull não existe.
Chame o método Reinitialize. Este método marca a subscrição para reinicialização.
Sincronizar a subscrição de pull. Para mais informações, consulte Sincronizar uma Subscrição Pull.
Reiniciar uma subscrição push de uma publicação transacional
Crie uma ligação ao Editor usando a ServerConnection classe.
Crie uma instância da TransSubscription classe e defina PublicationName, DatabaseName, SubscriberName, SubscriptionDBName, e a ligação do passo 1 para ConnectionContext.
Chama o LoadProperties método para obter as propriedades do objeto.
Observação
Se este método devolver false, ou as propriedades de subscrição no passo 2 foram definidas incorretamente ou a subscrição push não existe.
Chame o método Reinitialize. Este método marca a subscrição para reinicialização.
Sincronize a subscrição push. Para mais informações, consulte Sincronizar uma Subscrição Push.
Reiniciar uma subscrição pull numa publicação de fusão
Crie uma ligação ao Assinante usando a ServerConnection classe.
Crie uma instância da MergePullSubscription classe e defina PublicationName, DatabaseName, PublisherName, PublicationDBName, e a ligação do passo 1 para ConnectionContext.
Chama o LoadProperties método para obter as propriedades do objeto.
Observação
Se este método devolver falso, ou as propriedades de subscrição no passo 2 foram definidas incorretamente ou a subscrição pull não existe.
Chame o método Reinitialize. Passe um valor de true para carregar as alterações no Assinante antes de reinicializar, ou um valor de false para reinicializar e perder quaisquer alterações pendentes no Assinante. Este método assinala a subscrição para reinicialização.
Observação
As alterações não podem ser carregadas se a subscrição estiver expirada. Para mais informações, consulte Definir o Período de Validade para Subscrições.
Sincronizar a subscrição de pull. Para mais informações, consulte Sincronizar uma Subscrição Pull.
Reiniciar uma subscrição push a uma publicação de fusão
Crie uma ligação ao Editor usando a ServerConnection classe.
Crie uma instância da MergeSubscription classe e defina PublicationName, DatabaseName, SubscriberName, SubscriptionDBName, e a ligação do passo 1 para ConnectionContext.
Chama o LoadProperties método para obter as propriedades do objeto.
Observação
Se este método devolver false, ou as propriedades de subscrição no passo 2 foram definidas incorretamente ou a subscrição push não existe.
Chame o método Reinitialize. Passe um valor de true para carregar as alterações para o Assinante antes da reinicialização ou um valor de false para reinicializar e perderá quaisquer alterações pendentes no Assinante. Este método assinala a subscrição para reinicialização.
Observação
As alterações não podem ser carregadas se a subscrição estiver expirada. Para mais informações, consulte Definir o Período de Validade para Subscrições.
Sincroniza a subscrição push. Para mais informações, consulte Sincronizar uma Subscrição Push.
Exemplos (RMO)
Este exemplo reinicializa uma subscrição pull de uma publicação transacional.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksProductTran";
String publicationDbName = "AdventureWorks2022";
String subscriptionDbName = "AdventureWorks2022Replica";
// 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 = "AdventureWorks2022"
Dim subscriptionDbName As String = "AdventureWorks2022Replica"
' 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 subscrição pull para uma publicação de fusão após o primeiro carregamento das alterações pendentes no Assinante.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksSalesOrdersMerge";
String publicationDbName = "AdventureWorks2022";
String subscriptionDbName = "AdventureWorks2022Replica";
// 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 = "AdventureWorks2022"
Dim subscriptionDbName As String = "AdventureWorks2022Replica"
' 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