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 especificar agendas de sincronização no SQL Server utilizando o SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO). Quando cria uma subscrição, pode definir um calendário de sincronização que controla quando o agente de replicação da subscrição será executado. Se não especificar parâmetros de agendamento, a subscrição usará o horário predefinido.
As subscrições são sincronizadas pelo Agente de Distribuição (para replicação instantânea e transacional) ou pelo Agente de Fusão (para replicação de fusão). Os agentes podem funcionar de forma contínua, a pedido ou a funcionar com um horário.
Usando o SQL Server Management Studio
Especifique os horários de sincronização na página de Agendamento de Sincronização do Assistente de Nova Subscrição. Para mais informações sobre como aceder a este assistente, consulte Criar uma Subscrição Push e Criar uma Subscrição Pull.
Modificar os cronogramas de sincronização na caixa de diálogo Propriedades do Agendamento de Trabalhos, que está disponível na pasta Jobs no SQL Server Management Studio e nas janelas de detalhe do agente no Replication Monitor. Para obter informações sobre como iniciar o Replication Monitor, consulte Iniciar o Replication Monitor.
Se especificar agendamentos da pasta Jobs, use a tabela seguinte para determinar o nome da tarefa do agente.
| Agente | Nome do trabalho |
|---|---|
| Merge Agent para assinaturas pull | <Publicador-Base de Dados de Publicação-Publicação-Assinante-Base de Dados de Subscrição-inteiro><><><><><> |
| Merge Agent para assinaturas push | <Editor-BaseDeDadosDePublicação-Publicação-Subscritor-Inteiro><><><><> |
| Agente de distribuição para assinaturas push | <Editor<-<BaseDeDadosDePublicações>->Publicação>-<Subscritor>->inteiro<1 |
| Agente de distribuição para assinaturas de pull | <Publisher<-<PublicationDatabase>-<Publication>-<Subscriber>->SubscriptionDatabase>-<GUID>2 |
| Agente de Distribuição para assinaturas push a assinantes não SQL Server | <Editor-BaseDeDadosDePublicação-Publicação-Subscritor-Inteiro><><><><> |
1 Para subscrições por push de publicações Oracle, é <Publisher>-<Publisher> e não <Publisher<->PublicationDatabase>
2 Para subscrições pull de publicações Oracle, é <Publisher>-<DistributionDatabase> em vez de <Publisher>-<PublicationDatabase>
Para especificar os horários de sincronização
Na página SynchronizationSchedule do Assistente para Nova Subscrição, selecione um dos seguintes valores na lista pendente Agendamento do Agente para cada subscrição que estiver a criar:
Executar continuamente
Funciona apenas a pedido
<Define o horário...>
Se selecionar <Definir Agenda...>, especifique um horário na caixa de diálogo Propriedades do Agendamento de Trabalhos e depois clique em OK.
Conclua o assistente.
Para modificar um cronograma de sincronização para uma subscrição push no Replication Monitor
Expanda um grupo de Publishers no painel esquerdo do Replication Monitor, expanda um Publisher e depois clique numa publicação.
Clique no separador Todas as Subscrições .
Clique com o botão direito numa subscrição e depois clique em Ver Detalhes.
Na janela Subscription < SubscriptionName>, clique Ação e depois clique <AgentName> Job Properties.
Na página de Agendamentos da caixa de diálogo Propriedades do Trabalho - <Nome> do Trabalho, clique em Editar.
Na caixa de diálogo Propriedades de Agendamento de Trabalho , selecione um valor na lista suspensa de Tipo de Agendamento :
Para especificar que o agente deve ser executado continuamente, selecione Iniciar automaticamente quando o SQL Server Agent for iniciado.
Para especificar que o agente deve correr num calendário, selecione Recorrente.
Para especificar que o agente deve funcionar a pedido, selecione Uma Vez.
Se selecionar Recorrente, especifique um horário para o agente.
Selecione OK.
Para modificar um cronograma de sincronização para uma subscrição push no Management Studio
Ligue-se ao Distribuidor no Management Studio e depois expanda o nó do servidor.
Expande a pasta do Agente do SQL Server e depois expande a pasta Jobs .
Clique com o botão direito do rato na tarefa do Distribution Agent ou do Merge Agent associada à subscrição e, em seguida, clique em Propriedades.
Na página de Agendamentos da caixa de diálogo Propriedades do Trabalho - <Nome> do Trabalho, clique em Editar.
Na caixa de diálogo Propriedades de Agendamento de Trabalho , selecione um valor na lista suspensa de Tipo de Agendamento :
Para especificar que o agente deve ser executado continuamente, selecione Iniciar automaticamente quando o SQL Server Agent for iniciado.
Para especificar que o agente deve correr num calendário, selecione Recorrente.
Para especificar que o agente deve funcionar a pedido, selecione Uma Vez.
Se selecionar Recorrente, especifique um horário para o agente.
Selecione OK.
Modificar um calendário de sincronização para uma subscrição pull no Management Studio
Ligue-se ao Subscritor no Management Studio e expanda depois o nó do servidor.
Expande a pasta do Agente do SQL Server e depois expande a pasta Jobs .
Clique com o botão direito do rato na tarefa do Distribution Agent ou do Merge Agent associada à subscrição e, em seguida, clique em Propriedades.
Na página de Agendamentos da caixa de diálogo Propriedades do Trabalho - <Nome> do Trabalho, clique em Editar.
Na caixa de diálogo Propriedades de Agendamento de Trabalho , selecione um valor na lista suspensa de Tipo de Agendamento :
Para especificar que o agente deve ser executado continuamente, selecione Iniciar automaticamente quando o SQL Server Agent arranca.
Para especificar que o agente deve correr num calendário, selecione Recorrente.
Para especificar que o agente deve funcionar a pedido, selecione Uma Vez.
Se selecionar Recorrente, especifique um horário para o agente.
Selecione OK.
Usando Transact-SQL
Pode definir agendas de sincronização programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados que utiliza dependem do tipo de replicação e do tipo de subscrição (pull ou push).
Um horário é definido pelos seguintes parâmetros de agendamento, cujos comportamentos são herdados de sp_add_schedule (Transact-SQL):
@frequency_type - o tipo de frequência usada ao agendar o agente.
@frequency_interval - o dia da semana em que um agente foge.
@frequency_relative_interval - a semana de um determinado mês em que o agente está agendado para operar mensalmente.
@frequency_recurrence_factor - o número de unidades do tipo frequência que ocorrem entre sincronizações.
@frequency_subday - a unidade de frequência em que o agente funciona mais do que uma vez por dia.
@frequency_subday_interval - o número de unidades de frequência entre execuções quando o agente é executado mais de uma vez por dia.
@active_start_time_of_day - a hora mais cedo de um determinado dia em que uma execução de um agente tem início.
@active_end_time_of_day - a hora mais tardia, em determinado dia, em que uma execução do agente será iniciada.
@active_start_date - o primeiro dia em que o horário do agente estará em vigor.
@active_end_date - o último dia em que o horário do agente estará em vigor.
Definir o calendário de sincronização para uma subscrição pull a uma publicação transacional
Crie uma nova subscrição de solicitação para uma publicação transacional. Para mais informações, consulte Criar uma Subscrição Pull.
No Assinante, execute sp_addpullsubscription_agent (Transact-SQL). Especifique @publisher, @publisher_db, @publication e as credenciais Microsoft Windows sob as quais o Distribution Agent do assinante corre para @job_name e @password. Especifique os parâmetros de sincronização, detalhados acima, que definem o cronograma para o trabalho do Distribution Agent que sincroniza a subscrição.
Definir o calendário de sincronização para uma subscrição push a uma publicação transacional
Crie uma nova subscrição push para uma publicação transacional. Para mais informações, consulte Criar uma Subscrição Push.
No Assinante, execute sp_addpushsubscription_agent (Transact-SQL). Especifique @subscriber, @subscriber_db, @publication e as credenciais do Windows com as quais o Agente de Distribuição é executado no Assinante para @job_name e @password. Especifique os parâmetros de sincronização, detalhados acima, que definem o cronograma para o trabalho do Distribution Agent que sincroniza a subscrição.
Para definir o calendário de sincronização para uma subscrição pull a uma publicação de fusão
Crie uma nova subscrição pull para uma publicação de fusão. Para mais informações, consulte Criar uma Subscrição Pull.
No Assinante, execute sp_addmergepullsubscription_agent. Especifique @publisher, @publisher_db, @publication e as credenciais Windows sob as quais o Merge Agent do Assinante corre para @job_name e @password. Especifique os parâmetros de sincronização, detalhados acima, que definem o cronograma para o trabalho do Merge Agent que sincroniza a subscrição.
Definir o calendário de sincronização para uma subscrição push a uma publicação de fusão
Crie uma nova subscrição push para uma publicação de fusão. Para mais informações, consulte Criar uma Subscrição Push.
No Assinante, execute sp_addmergepushsubscription_agent. Especifique @subscriber, @subscriber_db, @publication e as credenciais de Windows sob as quais o Merge Agent do Assinante corre para @job_name e @password. Especifique os parâmetros de sincronização, detalhados acima, que definem o cronograma para o trabalho do Merge Agent que sincroniza a subscrição.
Utilização de Objetos de Gestão de Replicação (RMO)
A replicação utiliza o SQL Server Agent para agendar trabalhos para atividades que ocorrem periodicamente, como geração de snapshots e sincronização de subscrições. Pode usar os Objetos de Gestão de Replicação (RMO) programaticamente para especificar agendas para trabalhos de agentes de replicação.
Note
Quando crias uma subscrição e especificas um valor falso para CreateSyncAgentByDefault (o comportamento padrão para subscrições de pull), o job agente não é criado e as propriedades de agendamento são ignoradas. Neste caso, o calendário de sincronização deve ser determinado pela aplicação. Para mais informações, consulte Criar uma Subscrição Pull e Criar uma Subscrição Push.
Para definir o agendamento do agente de replicação ao criar uma subscrição push para uma publicação transacional
Crie uma instância da TransSubscription classe para a subscrição que está a criar. Para mais informações, consulte Criar uma Subscrição Push.
Antes de chamar Create, defina um ou mais dos seguintes campos da AgentSchedule propriedade:
FrequencyType - o tipo de frequência (como diária ou semanal) que utiliza ao agendar o agente.
FrequencyInterval - O dia da semana em que um agente corre.
FrequencyRelativeInterval - a semana de um determinado mês em que o agente está programado para executar mensalmente.
FrequencyRecurrenceFactor - o número de unidades do tipo frequência que ocorrem entre sincronizações.
FrequencySubDay - a unidade de frequência em que o agente funciona mais do que uma vez por dia.
FrequencySubDayInterval - o número de unidades de frequência entre execuções em que o agente funciona mais do que uma vez por dia.
ActiveStartTime - a hora mais cedo de um determinado dia em que uma corrida de agente começa.
ActiveEndTime - hora mais tardia num dado dia em que uma corrida de agente começa.
ActiveStartDate - Primeiro dia em que o calendário do agente está em vigor.
ActiveEndDate - Último dia em que o horário do agente está em vigor.
Note
Se não especificar uma destas propriedades, é definido um valor por defeito.
Chame o Create método para criar a subscrição.
Para definir o agendamento de um agente de replicação ao criar uma subscrição pull para uma publicação transacional
Crie uma instância da TransPullSubscription classe para a subscrição que está a criar. Para mais informações, consulte Criar uma Subscrição Pull.
Antes de chamar Create, defina um ou mais dos seguintes campos da AgentSchedule propriedade:
FrequencyType - o tipo de frequência (como diária ou semanal) que utiliza ao agendar o agente.
FrequencyInterval - O dia da semana em que um agente corre.
FrequencyRelativeInterval - a semana de um determinado mês em que o agente está programado para publicar mensalmente.
FrequencyRecurrenceFactor - o número de unidades do tipo frequência que ocorrem entre sincronizações.
FrequencySubDay - a unidade de frequência em que o agente funciona mais do que uma vez por dia.
FrequencySubDayInterval - o número de unidades de frequência entre execuções em que o agente funciona mais do que uma vez por dia.
ActiveStartTime - a hora mais cedo de um determinado dia em que uma corrida de agente começa.
ActiveEndTime - hora mais tardia num dado dia em que uma corrida de agente começa.
ActiveStartDate - Primeiro dia em que o calendário do agente está em vigor.
ActiveEndDate - Último dia em que o horário do agente está em vigor.
Note
Se não especificar uma destas propriedades, é definido um valor por defeito.
Chame o Create método para criar a subscrição.
Para definir um cronograma de agente de replicação quando cria uma subscrição pull para uma publicação de fusão
Crie uma instância da MergePullSubscription classe para a subscrição que está a criar. Para mais informações, consulte Criar uma Subscrição Pull.
Antes de chamar Create, defina um ou mais dos seguintes campos da AgentSchedule propriedade:
FrequencyType - o tipo de frequência (como diária ou semanal) que utiliza ao agendar o agente.
FrequencyInterval - O dia da semana em que um agente corre.
FrequencyRelativeInterval - a semana de um determinado mês em que o agente está programado para executar mensalmente.
FrequencyRecurrenceFactor - o número de unidades do tipo frequência que ocorrem entre sincronizações.
FrequencySubDay - a unidade de frequência em que o agente funciona mais do que uma vez por dia.
FrequencySubDayInterval - o número de unidades de frequência entre execuções em que o agente funciona mais do que uma vez por dia.
ActiveStartTime - a hora mais cedo de um determinado dia em que uma corrida de agente começa.
ActiveEndTime - hora mais tardia num dado dia em que uma corrida de agente começa.
ActiveStartDate - Primeiro dia em que o calendário do agente está em vigor.
ActiveEndDate - Último dia em que o horário do agente está em vigor.
Note
Se não especificar uma destas propriedades, é definido um valor por defeito.
Chame o Create método para criar a subscrição.
Para definir um cronograma de agente de replicação quando cria uma subscrição push para uma publicação de fusão
Crie uma instância da MergeSubscription classe para a subscrição que está a criar. Para mais informações, consulte Criar uma Subscrição Push.
Antes de chamar Create, defina um ou mais dos seguintes campos da AgentSchedule propriedade:
FrequencyType - o tipo de frequência (como diária ou semanal) que utiliza ao agendar o agente.
FrequencyInterval - O dia da semana em que um agente corre.
FrequencyRelativeInterval - a semana de um determinado mês em que o agente está agendado para executar mensalmente.
FrequencyRecurrenceFactor - o número de unidades do tipo frequência que ocorrem entre sincronizações.
FrequencySubDay - a unidade de frequência em que o agente funciona mais do que uma vez por dia.
FrequencySubDayInterval - o número de unidades de frequência entre execuções em que o agente funciona mais do que uma vez por dia.
ActiveStartTime - a hora mais cedo de um determinado dia em que uma corrida de agente começa.
ActiveEndTime - hora mais tardia num dado dia em que uma corrida de agente começa.
ActiveStartDate - Primeiro dia em que o calendário do agente está em vigor.
ActiveEndDate - Último dia em que o horário do agente está em vigor.
Note
Se não especificar uma destas propriedades, é definido um valor por defeito.
Chame o Create método para criar a subscrição.
Exemplo (RMO)
Este exemplo cria uma subscrição push para uma publicação de fusão e especifica o calendário em que a subscrição é sincronizada.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
string hostname = @"adventure-works\garrett1";
//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergeSubscription subscription;
try
{
// Connect to the Publisher.
conn.Connect();
// Ensure that the publication exists and that
// it supports push subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = conn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPush;
}
// Define the push subscription.
subscription = new MergeSubscription();
subscription.ConnectionContext = conn;
subscription.SubscriberName = subscriberName;
subscription.PublicationName = publicationName;
subscription.DatabaseName = publicationDbName;
subscription.SubscriptionDBName = subscriptionDbName;
subscription.HostName = hostname;
// Set a schedule to synchronize the subscription every 2 hours
// during weekdays from 6am to 10pm.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
subscription.AgentSchedule.FrequencySubDayInterval = 2;
subscription.AgentSchedule.ActiveStartDate = 20051108;
subscription.AgentSchedule.ActiveEndDate = 20071231;
subscription.AgentSchedule.ActiveStartTime = 060000;
subscription.AgentSchedule.ActiveEndTime = 100000;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Create the push subscription.
subscription.Create();
}
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));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
conn.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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
Dim hostname As String = "adventure-works\garrett1"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription
Try
' Connect to the Publisher.
conn.Connect()
' Ensure that the publication exists and that
' it supports push subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = conn
If publication.IsExistingObject Then
If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPush
End If
' Define the push subscription.
subscription = New MergeSubscription()
subscription.ConnectionContext = conn
subscription.SubscriberName = subscriberName
subscription.PublicationName = publicationName
subscription.DatabaseName = publicationDbName
subscription.SubscriptionDBName = subscriptionDbName
subscription.HostName = hostname
' Set a schedule to synchronize the subscription every 2 hours
' during weekdays from 6am to 10pm.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
subscription.AgentSchedule.FrequencySubDayInterval = 2
subscription.AgentSchedule.ActiveStartDate = 20051108
subscription.AgentSchedule.ActiveEndDate = 20071231
subscription.AgentSchedule.ActiveStartTime = 60000
subscription.AgentSchedule.ActiveEndTime = 100000
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Create the push subscription.
subscription.Create()
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
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
conn.Disconnect()
End Try