Specificare le pianificazioni della sincronizzazione

Si applica a:SQL ServerIstanza gestita di SQL di Azure

Questo argomento descrive come specificare le pianificazioni della sincronizzazione in SQL Server tramite SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO). Quando si crea una sottoscrizione, è possibile definire una pianificazione della sincronizzazione per controllare l'esecuzione dell'agente di replica per la sottoscrizione. Se non si specificano parametri di pianificazione, per la sottoscrizione verrà utilizzata la pianificazione predefinita.

Le sottoscrizioni vengono sincronizzate dall'agente di distribuzione, per la replica snapshot e transazionale, o dall'agente di merge, per la replica di tipo merge. Gli agenti possono essere in esecuzione continuamente, essere in esecuzione su richiesta o essere in esecuzione su una pianificazione.

Contenuto dell'articolo

Utilizzo di SQL Server Management Studio

Impostare le pianificazioni della sincronizzazione nella pagina Pianificazione della sincronizzazione della Creazione guidata nuova sottoscrizione. Per ulteriori informazioni sull'accesso a questa procedura guidata, vedere Create a Push Subscription e Create a Pull Subscription.

Modificare le pianificazioni della sincronizzazione nella finestra di dialogo Proprietà programmazione processi, alla quale è possibile accedere dalla cartella Processi in SQL Server Management Studio e dalle finestre relative ai dettagli dell'agente in Monitoraggio replica. Per informazioni sull'avvio di Monitoraggio replica, vedere Avviare Monitoraggio replica.

Se si specificano le pianificazioni dalla cartella Processi , utilizzare la tabella seguente per determinare il nome del processo dell'agente.

Agente Nome processo
Agente di merge per le sottoscrizioni pull <ServerPubblicazione>-<DatabasePubblicazione>-<Pubblicazione>-<Sottoscrittore>-<DatabaseSottoscrizione>-<intero>
Agente di merge per le sottoscrizioni push <ServerPubblicazione>-<DatabasePubblicazione>-<Pubblicazione>-<Sottoscrittore>-<intero>
Agente di distribuzione per le sottoscrizioni push <ServerPubblicazione>-<DatabasePubblicazione>-<Pubblicazione>-<Sottoscrittore>-<intero>1
Agente di distribuzione per le sottoscrizioni pull <ServerPubblicazione>-<DatabasePubblicazione>-<Pubblicazione>-<Sottoscrittore>-<DatabaseSottoscrizione>-<GUID>2
Agente di distribuzione per le sottoscrizioni push di Sottoscrittori non SQL Server <ServerPubblicazione>-<DatabasePubblicazione>-<Pubblicazione>-<Sottoscrittore>-<intero>

1 Per le sottoscrizioni push di pubblicazioni Oracle, è <ServerPubblicazione>-<ServerPubblicazione> invece di <ServerPubblicazione>-<DatabasePubblicazione>

2Per le sottoscrizioni pull di pubblicazioni Oracle, è <ServerPubblicazione>-<DatabaseDistribuzione> invece di <ServerPubblicazione>-<DatabasePubblicazione>

Per impostare le pianificazioni della sincronizzazione

  1. Nella pagina Pianificazione della sincronizzazione della Creazione guidata nuova sottoscrizione selezionare uno dei valori seguenti nell'elenco a discesa Pianificazione agente per ogni sottoscrizione creata:

    • Esecuzione continua

    • Esecuzione solo su richiesta

    • <Definisci pianificazione...>

  2. Se si seleziona <Definisci pianificazione...>, specificare una pianificazione nella finestra di dialogo Proprietà programmazione processi e quindi fare clic su OK.

  3. Completare la procedura guidata.

Per modificare una pianificazione della sincronizzazione per una sottoscrizione push in Monitoraggio replica

  1. Espandere un gruppo di server di pubblicazione nel riquadro a sinistra di Monitoraggio replica, espandere un server di pubblicazione e quindi fare clic su una pubblicazione.

  2. Fare clic sulla scheda Tutte le sottoscrizioni .

  3. Fare clic con il pulsante destro del mouse su una sottoscrizione e quindi scegliere Visualizza dettagli.

  4. Nella finestra Sottoscrizione < NomeSottoscrizione> fare clic su Azione e quindi su <Proprietà processo> NomeAgente.

  5. Nella pagina Pianificazioni della finestra di dialogo Proprietà processo - <NomeProcesso> dia clic su Modifica.

  6. Nella finestra di dialogo Proprietà pianificazione processo selezionare un valore nell'elenco a discesa Tipo pianificazione :

    • Per specificare che l'agente deve essere eseguito in modo continuo, selezionare Avvia automaticamente all'avvio di SQL Server Agent.

    • Per specificare che l'agente deve essere eseguito in base a una pianificazione, selezionare Periodica.

    • Per specificare che l'agente deve essere eseguito su richiesta, selezionare Singola occorrenza.

  7. Se si seleziona Periodica, specificare una pianificazione per l'agente.

  8. Seleziona OK.

Per modificare una pianificazione della sincronizzazione per una sottoscrizione push in Management Studio

  1. Connettiti al Distributore in Management Studio, quindi espandi il nodo server.

  2. Espandere la cartella SQL Server Agent e quindi la cartella Processi .

  3. Fare clic con il pulsante destro del mouse sull'agente di distribuzione o sull'agente di merge associato alla sottoscrizione e quindi scegliere Proprietà.

  4. Nella pagina Pianificazioni della finestra di dialogo Proprietà processo - <NomeProcesso> dia clic su Modifica.

  5. Nella finestra di dialogo Proprietà pianificazione processo selezionare un valore nell'elenco a discesa Tipo pianificazione :

    • Per specificare che l'agente deve essere eseguito in modo continuo, selezionare Avvia automaticamente all'avvio di SQL Server Agent.

    • Per specificare che l'agente deve essere eseguito in base a una pianificazione, selezionare Periodica.

    • Per specificare che l'agente deve essere eseguito su richiesta, selezionare Singola occorrenza.

  6. Se si seleziona Periodica, specificare una pianificazione per l'agente.

  7. Seleziona OK.

Per modificare una pianificazione della sincronizzazione per una sottoscrizione pull in Management Studio

  1. Esegui la connessione al Sottoscrittore in Management Studio e quindi espandi il nodo server.

  2. Espandere la cartella SQL Server Agent e quindi la cartella Processi .

  3. Fare clic con il pulsante destro del mouse sull'agente di distribuzione o sull'agente di merge associato alla sottoscrizione e quindi scegliere Proprietà.

  4. Nella pagina Pianificazioni della finestra di dialogo Proprietà processo - <NomeProcesso> dia clic su Modifica.

  5. Nella finestra di dialogo Proprietà pianificazione processo selezionare un valore nell'elenco a discesa Tipo pianificazione :

    • Per specificare che l'agente deve essere eseguito in modo continuo, selezionare Avvia automaticamente all'avvio di SQL Server Agent.

    • Per specificare che l'agente deve essere eseguito in base a una pianificazione, selezionare Periodica.

    • Per specificare che l'agente deve essere eseguito su richiesta, selezionare Singola occorrenza.

  6. Se si seleziona Periodica, specificare una pianificazione per l'agente.

  7. Seleziona OK.

Utilizzo di Transact-SQL

È possibile definire pianificazioni della sincronizzazione a livello di programmazione tramite stored procedure di replica. Le stored procedure utilizzate dipendono dal tipo di replica e dal tipo di sottoscrizione (pull o push).

Una pianificazione è definita dai parametri di programmazione seguenti, i cui comportamenti vengono ereditati da sp_add_schedule (Transact-SQL):

  • @frequency_type : tipo di frequenza utilizzata per la pianificazione dell'agente.

  • @frequency_interval : giorno della settimana in cui viene eseguito un agente.

  • @frequency_relative_interval : settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.

  • @frequency_recurrence_factor : numero di unità relative al tipo di frequenza tra una sincronizzazione e l'altra.

  • @frequency_subday : unità della frequenza quando l'agente viene eseguito più di una volta al giorno.

  • @frequency_subday_interval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.

  • @active_start_time_of_day : ora di un determinato giorno in cui un agente viene avviato per la prima volta.

  • @active_end_time_of_day : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.

  • @active_start_date : primo giorno di applicazione della pianificazione dell'agente.

  • @active_end_date : ultimo giorno di applicazione della pianificazione dell'agente.

Per definire la pianificazione della sincronizzazione per una sottoscrizione pull di una pubblicazione transazionale

  1. Creare una nuova sottoscrizione pull di una pubblicazione transazionale. Per altre informazioni, vedere Creazione di una sottoscrizione pull.

  2. Nel Sottoscrittore, esegui sp_addpullsubscription_agent (Transact-SQL). Specifica @publisher, @publisher_db, @publication, e le credenziali di Microsoft Windows utilizzate per eseguire l'agente di distribuzione nel Sottoscrittore per @job_name e @password. Specificare i parametri di sincronizzazione, descritti in dettaglio in precedenza, con cui definire la pianificazione per il processo dell'agente di distribuzione che sincronizza la sottoscrizione.

Per definire la pianificazione della sincronizzazione per una sottoscrizione push di una pubblicazione transazionale

  1. Creare una nuova sottoscrizione push di una pubblicazione transazionale. Per altre informazioni, vedere Creazione di una sottoscrizione push.

  2. Nel Sottoscrittore esegui sp_addpushsubscription_agent (Transact-SQL). Specificare @subscriber, @subscriber_db, @publicatione le credenziali di Windows utilizzate per eseguire l'agente di distribuzione nel Sottoscrittore per @job_name e @password. Specificare i parametri di sincronizzazione, descritti in dettaglio in precedenza, con cui definire la pianificazione per il processo dell'agente di distribuzione che sincronizza la sottoscrizione.

Per definire la pianificazione della sincronizzazione per una sottoscrizione pull di una pubblicazione di tipo merge

  1. Creare una nuova sottoscrizione pull di una pubblicazione di tipo merge. Per altre informazioni, vedere Creazione di una sottoscrizione pull.

  2. Nel Sottoscrittore eseguire sp_addmergepullsubscription_agent. Specificare @publisher, @publisher_db, @publicatione le credenziali di Windows utilizzate per eseguire l'agente di merge nel Sottoscrittore per @job_name e @password. Specificare i parametri di sincronizzazione, descritti in dettaglio in precedenza, con cui definire la pianificazione per il processo dell'agente di merge che sincronizza la sottoscrizione.

Per definire la pianificazione della sincronizzazione per una sottoscrizione push di una pubblicazione di tipo merge

  1. Creare una nuova sottoscrizione push di una pubblicazione di tipo merge. Per altre informazioni, vedere Creazione di una sottoscrizione push.

  2. Nel Sottoscrittore eseguire sp_addmergepushsubscription_agent. Specificare @subscriber, @subscriber_db, @publicatione le credenziali di Windows utilizzate per eseguire l'agente di merge nel Sottoscrittore per @job_name e @password. Specificare i parametri di sincronizzazione, descritti in dettaglio in precedenza, con cui definire la pianificazione per il processo dell'agente di merge che sincronizza la sottoscrizione.

Utilizzo di RMO (Replication Management Objects)

La replica utilizza SQL Server Agent per pianificare i processi per attività che vengono svolte periodicamente, ad esempio la generazione di snapshot e la sincronizzazione delle sottoscrizioni. È possibile utilizzare gli oggetti RMO (Replication Management Objects) a livello di programmazione per specificare le pianificazioni per i processi dell'agente di replica.

Nota

Quando si crea una sottoscrizione e si specifica un valore false per CreateSyncAgentByDefault (comportamento predefinito per le sottoscrizioni pull), il processo dell'agente non viene creato e le proprietà di pianificazione vengono ignorate. In questo caso, la pianificazione della sincronizzazione deve essere determinata dall'applicazione. Per ulteriori informazioni, vedere Create a Pull Subscription e Create a Push Subscription.

Per definire una pianificazione dell'agente di replica quando si crea una sottoscrizione push di una pubblicazione transazionale

  1. Creare un'istanza della classe TransSubscription per la sottoscrizione da creare. Per altre informazioni, vedere Creazione di una sottoscrizione push.

  2. Prima di chiamare Create, impostare uno o più dei seguenti campi della proprietà AgentSchedule :

    • FrequencyType : tipo di frequenza (ad esempio giornaliera o settimanale) utilizzata per la pianificazione dell'agente.

    • FrequencyInterval : giorno della settimana in cui viene eseguito un agente.

    • FrequencyRelativeInterval : settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.

    • FrequencyRecurrenceFactor : numero di unità relative al tipo di frequenza tra sincronizzazioni.

    • FrequencySubDay : unità della frequenza quando l'agente viene eseguito più di una volta al giorno.

    • FrequencySubDayInterval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.

    • ActiveStartTime : ora di un determinato giorno in cui un agente viene avviato per la prima volta.

    • ActiveEndTime : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.

    • ActiveStartDate : primo giorno di applicazione della pianificazione dell'agente.

    • ActiveEndDate : ultimo giorno di applicazione della pianificazione dell'agente.

    Nota

    Se una di queste proprietà viene omessa, viene impostato un valore predefinito.

  3. Chiamare il metodo Create per creare la sottoscrizione.

Per definire una pianificazione dell'agente di replica quando si crea una sottoscrizione pull di una pubblicazione transazionale

  1. Creare un'istanza della classe TransPullSubscription per la sottoscrizione da creare. Per altre informazioni, vedere Creazione di una sottoscrizione pull.

  2. Prima di chiamare Create, impostare uno o più dei seguenti campi della proprietà AgentSchedule :

    • FrequencyType : tipo di frequenza (ad esempio giornaliera o settimanale) utilizzata per la pianificazione dell'agente.

    • FrequencyInterval : giorno della settimana in cui viene eseguito un agente.

    • FrequencyRelativeInterval : settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.

    • FrequencyRecurrenceFactor : numero di unità relative al tipo di frequenza tra sincronizzazioni.

    • FrequencySubDay : unità della frequenza quando l'agente viene eseguito più di una volta al giorno.

    • FrequencySubDayInterval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.

    • ActiveStartTime : ora di un determinato giorno in cui un agente viene avviato per la prima volta.

    • ActiveEndTime : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.

    • ActiveStartDate : primo giorno di applicazione della pianificazione dell'agente.

    • ActiveEndDate : ultimo giorno di applicazione della pianificazione dell'agente.

    Nota

    Se una di queste proprietà viene omessa, viene impostato un valore predefinito.

  3. Chiamare il metodo Create per creare la sottoscrizione.

Per definire una pianificazione dell'agente di replica quando si crea una sottoscrizione pull di una pubblicazione di tipo merge

  1. Creare un'istanza della classe MergePullSubscription per la sottoscrizione da creare. Per altre informazioni, vedere Creazione di una sottoscrizione pull.

  2. Prima di chiamare Create, impostare uno o più dei seguenti campi della proprietà AgentSchedule :

    • FrequencyType : tipo di frequenza (ad esempio giornaliera o settimanale) utilizzata per la pianificazione dell'agente.

    • FrequencyInterval : giorno della settimana in cui viene eseguito un agente.

    • FrequencyRelativeInterval : settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.

    • FrequencyRecurrenceFactor : numero di unità relative al tipo di frequenza tra sincronizzazioni.

    • FrequencySubDay : unità della frequenza quando l'agente viene eseguito più di una volta al giorno.

    • FrequencySubDayInterval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.

    • ActiveStartTime : ora di un determinato giorno in cui un agente viene avviato per la prima volta.

    • ActiveEndTime : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.

    • ActiveStartDate : primo giorno di applicazione della pianificazione dell'agente.

    • ActiveEndDate : ultimo giorno di applicazione della pianificazione dell'agente.

    Nota

    Se una di queste proprietà viene omessa, viene impostato un valore predefinito.

  3. Chiamare il metodo Create per creare la sottoscrizione.

Per definire una pianificazione dell'agente di replica quando si crea una sottoscrizione push di una pubblicazione di tipo merge

  1. Creare un'istanza della classe MergeSubscription per la sottoscrizione da creare. Per altre informazioni, vedere Creazione di una sottoscrizione push.

  2. Prima di chiamare Create, impostare uno o più dei seguenti campi della proprietà AgentSchedule :

    • FrequencyType : tipo di frequenza (ad esempio giornaliera o settimanale) utilizzata per la pianificazione dell'agente.

    • FrequencyInterval : giorno della settimana in cui viene eseguito un agente.

    • FrequencyRelativeInterval : settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.

    • FrequencyRecurrenceFactor : numero di unità relative al tipo di frequenza tra sincronizzazioni.

    • FrequencySubDay : unità della frequenza quando l'agente viene eseguito più di una volta al giorno.

    • FrequencySubDayInterval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.

    • ActiveStartTime : ora di un determinato giorno in cui un agente viene avviato per la prima volta.

    • ActiveEndTime : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.

    • ActiveStartDate : primo giorno di applicazione della pianificazione dell'agente.

    • ActiveEndDate : ultimo giorno di applicazione della pianificazione dell'agente.

    Nota

    Se una di queste proprietà viene omessa, viene impostato un valore predefinito.

  3. Chiamare il metodo Create per creare la sottoscrizione.

Esempio (RMO)

In questo esempio viene creata una sottoscrizione push di una pubblicazione di tipo merge e viene specificata la pianificazione per la sincronizzazione di tale sottoscrizione.

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

Vedi anche

Procedure consigliate per la sicurezza della replica
Subscribe to Publications
Sincronizzare una sottoscrizione push
Sincronizzare una sottoscrizione pull
Sincronizzare i dati