Určení plánů synchronizace

Platí pro:SQL ServerAzure SQL Managed Instance

Toto téma popisuje, jak specifikovat synchronizační plány v SQL Server pomocí SQL Server Management Studio, Transact-SQL nebo Replication Management Objects (RMO). Když vytvoříte předplatné, můžete definovat synchronizační plán, který určuje, kdy se replikační agent pro předplatné spustí. Pokud nespecifikujete parametry plánování, předplatné použije výchozí rozvrh.

Předplatná se synchronizují pomocí distribučního agenta (pro snímkovou a transakční replikaci) nebo slučovacího agenta (pro slučovací replikaci). Agenti můžou běžet nepřetržitě, běžet na vyžádání nebo běžet podle plánu.

Použití aplikace SQL Server Management Studio

Na stránce Plán synchronizace v Průvodci novým odběrem zadejte plány synchronizace. Pro více informací o přístupu k tomuto průvodce viz Vytvořit push předplatné a Vytvořit pull předplatné.

Upravte synchronizační plány v dialogovém okně Vlastnosti rozvrhu úloh, které je dostupné ve složce Jobs v SQL Server Management Studio a v oknech detailů agenta v Replication Monitor. Informace o spuštění služby Replication Monitor naleznete v tématu Spuštění monitorování replikace.

Pokud určujete harmonogramy ze složky Jobs , použijte následující tabulku k určení názvu role agenta.

Agent Název úlohy
Agent sloučení pro předplatné pull replikace <Vydavatel-Databáze publikací-Publikace-Předplatitel-Databáze předplatného-Celé číslo><><><><><>
Agent sloučení pro automatická předplatná <Vydavatel-DatabázePublikací-Publikace-Odběratel-celé číslo><><><><>
Distribuční agent pro odběry typu push <Publisher-PublicationDatabase-Publication-Subscriber-integer<<><>>><>1
Distribuční agent pro pull odběry <Publisher-PublicationDatabase-Publication-Subscriber-SubscriptionDatabase-GUID<<><><>>><>2
Distribuční agent pro push předplatná pro předplatitele systémů jiných než SQL Server <Vydavatel-DatabázePublikací-Publikace-Odběratel-celé číslo><><><><>

1 Pro odběry typu push publikací Oracle se jedná o <Publisher>-<Publisher>, nikoli o <Publisher>-<PublicationDatabase>

2 Pro odběry typu pull publikací Oracle je to <Publisher>-<DistributionDatabase>, nikoli <Publisher>-<PublicationDatabase>

Pro určení synchronizačních plánů

  1. Na stránce SynchronizationSchedule v Průvodce novým odběrem vyberte jednu z následujících hodnot z rozbalovacího seznamu Agent Schedule pro každé předplatné, které vytváříte:

    • Běž nepřetržitě

    • Pouze na vyžádání

    • <Definujte rozvrh...>

  2. Pokud vyberete <Definovat rozvrh...>, zadejte rozvrh v dialogovém okně Vlastnosti rozvrhu úkolů a poté klikněte na OK.

  3. Dokončete průvodce.

Úprava synchronizačního plánu pro předplatné push v nástroji Replication Monitor

  1. Rozbalte skupinu Publisherů v levém podokně Sledování replikace, rozbalte Publisher a potom klikněte na publikaci.

  2. Klikněte na kartu Všechna předplatná .

  3. Klikněte pravým tlačítkem myši na předplatné a potom klikněte na Zobrazit podrobnosti.

  4. V okně Subscription < SubscriptionName> klepněte na Akce a potom klepněte na <AgentName> Job Properties.

  5. Na stránce Plány v dialogovém okně Vlastnosti práce - <Název> práce klikněte na Upravit.

  6. V dialogovém okně Vlastnosti rozvrhu úkolů vyberte hodnotu z rozbalovacího seznamu typu plánu :

    • Pro určení, že by měl agent běžet nepřetržitě, vyberte Spustit automaticky, když se spustí SQL Server Agent.

    • Pro určení, že agent má běžet podle rozvrhu, vyberte Opakující se.

    • Chcete-li určit, že agent má běžet na požádání, vyberte možnost Jednorázově.

  7. Pokud vyberete Opakující se, zadejte rozvrh agenta.

  8. Vyberte OK.

Změna synchronizačního plánu pro odběr typu push v nástroji Management Studio

  1. Připojte se k Distributorovi v Management Studio a poté rozbalte uzel serveru.

  2. Rozbalte složku agenta SQL Serveru a potom rozbalte složku Úlohy .

  3. Klikněte pravým tlačítkem na úlohu pro Distribution Agent nebo Merge Agent spojený s odběrem a poté klikněte na Vlastnosti.

  4. Na stránce Plány v dialogovém okně Vlastnosti práce - <Název> práce klikněte na Upravit.

  5. V dialogovém okně Vlastnosti rozvrhu úkolů vyberte hodnotu z rozbalovacího seznamu typu plánu :

    • Pro určení, že by měl agent běžet nepřetržitě, vyberte Spustit automaticky, když se spustí SQL Server Agent.

    • Pro určení, že agent má běžet podle rozvrhu, vyberte Opakující se.

    • Chcete-li určit, že se agent má spouštět na vyžádání, vyberte možnost Jednorázově.

  6. Pokud vyberete Opakující se, zadejte rozvrh agenta.

  7. Vyberte OK.

Postup změny plánu synchronizace pro předplatné typu pull v aplikaci Management Studio

  1. Připojte se k odběrateli v prostředí Management Studio a pak rozbalte uzel serveru.

  2. Rozbalte složku agenta SQL Serveru a potom rozbalte složku Úlohy .

  3. Klikněte pravým tlačítkem na úlohu pro Distribution Agent nebo Merge Agent spojený s odběrem a poté klikněte na Vlastnosti.

  4. Na stránce Plány v dialogovém okně Vlastnosti práce - <Název> práce klikněte na Upravit.

  5. V dialogovém okně Vlastnosti rozvrhu úkolů vyberte hodnotu z rozbalovacího seznamu typu plánu :

    • Pro určení, že by měl agent běžet nepřetržitě, vyberte Spustit automaticky, když se spustí SQL Server Agent.

    • Pro určení, že agent má běžet podle rozvrhu, vyberte Opakující se.

    • Chcete-li určit, že se má agent spouštět na vyžádání, vyberte možnost Jednorázově.

  6. Pokud vyberete Opakující se, zadejte rozvrh agenta.

  7. Vyberte OK.

Použití Transact-SQL

Synchronizační plány můžete programově definovat pomocí uložených procedur v replicaci. Uložené procedury, které používáte, závisí na typu replikace a typu předplatného (pull nebo push).

Harmonogram je definován následujícími parametry plánování, jejichž chování je děděno z sp_add_schedule (Transact-SQL):

  • @frequency_type – typ frekvence používané při plánování agenta.

  • @frequency_interval – den v týdnu, kdy agent běží.

  • @frequency_relative_interval – týden v daném měsíci, kdy má agent pracovat měsíčně.

  • @frequency_recurrence_factor – počet frekvenčních jednotek, které se vyskytují mezi synchronizacemi.

  • @frequency_subday – frekvenční jednotka, kdy agent pracuje častěji než jednou denně.

  • @frequency_subday_interval – počet jednotek frekvence mezi spuštěními, pokud je agent spouštěn častěji než jednou denně.

  • @active_start_time_of_day – nejčasnější čas v daný den, kdy se spustí agent.

  • @active_end_time_of_day – nejpozdější čas v daném dni, kdy se spustí běh agenta.

  • @active_start_date – první den, kdy bude platit rozpis agentů.

  • @active_end_date – poslední den, kdy bude platit rozpis agentů.

Definování synchronizačního plánu pro předplatné typu pull transakční publikace

  1. Vytvořte nový odběr typu pull pro transakční publikaci. Další informace najdete v tématu Vytvoření odběru vyžádané replikace.

  2. U odběratele proveďte sp_addpullsubscription_agent (Transact-SQL). Specifikujte @publisher, @publisher_db, @publication a Microsoft Windows přihlašovací údaje, pod kterými Distribution Agent u Subscriber běží pro @job_name a @password. Specifikujte synchronizační parametry, uvedené výše, které definují rozvrh pro úlohu Distribution Agent, která synchronizuje předplatné.

Definování plánu synchronizace pro nabízené předplatné k transakční publikaci

  1. Vytvořte si nové push předplatné transakční publikace. Pro více informací viz Vytvořit push předplatné.

  2. U odběratele proveďte sp_addpushsubscription_agent (Transact-SQL). Specifikujte @subscriber, @subscriber_db, @publication a Windows přihlašovací údaje, pod kterými Distribution Agent u Subscriber běží pro @job_name a @password. Specifikujte synchronizační parametry, uvedené výše, které definují rozvrh pro úlohu Distribution Agent, která synchronizuje předplatné.

Pro definování synchronizačního plánu pro pull předplatné na sloučení publikace

  1. Vytvořte nový odběr typu pull pro publikaci slučování. Další informace najdete v tématu Vytvoření odběru vyžádané replikace.

  2. Na odběrateli spusťte sp_addmergepullsubscription_agent. Specifikujte @publisher, @publisher_db, @publication a Windows přihlašovací údaje, pod kterými Merge Agent u odběratele běží pro @job_name a @password. Specifikujte synchronizační parametry, uvedené výše, které určují harmonogram pro úlohu Merge Agent, která synchronizuje předplatné.

Definování synchronizačního plánu pro odběr typu push pro publikaci slučování

  1. Vytvořte nové push předplatné na sloučení publikace. Pro více informací viz Vytvořit push předplatné.

  2. Na odběrateli proveďte sp_addmergepushsubscription_agent. Specifikujte @subscriber, @subscriber_db, @publication a Windows přihlašovací údaje, pod kterými Merge Agent u Subscriber běží pro @job_name a @password. Specifikujte synchronizační parametry, uvedené výše, které určují harmonogram pro úlohu Merge Agent, která synchronizuje předplatné.

Použití objektů správy replikace (RMO)

Replikace využívá SQL Server Agent k plánování úloh pro aktivity, které se pravidelně vyskytují, jako je generování snímků a synchronizace předplatného. Replikační řídicí objekty (RMO) můžete programově použít k určení harmonogramů pro úlohy replikačního agenta.

Note

Když vytvoříte předplatné a zadáte hodnotu false pro CreateSyncAgentByDefault (výchozí chování pro pull subscriptions), agentní úloha se nevytváří a plánovací vlastnosti jsou ignorovány. V takovém případě musí synchronizační plán určovat aplikace. Další informace najdete v tématu Vytvoření předplatného vyžádané replikace a Vytvoření předplatného push.

Pro definování plánu replikačního agenta při vytváření push předplatného transakční publikace

  1. Vytvořte instanci třídy TransSubscription pro předplatné, které vytváříte. Pro více informací viz Vytvořit push předplatné.

  2. Než zavoláte Create, nastavte jedno nebo více z následujících polí vlastnosti AgentSchedule:

    • FrequencyType - typ frekvence (například denní nebo týdenní), kterou používáte při objednávání agenta.

    • FrequencyInterval - den v týdnu, kdy se agent spouští.

    • FrequencyRelativeInterval – týden v daném měsíci, ve kterém je agent naplánován ke spuštění každý měsíc.

    • FrequencyRecurrenceFactor – počet jednotek typu frequency, které se vyskytují mezi synchronizacemi.

    • FrequencySubDay – jednotka frekvence, pokud agent běží častěji než jednou denně.

    • FrequencySubDayInterval – počet časových jednotek mezi spuštěními, pokud je agent spouštěn častěji než jednou denně.

    • ActiveStartTime - nejdřívějším časem v daný den, kdy začíná agentní běh.

    • ActiveEndTime - Nejpozdější čas v daný den, kdy začíná proces agenta.

    • ActiveStartDate - první den, kdy je agentní rozpis v platnosti.

    • ActiveEndDate - poslední den, kdy je v platnosti agentní rozpis.

    Note

    Pokud jednu z těchto vlastností nespecifikujete, nastaví se výchozí hodnota.

  3. Zavolejte metodu Create pro vytvoření předplatného.

Definovat plán agenta replikace při vytváření odběrného předplatného pro transakční publikaci

  1. Vytvořte instanci třídy TransPullSubscription pro předplatné, které vytváříte. Další informace najdete v tématu Vytvoření odběru vyžádané replikace.

  2. Než zavoláte Create, nastavte jedno nebo více z následujících polí vlastnosti AgentSchedule:

    • FrequencyType - typ frekvence (například denní nebo týdenní), kterou používáte při objednávání agenta.

    • FrequencyInterval - den v týdnu, kdy se agent spouští.

    • FrequencyRelativeInterval – týden v daném měsíci, ve kterém je naplánováno měsíční spuštění agenta.

    • FrequencyRecurrenceFactor – počet jednotek typu frequency, které se vyskytují mezi synchronizacemi.

    • FrequencySubDay – jednotka frekvence, pokud agent běží častěji než jednou denně.

    • FrequencySubDayInterval – počet časových jednotek mezi spuštěními, pokud je agent spouštěn častěji než jednou denně.

    • ActiveStartTime - nejdřívějším časem v daný den, kdy začíná agentní běh.

    • ActiveEndTime - Nejpozdější čas v daný den, kdy začíná proces agenta.

    • ActiveStartDate - první den, kdy je agentní rozpis v platnosti.

    • ActiveEndDate - poslední den, kdy je v platnosti agentní rozpis.

    Note

    Pokud jednu z těchto vlastností nespecifikujete, nastaví se výchozí hodnota.

  3. Zavolejte metodu Create pro vytvoření předplatného.

Definovat plán agenta replikace při vytváření odběru typu pull ke slučovací publikaci

  1. Vytvořte instanci třídy MergePullSubscription pro předplatné, které vytváříte. Další informace najdete v tématu Vytvoření odběru vyžádané replikace.

  2. Než zavoláte Create, nastavte jedno nebo více z následujících polí vlastnosti AgentSchedule:

    • FrequencyType - typ frekvence (například denní nebo týdenní), kterou používáte při objednávání agenta.

    • FrequencyInterval - den v týdnu, kdy se agent spouští.

    • FrequencyRelativeInterval – týden v daném měsíci, ve kterém je agent naplánován ke spuštění každý měsíc.

    • FrequencyRecurrenceFactor – počet jednotek typu frequency, které se vyskytují mezi synchronizacemi.

    • FrequencySubDay – jednotka frekvence, pokud agent běží častěji než jednou denně.

    • FrequencySubDayInterval – počet časových jednotek mezi spuštěními, pokud je agent spouštěn častěji než jednou denně.

    • ActiveStartTime - nejdřívějším časem v daný den, kdy začíná agentní běh.

    • ActiveEndTime - Nejpozdější čas v daný den, kdy začíná proces agenta.

    • ActiveStartDate - první den, kdy je agentní rozpis v platnosti.

    • ActiveEndDate - poslední den, kdy je v platnosti agentní rozpis.

    Note

    Pokud jednu z těchto vlastností nespecifikujete, nastaví se výchozí hodnota.

  3. Zavolejte metodu Create pro vytvoření předplatného.

Definování plánu replikačního agenta při vytváření push předplatného na sloučení publikace

  1. Vytvořte instanci třídy MergeSubscription pro předplatné, které vytváříte. Pro více informací viz Vytvořit push předplatné.

  2. Než zavoláte Create, nastavte jedno nebo více z následujících polí vlastnosti AgentSchedule:

    • FrequencyType - typ frekvence (například denní nebo týdenní), kterou používáte při objednávání agenta.

    • FrequencyInterval - den v týdnu, kdy se agent spouští.

    • FrequencyRelativeInterval - týden v daném měsíci, ve kterém je agent naplánován ke spuštění každý měsíc.

    • FrequencyRecurrenceFactor – počet jednotek typu frequency, které se vyskytují mezi synchronizacemi.

    • FrequencySubDay – jednotka frekvence, pokud agent běží častěji než jednou denně.

    • FrequencySubDayInterval – počet časových jednotek mezi spuštěními, pokud je agent spouštěn častěji než jednou denně.

    • ActiveStartTime - nejdřívějším časem v daný den, kdy začíná agentní běh.

    • ActiveEndTime - Nejpozdější čas v daný den, kdy začíná proces agenta.

    • ActiveStartDate - první den, kdy je agentní rozpis v platnosti.

    • ActiveEndDate - poslední den, kdy je v platnosti agentní rozpis.

    Note

    Pokud jednu z těchto vlastností nespecifikujete, nastaví se výchozí hodnota.

  3. Zavolejte metodu Create pro vytvoření předplatného.

Příklad (RMO)

Tento příklad vytváří push předplatné pro sloučení publikace a specifikuje harmonogram, podle kterého je předplatné synchronizováno.

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