Especificar agendas de sincronização

Aplica-se a: SQL ServerAzure 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

  1. 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...>

  2. Se selecionar <Definir Agenda...>, especifique um horário na caixa de diálogo Propriedades do Agendamento de Trabalhos e depois clique em OK.

  3. Conclua o assistente.

Para modificar um cronograma de sincronização para uma subscrição push no Replication Monitor

  1. Expanda um grupo de Publishers no painel esquerdo do Replication Monitor, expanda um Publisher e depois clique numa publicação.

  2. Clique no separador Todas as Subscrições .

  3. Clique com o botão direito numa subscrição e depois clique em Ver Detalhes.

  4. Na janela Subscription < SubscriptionName>, clique Ação e depois clique <AgentName> Job Properties.

  5. Na página de Agendamentos da caixa de diálogo Propriedades do Trabalho - <Nome> do Trabalho, clique em Editar.

  6. 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.

  7. Se selecionar Recorrente, especifique um horário para o agente.

  8. Selecione OK.

Para modificar um cronograma de sincronização para uma subscrição push no Management Studio

  1. Ligue-se ao Distribuidor no Management Studio e depois expanda o nó do servidor.

  2. Expande a pasta do Agente do SQL Server e depois expande a pasta Jobs .

  3. 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.

  4. Na página de Agendamentos da caixa de diálogo Propriedades do Trabalho - <Nome> do Trabalho, clique em Editar.

  5. 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.

  6. Se selecionar Recorrente, especifique um horário para o agente.

  7. Selecione OK.

Modificar um calendário de sincronização para uma subscrição pull no Management Studio

  1. Ligue-se ao Subscritor no Management Studio e expanda depois o nó do servidor.

  2. Expande a pasta do Agente do SQL Server e depois expande a pasta Jobs .

  3. 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.

  4. Na página de Agendamentos da caixa de diálogo Propriedades do Trabalho - <Nome> do Trabalho, clique em Editar.

  5. 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.

  6. Se selecionar Recorrente, especifique um horário para o agente.

  7. 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

  1. Crie uma nova subscrição de solicitação para uma publicação transacional. Para mais informações, consulte Criar uma Subscrição Pull.

  2. 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

  1. Crie uma nova subscrição push para uma publicação transacional. Para mais informações, consulte Criar uma Subscrição Push.

  2. 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

  1. Crie uma nova subscrição pull para uma publicação de fusão. Para mais informações, consulte Criar uma Subscrição Pull.

  2. 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

  1. Crie uma nova subscrição push para uma publicação de fusão. Para mais informações, consulte Criar uma Subscrição Push.

  2. 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

  1. 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.

  2. 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.

  3. 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

  1. 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.

  2. 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.

  3. 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

  1. 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.

  2. 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.

  3. 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

  1. 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.

  2. 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.

  3. 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