Especificar agendas de sincronização
Este tópico descreve como especificar agendas de sincronização no SQL Server 2012 usando o SQL Server Management Studio, o Transact-SQL ou o 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
Para especificar agendas de sincronização, usando:
SQL Server Management Studio
Transact-SQL
RMO (Replication Management Objects)
Usando 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 Criar uma assinatura push e Criar uma assinatura pull.
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 Iniciar o Replication Monitor.
Se você especificar agendas da pastaJobs use a tabela a seguir para determinar o nome do trabalho do agente.
Agent |
Nome do trabalho |
---|---|
Agente de Mesclagem para assinaturas pull |
<Publicador>-<Banco_de_Dados_de_Publicação>-<Publicação>-<Assinante>-<Banco_de_Dados_de_Assinatura>-<inteiro> |
Agente de Mesclagem para assinaturas push |
<Publicador>-<Banco_de_Dados_de_Publicação>-<Publicação>-<Assinante>-<inteiro> |
Agente de Distribuição para assinaturas push |
<Publicador>-<Banco_de_Dados_de_Publicação>-<Publicação>-<Assinante>-<inteiro>1 |
Agente de Distribuição para assinaturas pull |
<Publicador>-<Banco_de_Dados_de_Publicação>-<Publicação>-<Assinante>-<Banco_de_Dados_de_Assinatura>-<GUID>2 |
Agente de Distribuição para assinaturas push para Assinantes não SQL Server |
<Publicador>-<Banco_de_Dados_de_Publicação>-<Publicação>-<Assinante>-<inteiro> |
1 Para assinaturas push para publicações Oracle, <Publicador>-<Publicador> substitui <Publicador>-<Banco_de_Dados_de_Publicação>
2 Para assinaturas pull para publicações Oracle, <Publicador>-<Banco_de_Dados_de_Distribuição> substitui <Publicador>-<Banco_de_Dados_de_Publicação>
Para especificar agendas de sincronização
Na página Agenda de Sincronização do Assistente para Nova Assinatura, selecione um dos seguintes valores da lista suspensa Agenda do Agente para cada assinatura que estiver criando:
Executar continuamente
Executar somente sob demanda
<Definir Agendamento....>
Se você selecionar <Definir Agendamento...>, especifique uma agenda na caixa de diálogo Propriedades da Agenda de Trabalho e, então, clique emOK.
Conclua o assistente.
Para modificar uma agenda de sincronização para uma assinatura push no Replication Monitor
Expanda um Grupo do publicador no painel esquerdo do Replication Monitor, expanda um Publicador e, em seguida, clique em uma publicação.
Clique na guia Todas as Assinaturas.
Clique com o botão direito do mouse em uma assinatura e clique em Exibir Detalhes.
Na janela Assinatura < Nome_da_Assinatura>, clique em Ação e em <Nome_do_Agente> Propriedades do Trabalho.
Na página Agendas da caixa de diálogo Propriedades do Trabalho - <Nome_do_Trabalho>, clique em Editar.
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.
Se você selecionar Recorrente, especifique uma agenda para o agente.
Clique em OK.
Para modificar uma agenda de sincronização para uma assinatura push no Management Studio
Conecte-se ao Distribuidor no Management Studio e, em seguida, expanda o nó do servidor.
Expanda a pasta SQL Server Agent e, em seguida, a pasta Trabalhos.
Clique com o botão direito do mouse no trabalho para o Agente de Distribuição ou Agente de Mesclagem associado à assinatura e, então, clique em Propriedades.
Na página Agendas da caixa de diálogo Propriedades do Trabalho - <Nome_do_Trabalho>, clique em Editar.
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.
Se você selecionar Recorrente, especifique uma agenda para o agente.
Clique em OK.
Para modificar uma agenda de sincronização para uma assinatura pull no Management Studio
Conecte-se ao Assinante no Management Studio e expanda o nó do servidor.
Expanda a pasta SQL Server Agent e, em seguida, a pasta Trabalhos.
Clique com o botão direito do mouse no trabalho para o Agente de Distribuição ou Agente de Mesclagem associado à assinatura e, então, clique em Propriedades.
Na página Agendas da caixa de diálogo Propriedades do Trabalho - <Nome_do_Trabalho>, clique em Editar.
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.
Se você selecionar Recorrente, especifique uma agenda para o agente.
Clique em OK.
[Top]
Usando 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).
Uma agenda é definida pelos seguintes parâmetros de programação, os comportamentos dos quais são herdados do sp_add_schedule (Transact-SQL):
@frequency_type - o tipo de frequência usado ao programar o agente.
@frequency_interval - o dia da semana em que o agente executa.
@frequency_relative_interval - a semana de um determinado mês quando o agente é programado para executar mensalmente.
@frequency_recurrence_factor - o número de unidades tipo frequência que ocorrem entre as sincronizações.
@frequency_subday - a unidade de frequência quando o agente executa mais frequentemente do que uma vez por dia.
@frequency_subday_interval - o número de unidades de frequência entre execuções quando o agente executa mais frequentemente do que uma vez por dia.
@active_start_time_of_day - o horário mais cedo em um determinado dia em que uma execução de agente se iniciará.
@active_end_time_of_day - o horário mais tarde em um determinado dia em que uma execução de agente se iniciará.
@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
Crie uma assinatura pull nova para uma publicação transacional. Para obter mais informações, consulte Criar uma assinatura pull.
No Assinante, execute sp_addpullsubscription_agent (Transact-SQL). Especifique o @publisher, o @publisher_db, a @publication e as credenciais do Microsoft Windows sob as quais o Agente de Distribuição no Assinante executa o @job_name e a @password. Especifique os parâmetros de sincronização, detalhados acima, que definem a agenda para o trabalho do Agente de Distribuição que sincroniza a assinatura.
Para definir a agenda de sincronização para uma assinatura push em uma publicação transacional
Crie uma assinatura push nova para uma publicação transacional. Para obter mais informações, consulte Criar uma assinatura push.
No Assinante, execute o sp_addpushsubscription_agent (Transact-SQL). Especifique o @subscriber, o @subscriber_db, a @publication e as credenciais do Windows sob as quais o Agente de Distribuição no Assinante executa o @job_name e a @password. Especifique os parâmetros de sincronização, detalhados acima, que definem a agenda para o trabalho do Agente de Distribuição que sincroniza a assinatura.
Para definir a agenda de sincronização para uma assinatura pull em uma publicação de mesclagem
Crie uma assinatura pull nova para uma publicação de mesclagem. Para obter mais informações, consulte Criar uma assinatura pull.
No Assinante, execute o sp_addmergepullsubscription_agent. Especifique o @publisher, o @publisher_db, a @publication e as credenciais do Windows sob as quais o Agente de Mesclagem no Assinante executa o @job_name e a @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
Crie uma assinatura push nova para uma publicação de mesclagem. Para obter mais informações, consulte Criar uma assinatura push.
No Assinante, execute o sp_addmergepushsubscription_agent. Especifique o @subscriber, o @subscriber_db, a @publication e as credenciais do Windows sob as quais o Agente de Mesclagem no Assinante executa o @job_name e a @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.
[Top]
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 Criar uma assinatura pull e Criar uma assinatura push. |
Para definir um agendamento de agente de replicação quando é criada uma assinatura push para uma publicação transacional
Crie uma instância da classe TransSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Criar uma assinatura push.
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.
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
Crie uma instância da classe TransPullSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Criar uma assinatura pull.
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.
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
Crie uma instância da classe MergePullSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Criar uma assinatura pull.
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.
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
Crie uma instância da classe MergeSubscription para a assinatura que está sendo criada. Para obter mais informações, consulte Criar uma assinatura push.
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.
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(subscriberName);
// 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(subscriberName)
' 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
[Top]
Consulte também
Conceitos
Práticas recomendadas em relação à segurança de replicação
Sincronizar uma assinatura push