Especificar agendas de sincronização

Aplica-se a: Instância Gerenciada de SQL do Azure SQL Server (todas as versões com suporte)

Este tópico descreve como especificar agendamentos de sincronização em SQL Server usando SQL Server Management Studio, Transact-SQL ou RMO (Replication Management Objects). Quando criar uma assinatura, você pode definir uma agenda de sincronização que controla quando o agente de replicação para a assinatura executará. Se você não especificar os parâmetros de programação, a assinatura usará a agenda padrão.

Assinaturas são sincronizadas pelo Agente de Distribuição (para replicação transacional e de instantâneo) ou pelo Agente de Mesclagem (para replicação de mesclagem). Os agentes podem ser executados continuamente, sob demanda ou em um agendamento.

Neste tópico

Como usar o SQL Server Management Studio.

Especifique agendas de sincronização na página Agenda de Sincronização do Assistente para Nova Assinatura. Para mais informações sobre como acessar esse assistente, consulte Create a Push Subscription e Create a Pull Subscription.

Modifique agendas de sincronização na caixa de diálogo Propriedades da Agenda de Trabalho, que se encontra disponível na pasta Trabalhos no SQL Server Management Studio e nas janelas de detalhes do agente no Replication Monitor. Para obter informações sobre como iniciar o Replication Monitor, consulte Start the Replication Monitor (Iniciar o Replication Monitor).

Se você especificar agendas da pasta Jobs use a tabela a seguir para determinar o nome do trabalho do agente.

Agente Nome do trabalho
Merge Agent para assinaturas pull <Publisher-PublicationDatabase-Publication-Subscriber-SubscriptionDatabase-integer><><><><><>
Merge Agent para assinaturas push <Publisher-PublicationDatabase-Publication-Subscriber-integer><><><><>
Distribution Agent para assinaturas push <Publisher-PublicationDatabase-Publication-Subscriber-integer><>><<><>1
Distribution Agent para assinaturas pull <Publisher-PublicationDatabase-Publication-Subscriber-SubscriptionDatabase-GUID><<>><<>><>2
Distribution Agent para assinaturas push para Assinantes não SQL Server <Publisher-PublicationDatabase-Publication-Subscriber-integer><><><><>

1 Para assinaturas push para publicações oracle, é <Publisher-Publisher><> em vez de <Publisher-PublicationDatabase><>

2 Para assinaturas pull para publicações oracle, é <Publisher-DistributionDatabase><> em vez de <Publisher-PublicationDatabase><>

Para especificar agendas de sincronização

  1. Na página SynchronizationSchedule do Assistente para Nova Assinatura, selecione um dos seguintes valores da lista suspensa Agenda do Agente para cada assinatura que está sendo criada:

    • Executar continuamente

    • Executar somente sob demanda

    • <Definir Agenda...>

  2. Se você selecionar <Definir Agenda...>, especifique um agendamento na caixa de diálogo Propriedades de Agendamento de Trabalho e clique em OK.

  3. Conclua o assistente.

Para modificar uma agenda de sincronização para uma assinatura push no Replication Monitor

  1. Expanda um Grupo do publicador no painel esquerdo do Replication Monitor, expanda um Publicador e, em seguida, clique em uma publicação.

  2. Clique na guia Todas as Assinaturas .

  3. Clique com o botão direito do mouse em uma assinatura e clique em Exibir Detalhes.

  4. Na janela SubscriptionName> da Assinatura<, clique em Ação e, em seguida, clique <em Propriedades do Trabalho agentname>.

  5. Na página Agendas da caixa de diálogo Propriedades do Trabalho – <JobName> , clique em Editar.

  6. Na caixa de diálogo Propriedades da Agenda de Trabalho , selecione um valor da lista suspensa Tipo de Agenda :

    • Para especificar que o agente deve executar continuamente, selecione Iniciar automaticamente quando o SQL Server Agent for iniciado.

    • Para especificar que o agente deve ser executado em uma agenda, selecione Recorrente.

    • Para especificar que o agente deve ser executado sob demanda, selecione Uma vez.

  7. Se você selecionar Recorrente, especifique uma agenda para o agente.

  8. Selecione OK.

Para modificar uma agenda de sincronização para uma assinatura push no Management Studio

  1. Conecte-se ao Distribuidor no Management Studioe, em seguida, expanda o nó de servidor.

  2. Expanda a pasta SQL Server Agent e, em seguida, a pasta Trabalhos .

  3. Clique com o botão direito do mouse no trabalho para o Distribution Agent ou Merge Agent associado à assinatura e, então, clique em Propriedades.

  4. Na página Agendas da caixa de diálogo Propriedades do Trabalho – <JobName> , clique em Editar.

  5. Na caixa de diálogo Propriedades da Agenda de Trabalho , selecione um valor da lista suspensa Tipo de Agenda :

    • Para especificar que o agente deve executar continuamente, selecione Iniciar automaticamente quando o SQL Server Agent for iniciado.

    • Para especificar que o agente deve ser executado em uma agenda, selecione Recorrente.

    • Para especificar que o agente deve ser executado sob demanda, selecione Uma vez.

  6. Se você selecionar Recorrente, especifique uma agenda para o agente.

  7. Selecione OK.

Para modificar uma agenda de sincronização para uma assinatura pull no Management Studio

  1. Conecte-se ao Assinante no Management Studioe expanda o nó do servidor.

  2. Expanda a pasta SQL Server Agent e, em seguida, a pasta Trabalhos .

  3. Clique com o botão direito do mouse no trabalho para o Distribution Agent ou Merge Agent associado à assinatura e, então, clique em Propriedades.

  4. Na página Agendas da caixa de diálogo Propriedades do Trabalho – <JobName> , clique em Editar.

  5. Na caixa de diálogo Propriedades da Agenda de Trabalho , selecione um valor da lista suspensa Tipo de Agenda :

    • Para especificar que o agente deve executar continuamente, selecione Iniciar automaticamente quando o SQL Server Agent for iniciado.

    • Para especificar que o agente deve ser executado em uma agenda, selecione Recorrente.

    • Para especificar que o agente deve ser executado sob demanda, selecione Uma vez.

  6. Se você selecionar Recorrente, especifique uma agenda para o agente.

  7. Selecione OK.

Usando o Transact-SQL

Você pode definir agendas de sincronização de forma programada, usando os procedimentos de replicação armazenados. Os procedimentos armazenados que você usar dependem do tipo de replicação e do tipo de assinatura (de recepção ou push).

Um agendamento é definido pelos seguintes parâmetros de agendamento, dos quais os comportamentos são herdados de sp_add_schedule (Transact-SQL):

  • @frequency_type - o tipo de frequência usado ao agendar o agente.

  • @frequency_interval - o dia da semana em que um agente é executado.

  • @frequency_relative_interval - a semana de um determinado mês em que o agente está agendado para ser executado 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 quando o agente é executado com mais frequência do que uma vez por dia.

  • @frequency_subday_interval - o número de unidades de frequência entre as execuções quando o agente é executado com mais frequência do que uma vez por dia.

  • @active_start_time_of_day - a primeira vez em um determinado dia em que uma execução de agente será iniciada.

  • @active_end_time_of_day - a última vez em um determinado dia em que uma execução de agente será iniciada.

  • @active_start_date - o primeiro dia em que a agenda do agente estará em vigor.

  • @active_end_date - o último dia em que a agenda do agente estará em vigor.

Para definir a agenda de sincronização para uma assinatura pull em uma publicação transacional

  1. Crie uma assinatura pull nova para uma publicação transacional. Para obter mais informações, consulte Create a Pull Subscription.

  2. No Assinante, execute sp_addpullsubscription_agent (Transact-SQL). Especifique @publisher, @publisher_db, @publication e as credenciais do Microsoft Windows nas quais o Agente de Distribuição no Assinante é executado para @job_name e @password. Especifique os parâmetros de sincronização, detalhados acima, que definem a agenda para o trabalho do Distribution Agent que sincroniza a assinatura.

Para definir a agenda de sincronização para uma assinatura push em uma publicação transacional

  1. Crie uma assinatura push nova para uma publicação transacional. Para obter mais informações, consulte Create a Push Subscription.

  2. No Assinante, execute sp_addpushsubscription_agent (Transact-SQL). Especifique @subscriber, @subscriber_db, @publication e as credenciais do Windows nas quais o Agente de Distribuição no Assinante é executado para @job_name e @password. Especifique os parâmetros de sincronização, detalhados acima, que definem a agenda para o trabalho do Distribution Agent que sincroniza a assinatura.

Para definir a agenda de sincronização para uma assinatura pull em uma publicação de mesclagem

  1. Crie uma assinatura pull nova para uma publicação de mesclagem. Para obter mais informações, consulte Create a Pull Subscription.

  2. No Assinante, execute o sp_addmergepullsubscription_agent. Especifique @publisher, @publisher_db, @publication e as credenciais do Windows nas quais o Agente de Mesclagem no Assinante é executado para @job_name e @password. Especifique os parâmetros de sincronização, detalhados acima, que definem a agenda para o trabalho do Agente de Mesclagem que sincroniza a assinatura.

Para definir a agenda de sincronização para uma assinatura push em uma publicação de mesclagem

  1. Crie uma assinatura push nova para uma publicação de mesclagem. Para obter mais informações, consulte Create a Push Subscription.

  2. No Assinante, execute o sp_addmergepushsubscription_agent. Especifique @subscriber, @subscriber_db, @publication e as credenciais do Windows nas quais o Agente de Mesclagem no Assinante é executado para @job_name e @password. Especifique os parâmetros de sincronização, detalhados acima, que definem a agenda para o trabalho do Agente de Mesclagem que sincroniza a assinatura.

Usando o RMO (Replication Management Objects)

A replicação usa o SQL Server Agent para agendar trabalhos para atividades que ocorrem periodicamente, como geração de instantâneo e sincronização de assinatura. Use programaticamente os RMO (Replication Management Objects) para especificar agendamentos de trabalhos de agente de replicação.

Observação

Quando uma subscrição é criada e um valor false é especificado para CreateSyncAgentByDefault (comportamento padrão para inscrições pull), o trabalho do agente não é criado e as propriedades agendadas são ignoradas. Nesse caso, o agendamento de sincronização precisará ser determinado pelo aplicativo. Para obter mais informações, consulte Create a Pull Subscription e Create a Push Subscription.

Para definir um agendamento de agente de replicação quando é criada uma assinatura push para uma publicação transacional

  1. Crie uma instância da classe TransSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Create a Push Subscription.

  2. Antes de chamar Create, defina um ou mais dos campos seguintes da propriedade AgentSchedule :

    • FrequencyType - o tipo de frequência (como diária ou semanalmente) usado para agendar o agente.

    • FrequencyInterval - dia da semana em que o agente é executado.

    • FrequencyRelativeInterval - semana de um determinado mês em que o agente é agendado para ser executado mensalmente.

    • FrequencyRecurrenceFactor - número de unidades do tipo-frequência que ocorrem entre sincronizações.

    • FrequencySubDay - unidade de frequência em que o agente é executado com frequência maior que uma vez ao dia.

    • FrequencySubDayInterval - número de unidades de frequência entre execuções quando o agente é executado com frequência maior que uma vez ao dia.

    • ActiveStartTime - hora anterior em determinado dia em que tem início a execução do agente.

    • ActiveEndTime - hora posterior em um determinado dia em que tem início a execução do agente.

    • ActiveStartDate - primeiro dia em que o agendamento do agente entra em vigor.

    • ActiveEndDate - último dia de vigência do agendamento.

    Observação

    Se uma dessas propriedades não for especificada, um valor padrão será determinado.

  3. Chame o método Create para criar a assinatura.

Para definir um agendamento de agente de replicação quando é criada uma assinatura pull para uma publicação transacional

  1. Crie uma instância da classe TransPullSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Create a Pull Subscription.

  2. Antes de chamar Create, defina um ou mais dos campos seguintes da propriedade AgentSchedule :

    • FrequencyType - tipo de frequência (por exemplo, diária ou semanal) usada durante o agendamento do agente.

    • FrequencyInterval - dia da semana em que o agente é executado.

    • FrequencyRelativeInterval - semana de um determinado mês em que o agente é agendado para ser executado mensalmente.

    • FrequencyRecurrenceFactor - número de unidades do tipo-frequência que ocorrem entre sincronizações.

    • FrequencySubDay - unidade de frequência em que o agente é executado com frequência maior que uma vez ao dia.

    • FrequencySubDayInterval - número de unidades de frequência entre execuções quando o agente é executado com frequência maior que uma vez ao dia.

    • ActiveStartTime - hora anterior em determinado dia em que tem início a execução do agente.

    • ActiveEndTime - hora posterior em um determinado dia em que tem início a execução do agente.

    • ActiveStartDate - primeiro dia em que o agendamento do agente entra em vigor.

    • ActiveEndDate - último dia de vigência do agendamento.

    Observação

    Se uma dessas propriedades não for especificada, um valor padrão será determinado.

  3. Chame o método Create para criar a assinatura.

Para definir um agendamento de agente de replicação quando uma assinatura pull é criada para uma publicação de mesclagem

  1. Crie uma instância da classe MergePullSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Create a Pull Subscription.

  2. Antes de chamar Create, defina um ou mais dos campos seguintes da propriedade AgentSchedule :

    • FrequencyType - tipo de frequência (por exemplo, diária ou semanal) usada durante o agendamento do agente.

    • FrequencyInterval - dia da semana em que o agente é executado.

    • FrequencyRelativeInterval - semana de um determinado mês em que o agente é agendado para ser executado mensalmente.

    • FrequencyRecurrenceFactor - número de unidades do tipo-frequência que ocorrem entre sincronizações.

    • FrequencySubDay - unidade de frequência em que o agente é executado com frequência maior que uma vez ao dia.

    • FrequencySubDayInterval - número de unidades de frequência entre execuções quando o agente é executado com frequência maior que uma vez ao dia.

    • ActiveStartTime - hora anterior em determinado dia em que tem início a execução do agente.

    • ActiveEndTime - hora posterior em um determinado dia em que tem início a execução do agente.

    • ActiveStartDate - primeiro dia em que o agendamento do agente entra em vigor.

    • ActiveEndDate - último dia de vigência do agendamento.

    Observação

    Se uma dessas propriedades não for especificada, um valor padrão será determinado.

  3. Chame o método Create para criar a assinatura.

Para definir um agendamento de agente de replicação quando uma assinatura push é criada para uma publicação de mesclagem

  1. Crie uma instância da classe MergeSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Create a Push Subscription.

  2. Antes de chamar Create, defina um ou mais dos campos seguintes da propriedade AgentSchedule :

    • FrequencyType - tipo de frequência (por exemplo, diária ou semanal) usada durante o agendamento do agente.

    • FrequencyInterval - dia da semana em que o agente é executado.

    • FrequencyRelativeInterval - semana de um determinado mês em que o agente é agendado para ser executado mensalmente.

    • FrequencyRecurrenceFactor - número de unidades do tipo-frequência que ocorrem entre sincronizações.

    • FrequencySubDay - unidade de frequência em que o agente é executado com frequência maior que uma vez ao dia.

    • FrequencySubDayInterval - número de unidades de frequência entre execuções quando o agente é executado com frequência maior que uma vez ao dia.

    • ActiveStartTime - hora anterior em determinado dia em que tem início a execução do agente.

    • ActiveEndTime - hora posterior em um determinado dia em que tem início a execução do agente.

    • ActiveStartDate - primeiro dia em que o agendamento do agente entra em vigor.

    • ActiveEndDate - último dia de vigência do agendamento.

    Observação

    Se uma dessas propriedades não for especificada, um valor padrão será determinado.

  3. Chame o método Create para criar a assinatura.

Exemplo (RMO)

Esse exemplo cria uma assinatura push para uma publicação de mesclagem e especifica o agendamento em que a assinatura é sincronizada.

// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
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 = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
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

Consulte Também

Replication Security Best Practices
Assinar publicações
Sincronizar uma assinatura push
Sincronizar uma assinatura pull
Sincronizar dados