Vorgehensweise: Synchronisierungszeitpläne (RMO-Programmierung)

Die Replikation verwendet den SQL Server-Agent, um Aufträge für regelmäßig auftretende Aktivitäten wie die Snapshotgenerierung und die Abonnementsynchronisierung zu planen. Sie können Replikationsverwaltungsobjekte (RMO) programmgesteuert verwenden, um Zeitpläne für Replikations-Agentaufträge anzugeben.

HinweisHinweis

Wenn Sie ein Abonnement erstellen und den Wert false für CreateSyncAgentByDefault (das Standardverhalten für Pullabonnements) angeben, wird der Agentauftrag nicht erstellt und die Zeitplanungseigenschaften werden ignoriert. In diesem Fall muss der Synchronisierungszeitplan von der Anwendung bestimmt werden. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines Pullabonnements (RMO-Programmierung) und Vorgehensweise: Erstellen eines Pushabonnements (RMO-Programmierung).

So definieren Sie einen Zeitplan des Replikations-Agents, wenn Sie ein Pushabonnement für eine Transaktionsveröffentlichung erstellen

  1. Erstellen Sie eine Instanz der TransSubscription-Klasse für das Abonnement, das Sie erstellen. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines Pushabonnements (RMO-Programmierung).

  2. Bevor Sie Create aufrufen, legen Sie mindestens eines der folgenden Felder der AgentSchedule-Eigenschaft fest:

    • FrequencyType – der Typ der Frequenz (z. B. täglich oder wöchentlich), den Sie beim Planen des Agents verwenden.

    • FrequencyInterval – der Tag der Woche, an dem ein Agent ausgeführt wird.

    • FrequencyRelativeInterval – die Woche eines gegebenen Monats, in der der Agent einmal monatlich ausgeführt wird.

    • FrequencyRecurrenceFactor – die Anzahl der Einheiten für die Frequenz, die zwischen den einzelnen Synchronisierungen liegen.

    • FrequencySubDay – die Einheit für die Frequenz, wenn der Agent täglich mehrmals ausgeführt wird.

    • FrequencySubDayInterval – die Anzahl der Einheiten für die Frequenz, die zwischen den einzelnen Ausführungen liegen, wenn der Agent mehrmals täglich ausgeführt wird.

    • ActiveStartTime – der früheste Zeitpunkt an einem bestimmten Tag, zu dem eine Agent-Ausführung gestartet wird.

    • ActiveEndTime – der späteste Zeitpunkt an einem bestimmten Tag, zu dem eine Agent-Ausführung gestartet wird.

    • ActiveStartDate – der erste Tag, an dem der Agentzeitplan in Kraft ist.

    • ActiveEndDate – der letzte Tag, an dem der Agentzeitplan in Kraft ist.

    HinweisHinweis

    Wenn Sie keine dieser Eigenschaften angeben, wird ein Standardwert festgelegt.

  3. Rufen Sie die Create-Methode auf, um das Abonnement zu erstellen.

So definieren Sie einen Zeitplan des Replikations-Agents, wenn Sie ein Pullabonnement für eine Transaktionsveröffentlichung erstellen

  1. Erstellen Sie eine Instanz der TransPullSubscription-Klasse für das Abonnement, das Sie erstellen. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines Pullabonnements (RMO-Programmierung).

  2. Bevor Sie Create aufrufen, legen Sie mindestens eines der folgenden Felder der AgentSchedule-Eigenschaft fest:

    • FrequencyType – der Typ der Frequenz (z. B. täglich oder wöchentlich), den Sie beim Planen des Agents verwenden.

    • FrequencyInterval – der Tag der Woche, an dem ein Agent ausgeführt wird.

    • FrequencyRelativeInterval – die Woche eines bestimmten Monats, in der der Agent einmal monatlich ausgeführt wird.

    • FrequencyRecurrenceFactor – die Anzahl der Einheiten für die Frequenz, die zwischen den einzelnen Synchronisierungen liegen.

    • FrequencySubDay – die Einheit für die Frequenz, wenn der Agent täglich mehrmals ausgeführt wird.

    • FrequencySubDayInterval – die Anzahl der Einheiten für die Frequenz, die zwischen den einzelnen Ausführungen liegen, wenn der Agent mehrmals täglich ausgeführt wird.

    • ActiveStartTime – der früheste Zeitpunkt an einem bestimmten Tag, zu dem eine Agent-Ausführung gestartet wird.

    • ActiveEndTime – der späteste Zeitpunkt an einem bestimmten Tag, zu dem eine Agent-Ausführung gestartet wird.

    • ActiveStartDate – der erste Tag, an dem der Agentzeitplan in Kraft ist.

    • ActiveEndDate – der letzte Tag, an dem der Agentzeitplan in Kraft ist.

    HinweisHinweis

    Wenn Sie keine dieser Eigenschaften angeben, wird ein Standardwert festgelegt.

  3. Rufen Sie die Create-Methode auf, um das Abonnement zu erstellen.

So definieren Sie einen Zeitplan des Replikations-Agents, wenn Sie ein Pullabonnement für eine Mergeveröffentlichung erstellen

  1. Erstellen Sie eine Instanz der MergePullSubscription-Klasse für das Abonnement, das Sie erstellen. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines Pullabonnements (RMO-Programmierung).

  2. Bevor Sie Create aufrufen, legen Sie mindestens eines der folgenden Felder der AgentSchedule-Eigenschaft fest:

    • FrequencyType – der Typ der Frequenz (z. B. täglich oder wöchentlich), den Sie beim Planen des Agents verwenden.

    • FrequencyInterval – der Tag der Woche, an dem ein Agent ausgeführt wird.

    • FrequencyRelativeInterval – die Woche eines bestimmten Monats, in der der Agent einmal monatlich ausgeführt wird.

    • FrequencyRecurrenceFactor – die Anzahl der Einheiten für die Frequenz, die zwischen den einzelnen Synchronisierungen liegen.

    • FrequencySubDay – die Einheit für die Frequenz, wenn der Agent täglich mehrmals ausgeführt wird.

    • FrequencySubDayInterval – die Anzahl der Einheiten für die Frequenz, die zwischen den einzelnen Ausführungen liegen, wenn der Agent mehrmals täglich ausgeführt wird.

    • ActiveStartTime – der früheste Zeitpunkt an einem bestimmten Tag, zu dem eine Agent-Ausführung gestartet wird.

    • ActiveEndTime – der späteste Zeitpunkt an einem bestimmten Tag, zu dem eine Agent-Ausführung gestartet wird.

    • ActiveStartDate – der erste Tag, an dem der Agentzeitplan in Kraft ist.

    • ActiveEndDate – der letzte Tag, an dem der Agentzeitplan in Kraft ist.

    HinweisHinweis

    Wenn Sie keine dieser Eigenschaften angeben, wird ein Standardwert festgelegt.

  3. Rufen Sie die Create-Methode auf, um das Abonnement zu erstellen.

So definieren Sie einen Zeitplan des Replikations-Agents, wenn Sie ein Pushabonnement für eine Mergeveröffentlichung erstellen

  1. Erstellen Sie eine Instanz der MergeSubscription-Klasse für das Abonnement, das Sie erstellen. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines Pushabonnements (RMO-Programmierung).

  2. Bevor Sie Create aufrufen, legen Sie mindestens eines der folgenden Felder der AgentSchedule-Eigenschaft fest:

    • FrequencyType – der Typ der Frequenz (z. B. täglich oder wöchentlich), den Sie beim Planen des Agents verwenden.

    • FrequencyInterval – der Tag der Woche, an dem ein Agent ausgeführt wird.

    • FrequencyRelativeInterval – die Woche eines bestimmten Monats, in der der Agent einmal monatlich ausgeführt wird.

    • FrequencyRecurrenceFactor – die Anzahl der Einheiten für die Frequenz, die zwischen den einzelnen Synchronisierungen liegen.

    • FrequencySubDay – die Einheit für die Frequenz, wenn der Agent täglich mehrmals ausgeführt wird.

    • FrequencySubDayInterval – die Anzahl der Einheiten für die Frequenz, die zwischen den einzelnen Ausführungen liegen, wenn der Agent mehrmals täglich ausgeführt wird.

    • ActiveStartTime – der früheste Zeitpunkt an einem bestimmten Tag, zu dem eine Agent-Ausführung gestartet wird.

    • ActiveEndTime – der späteste Zeitpunkt an einem bestimmten Tag, zu dem eine Agent-Ausführung gestartet wird.

    • ActiveStartDate – der erste Tag, an dem der Agentzeitplan in Kraft ist.

    • ActiveEndDate – der letzte Tag, an dem der Agentzeitplan in Kraft ist.

    HinweisHinweis

    Wenn Sie keine dieser Eigenschaften angeben, wird ein Standardwert festgelegt.

  3. Rufen Sie die Create-Methode auf, um das Abonnement zu erstellen.

Beispiel

In diesem Beispiel werden ein Pushabonnement für eine Mergeveröffentlichung erstellt und der Zeitplan angegeben, mit dem das Abonnement synchronisiert wird.

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