Sdílet prostřednictvím


Koncepty objektů správy replikace

platí pro:SQL Serverazure SQL Managed Instance

Objekty správy replikace (RMO) je sestavení spravovaného kódu, které zapouzdřuje funkce replikace pro SQL Server. RMO je implementováno Microsoft.SqlServer.Replication oborem názvů.

Témata v následujících částech popisují, jak můžete pomocí RMO programově řídit úlohy replikace:

konfigurace distribučního
Témata v této části ukazují, jak pomocí RMO nakonfigurovat publikování a distribuci.

vytvoření publikace
Témata v této části ukazují, jak pomocí RMO vytvářet, odstraňovat a upravovat publikace a články.

Přihlásit se k odběru publikací
Témata v této části ukazují, jak pomocí RMO vytvářet, odstraňovat a upravovat předplatná.

zabezpečení topologie replikace
Témata v této části ukazují, jak pomocí RMO zobrazit a upravit nastavení zabezpečení.

synchronizace předplatných (replikace)
Témata v této části ukazují, jak synchronizovat předplatná.

monitorování replikace
Témata v této části ukazují, jak programově monitorovat topologii replikace.

Úvod do programování RMO

RMO je navržený pro programování všech aspektů replikace SQL Serveru. Obor názvů RMO je Microsoft.SqlServer.Replicationa je implementována Microsoft.SqlServer.Rmo.dll, což je sestavení Microsoft .NET Framework. Sestavení Microsoft.SqlServer.Replication.dll, které také patří do oboru názvů Microsoft.SqlServer.Replication, implementuje spravované rozhraní kódu pro programování různých agentů replikace (snapshot agent, distribuční agent a slučovací agent). K jeho třídám je možné přistupovat z RMO k synchronizaci předplatných. Třídy v oboru názvů Microsoft.SqlServer.Replication.BusinessLogicSupport implementované sestavením Microsoft.SqlServer.Replication.BusinessLogicSupport.dll slouží k vytvoření vlastní obchodní logiky pro slučovací replikaci. Toto sestavení je nezávislé na RMO.

Nasazení aplikací na základě RMO

RMO závisí na komponentách replikace a komponentách připojení klienta, které jsou součástí všech verzí SQL Serveru s výjimkou SQL Serveru Compact. Pokud chcete nasadit aplikaci založenou na RMO, musíte nainstalovat verzi SQL Serveru, která zahrnuje součásti replikace a součásti připojení klienta do počítače, na kterém bude aplikace spuštěna.

Začínáme s RMO

Tato část popisuje, jak spustit jednoduchý projekt RMO pomocí sady Microsoft Visual Studio.

Vytvoření nového projektu Microsoft Visual C#

  1. Spusťte Visual Studio.

  2. V nabídce File klikněte na NewProject. Zobrazí se dialogové okno Nový projekt.

  3. V dialogovém okně Typy projektů vyberte projekty Visual C#. V podokně šablon vyberte aplikace systému Windows.

  4. (Volitelné) Do Názevzadejte název nové aplikace.

  5. Kliknutím na OK načtěte šablonu Visual C#Windows.

  6. V nabídce Project vyberte Přidat referenční položku. Zobrazí se dialogové okno Přidat odkaz.

  7. V seznamu na kartě .NET vyberte následující sestavení a klikněte na tlačítko OK.

    • Programovací rozhraní Microsoft.SqlServer.Replication .NET

    • Microsoft.SqlServer.ConnectionInfo

    • Knihovna agentů replikace

    Poznámka

    Pomocí klávesy CTRL vyberte více než jeden soubor.

  8. (Volitelné) Opakujte krok 6. Klikněte na kartu Procházet, přejděte na C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dlla potom klikněte na OK.

  9. V nabídce Zobrazit klepněte na Kód .

  10. Před příkazem oboru názvů v kódu zadejte následující pomocí příkazů kvalifikovat typy v oborech názvů RMO:

    // These namespaces are required.  
    using Microsoft.SqlServer.Replication;  
    using Microsoft.SqlServer.Management.Common;  
    // This namespace is only used when creating custom business  
    // logic for merge replication.  
    using Microsoft.SqlServer.Replication.BusinessLogicSupport;   
    

Vytvoření nového projektu Microsoft Visual Basic .NET

  1. Spusťte Visual Studio.

  2. V nabídce Soubor vyberte Nový projekt. Zobrazí se dialogové okno Nový projekt.

  3. V podokně Typy projektů vyberte jazyka Visual Basic. V podokně Šablony vyberte aplikace systému Windows.

  4. (Volitelné) Do pole Název zadejte název nové aplikace.

  5. Kliknutím na tlačítko OK načtěte šablonu windows jazyka Visual Basic.

  6. V nabídce Project vyberte Přidat referenční. Zobrazí se dialogové okno Přidat odkaz.

  7. V seznamu na kartě .NET vyberte následující sestavení a klikněte na tlačítko OK.

    • Programovací rozhraní Microsoft.SqlServer.Replication .NET

    • Microsoft.SqlServer.ConnectionInfo

    • Knihovna agentů replikace

    Poznámka

    Pomocí klávesy CTRL vyberte více než jeden soubor.

  8. (Volitelné) Opakujte krok 6. Klikněte na kartu Procházet, přejděte na C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dlla potom klikněte na OK.

  9. V nabídce Zobrazit klepněte na Kód .

  10. Před deklaracemi v kódu zadejte následující příkazy Imports, které opravní typy v oborech názvů RMO.

    ' These namespaces are required.  
    Imports Microsoft.SqlServer.Replication  
    Imports Microsoft.SqlServer.Management.Common  
    ' This namespace is only used when creating custom business  
    ' logic for merge replication.  
    Imports Microsoft.SqlServer.Replication.BusinessLogicSupport   
    

Připojení k serveru replikace

Programovací objekty RMO vyžadují, aby připojení k instanci SQL Serveru bylo provedeno pomocí instance ServerConnection třídy. Toto připojení k serveru se provádí nezávisle na všech programovacích objektech RMO. Pak se předá objektu RMO buď během vytváření instance, nebo přiřazením P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext vlastnosti objektu. Tímto způsobem lze vytvořit programovací objekt RMO a instance objektů připojení a spravovat samostatně a jeden objekt připojení lze opakovaně použít s více programovacími objekty RMO. Pro připojení k serveru replikace platí následující pravidla:

  • Všechny vlastnosti připojení jsou definovány pro daný objekt ServerConnection.

  • Připojení ke každé instanci SQL Serveru musí mít vlastní ServerConnection objekt.

  • Objekt ServerConnection je přiřazen k P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext vlastnosti programovacího objektu RMO, který se vytváří nebo přistupuje na serveru.

  • Metoda Connect otevře připojení k serveru. Tato metoda musí být volána před voláním všech metod, které přistupují k serveru na všech programovacích objektech RMO pomocí připojení.

  • Vzhledem k tomu, že RMO a objekty SMO (SQL Server Management Objects) používají ServerConnection třídu pro připojení k SQL Serveru, stejné připojení může používat jak objekty RMO, tak objekty SMO. Další informace naleznete v tématu Připojení k instanci systému SQL Server.

  • Všechny ověřovací informace pro vytvoření připojení a úspěšné přihlášení k serveru jsou zadány v objektu ServerConnection.

  • Ověřování systému Windows je výchozí. Pokud chcete použít ověřování SQL Serveru, musí být LoginSecure nastavena na false a Login a Password musí být nastavena na platné přihlášení a heslo SQL Serveru. Přihlašovací údaje zabezpečení musí být vždy uloženy a zpracovávány bezpečně a kdykoli je to možné.

  • Pro vícevláknové aplikace by měl být v každém vlákně použit samostatný objekt ServerConnection.

Voláním metody Disconnect objektu ServerConnection zavřete aktivní připojení serveru používaná objekty RMO.

Nastavení vlastností RMO

Vlastnosti programovacích objektů RMO představují vlastnosti těchto replikačních objektů na serveru. Při vytváření nových replikačních objektů na serveru se k definování těchto objektů používají vlastnosti RMO. U existujících objektů představují vlastnosti RMO vlastnosti existujícího objektu, které lze upravit pouze pro vlastnosti zapisovatelné nebo nastavitelné. Vlastnosti lze nastavit pro nové objekty nebo existující objekty.

Nastavení vlastností pro nové objekty replikace

Při vytváření nového objektu replikace na serveru musíte před voláním metody Create objektu zadat všechny požadované vlastnosti. Další informace o nastavení vlastností nového objektu replikace naleznete v tématu Konfigurace publikování a distribuce.

Nastavení vlastností pro existující objekty replikace

U replikačních objektů, které existují na serveru, může RMO v závislosti na objektu podporovat možnost změnit některé nebo všechny jeho vlastnosti. Lze změnit pouze zapisovatelné nebo nastavené vlastnosti. Před změnou vlastností musí být volána metoda Load nebo metoda M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties, aby se získaly aktuální vlastnosti ze serveru. Volání těchto metod označuje, že existující objekt je změněn.

Ve výchozím nastavení při změně vlastností objektu RMO potvrdí tyto změny na serveru na základě režimu spuštění ServerConnection, který se používá. Metodu P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject lze použít k ověření, zda objekt na serveru existuje, a teprve potom se pokusíte načíst nebo změnit jeho vlastnosti. Další informace o změně vlastností objektu replikace naleznete v tématu Zobrazení a úprava distributora a vlastnosti vydavatele.

Poznámka

Pokud na serveru přistupuje ke stejnému objektu replikace více klientů RMO nebo více instancí programovacího objektu RMO, je možné volat metodu Refresh objektu RMO, aby se aktualizovaly vlastnosti na základě aktuálního stavu objektu na serveru.

Změny vlastností ukládání do mezipaměti

Pokud je vlastnost SqlExecutionModes nastavena na CaptureSql všechny příkazy Transact-SQL vygenerované RMO jsou zachyceny tak, aby je bylo možné provést ručně v jedné dávce pomocí jedné metody provádění. RMO umožňuje ukládat změny vlastností do mezipaměti a potvrdit je společně v jedné dávce pomocí M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges metody objektu. Chcete-li uložit změny vlastností do mezipaměti, musí být vlastnost P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges objektu nastavena na hodnotu true. Při změnách vlastností ukládání do mezipaměti v RMO objekt ServerConnection stále řídí, když se změny odešlou na server. Další informace o ukládání změn vlastností do mezipaměti pro objekt replikace naleznete v tématu Zobrazit a upravit distributora a vlastnosti vydavatele.

Důležitý

Ačkoli třída ServerConnection podporuje deklarování explicitních transakcí při nastavování vlastností, tyto transakce mohou kolidovat s interními replikačními transakcemi, mohou vytvářet neočekávané výsledky a neměly by být použity s RMO.

Povolení podpory protokolu TLS 1.2 pro komponenty RMO

Podporu protokolu TLS1.2 pro součásti RMO ve Windows 2012 a nižších verzích je možné povolit instalací aktualizace KB 3140245a vytvořením klíčů registru, jak je uvedeno v článku. Ve Windows 2012 R2 a novějších verzích je potřeba vytvořit pouze klíče registru uvedené v článku výše.

Příklad

Tento příklad ukazuje ukládání změn vlastností do mezipaměti. Změny atributů transakční publikace jsou uloženy do mezipaměti, dokud nejsou explicitně odeslány na server.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = true;

    // If we can't get the properties for this publication, 
    // throw an application exception.
    if (publication.LoadProperties())
    {
        // Enable support for push subscriptions and disable support 
        // for pull subscriptions.
        if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
        {
            publication.Attributes ^= PublicationAttributes.AllowPull;
        }
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Send changes to the server.
        publication.CommitPropertyChanges();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}