Procedura: Impostazione di pianificazioni della sincronizzazione (programmazione RMO)

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 Procedura: Creazione di una sottoscrizione pull (programmazione RMO) e Procedura: Creazione di una sottoscrizione push (programmazione RMO).

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 ulteriori informazioni, vedere Procedura: Creazione di una sottoscrizione push (programmazione RMO).

  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 ulteriori informazioni, vedere Procedura: Creazione di una sottoscrizione pull (programmazione RMO).

  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 ulteriori informazioni, vedere Procedura: Creazione di una sottoscrizione pull (programmazione RMO).

  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 ulteriori informazioni, vedere Procedura: Creazione di una sottoscrizione push (programmazione RMO).

  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

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 = "AdventureWorks2008R2Replica";
            string publicationDbName = "AdventureWorks2008R2";
            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 = "AdventureWorks2008R2Replica"
Dim publicationDbName As String = "AdventureWorks2008R2"
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