Dela via


Begrepp för replikeringshanteringsobjekt

gäller för:SQL ServerAzure SQL Managed Instance

Replikeringshanteringsobjekt (RMO) är en hanterad kodsammansättning som kapslar in replikeringsfunktioner för SQL Server. RMO implementeras av Microsoft.SqlServer.Replication namnrymd.

Avsnitten i följande avsnitt beskriver hur du kan använda RMO för att programmatiskt kontrollera replikeringsuppgifter:

Konfigurera distributions
Avsnitten i det här avsnittet visar hur du använder RMO för att konfigurera publicering och distribution.

Skapa en
Avsnitten i det här avsnittet visar hur du använder RMO för att skapa, ta bort och ändra publikationer och artiklar.

prenumerera på publikationer
Avsnitten i det här avsnittet visar hur du använder RMO för att skapa, ta bort och ändra prenumerationer.

Skydda en replikeringstopologi
Avsnitten i det här avsnittet visar hur du använder RMO för att visa och ändra säkerhetsinställningar.

Synkronisera prenumerationer (replikering)
Avsnitten i det här avsnittet visar hur du synkroniserar prenumerationer.

Övervakning av replikering
Avsnitten i det här avsnittet visar hur du programmatiskt övervakar en replikeringstopologi.

Introduktion till RMO-programmering

RMO är utformat för programmering av alla aspekter av SQL Server-replikering. RMO-namnområdet är Microsoft.SqlServer.Replicationoch implementeras av Microsoft.SqlServer.Rmo.dll, som är en Microsoft .NET Framework-sammansättning. Den Microsoft.SqlServer.Replication.dll sammansättningen, som också tillhör Microsoft.SqlServer.Replication namnområde, implementerar ett hanterat kodgränssnitt för programmering av de olika replikeringsagenterna (Snapshot Agent, Distribution Agent och Merge Agent). Dess klasser kan nås från RMO för att synkronisera prenumerationer. Klasser i Microsoft.SqlServer.Replication.BusinessLogicSupport namnområdet, som implementeras av Microsoft.SqlServer.Replication.BusinessLogicSupport.dll-sammansättningen, används för att skapa anpassad affärslogik för sammanslagningsreplikering. Den här sammansättningen är oberoende av RMO.

Distribuera program baserat på RMO

RMO är beroende av de replikeringskomponenter och klientanslutningskomponenter som ingår i alla versioner av SQL Server förutom SQL Server Compact. Om du vill distribuera ett program baserat på RMO måste du installera en version av SQL Server som innehåller replikeringskomponenter och klientanslutningskomponenter på den dator där programmet ska köras.

Komma igång med RMO

I det här avsnittet beskrivs hur du startar ett enkelt RMO-projekt med Hjälp av Microsoft Visual Studio.

Skapa ett nytt Microsoft Visual C#-projekt

  1. Starta Visual Studio.

  2. På menyn Arkiv klickar du på NewProject. Dialogrutan Nytt projekt visas.

  3. I dialogrutan Projekttyper väljer du Visual C# Projects. I fönstret Mallar väljer du Windows-program.

  4. (Valfritt) I Namnanger du namnet på det nya programmet.

  5. Klicka på OK för att läsa in Windows-mallen Visual C# .

  6. På menyn Project väljer du Lägg till referens objekt. Dialogrutan Lägg till referens visas.

  7. Välj följande sammansättningar i listan på fliken .NET och klicka sedan på OK.

    • Microsoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfo

    • Replikeringsagentbibliotek

    Not

    Använd CTRL-tangenten för att välja fler än en fil.

  8. (Valfritt) Upprepa steg 6. Klicka på fliken Bläddra, gå till C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dlloch klicka sedan på OK.

  9. På menyn Visa klickar du på Code.

  10. I koden, innan namnområdesinstruktionen, skriver du följande med hjälp av-instruktioner för att kvalificera typerna i RMO-namnrymderna:

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

Skapa ett nytt Microsoft Visual Basic .NET-projekt

  1. Starta Visual Studio.

  2. På menyn Arkiv väljer du Nytt projekt. Dialogrutan Nytt projekt visas.

  3. I fönstret Projekttyper väljer du Visual Basic. I fönstret Mallar väljer du Windows-program.

  4. (Valfritt) I rutan Namn skriver du namnet på det nya programmet.

  5. Klicka på OK för att läsa in Visual Basic Windows-mallen.

  6. På menyn Project väljer du Lägg till referens. Dialogrutan Lägg till referens visas.

  7. Välj följande sammansättningar i listan på fliken .NET och klicka sedan på OK.

    • Microsoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfo

    • Replikeringsagentbibliotek

    Not

    Använd CTRL-tangenten för att välja fler än en fil.

  8. (Valfritt) Upprepa steg 6. Klicka på fliken Bläddra, gå till C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dlloch klicka sedan på OK.

  9. På menyn Visa klickar du på Code.

  10. I koden skriver du följande Importer-instruktioner för att kvalificera typerna i RMO-namnrymderna.

    ' 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   
    

Ansluta till en replikeringsserver

RMO-programmeringsobjekt kräver att en anslutning till en instans av SQL Server görs med hjälp av en instans av klassen ServerConnection. Den här anslutningen till servern görs oberoende av RMO-programmeringsobjekt. Det skickas sedan till RMO-objektet antingen när instansen skapas eller genom tilldelning till P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext-egenskapen för objektet. På så sätt kan ett RMO-programmeringsobjekt och anslutningsobjektinstanserna skapas och hanteras separat, och ett enda anslutningsobjekt kan återanvändas med flera RMO-programmeringsobjekt. Följande regler gäller för anslutningar till en replikeringsserver:

  • Alla egenskaper för anslutningen definieras för ett visst ServerConnection objekt.

  • En anslutning till varje instans av SQL Server måste ha ett eget ServerConnection objekt.

  • Det ServerConnection objektet tilldelas egenskapen P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext för RMO-programmeringsobjektet som skapas eller används på servern.

  • Metoden Connect öppnar anslutningen till servern. Den här metoden måste anropas innan du anropar metoder som har åtkomst till servern på RMO-programmeringsobjekt med hjälp av anslutningen.

  • Eftersom både RMO och SQL Server Management Objects (SMO) använder klassen ServerConnection för anslutningar till SQL Server kan samma anslutning användas av både RMO- och SMO-objekt. Mer information finns i Ansluta till en instans av SQL Server.

  • All autentiseringsinformation för att upprätta anslutningen och logga in på servern anges i ServerConnection-objektet.

  • Windows-autentisering är standard. Om du vill använda SQL Server-autentisering måste LoginSecure anges till false och Login och Password måste anges till en giltig SQL Server-inloggning och ett giltigt lösenord för SQL Server. Säkerhetsautentiseringsuppgifter måste alltid lagras och hanteras på ett säkert sätt och tillhandahållas vid körning när det är möjligt.

  • För flertrådade program ska ett separat ServerConnection objekt användas i varje tråd.

Anropa metoden DisconnectServerConnection-objektet för att stänga aktiva serveranslutningar som används av RMO-objekt.

Ange RMO-egenskaper

Egenskaperna för RMO-programmeringsobjekt representerar egenskaperna för dessa replikeringsobjekt på servern. När du skapar nya replikeringsobjekt på servern används RMO-egenskaper för att definiera dessa objekt. För befintliga objekt representerar RMO-egenskaperna det befintliga objektets egenskaper, som endast kan ändras för egenskaper som är skrivbara eller kan ställas in. Egenskaper kan anges för nya objekt eller befintliga objekt.

Ange egenskaper för nya replikeringsobjekt

När du skapar ett nytt replikeringsobjekt på servern måste du ange alla nödvändiga egenskaper innan du anropar metoden Create för objektet. Mer information om hur du anger egenskaper för ett nytt replikeringsobjekt finns i Konfigurera publicering och distribution.

Ange egenskaper för befintliga replikeringsobjekt

För replikeringsobjekt som finns på servern kan RMO, beroende på objektet, ha stöd för möjligheten att ändra vissa eller alla dess egenskaper. Endast skrivbara eller inställbara egenskaper kan ändras. Innan egenskaper kan ändras måste antingen Load eller metoden M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties anropas för att hämta de aktuella egenskaperna från servern. Att anropa dessa metoder anger att ett befintligt objekt håller på att ändras.

När objektegenskaperna ändras genomför RMO som standard dessa ändringar på servern baserat på körningsläget för ServerConnection som används. Metoden P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject kan användas för att verifiera att ett objekt finns på servern innan du försöker hämta eller ändra dess egenskaper. Mer information om hur du ändrar egenskaperna för ett replikeringsobjekt finns i Visa och ändra egenskaper för distributör och utgivare.

Not

När flera RMO-klienter eller flera instanser av ett RMO-programmeringsobjekt har åtkomst till samma replikeringsobjekt på servern kan metoden Uppdatera för RMO-objektet anropas för att uppdatera egenskaperna baserat på objektets aktuella tillstånd på servern.

Ändringar i cachelagringsegenskap

När egenskapen SqlExecutionModes är inställd på CaptureSql registreras alla Transact-SQL-instruktioner som genereras av RMO så att de kan köras manuellt i en enda batch med någon av körningsmetoderna. Med RMO kan du cachelagera egenskapsändringar och checka in dem i en enda batch med hjälp av objektets M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges-metod. Om du vill cachelagrat egenskapsändringar måste P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges-egenskapen för objektet anges till sant. När cachelagringsegenskapen ändras i RMO styr ServerConnection-objektet fortfarande när ändringar skickas till servern. Mer information om att cachelagra egenskapsändringar för ett replikeringsobjekt finns i Visa och ändra egenskaper för distributör och utgivare.

Viktig

Även om klassen ServerConnection har stöd för att deklarera explicita transaktioner vid inställning av egenskaper, kan sådana transaktioner störa interna replikeringstransaktioner, ge oväntade resultat och bör inte användas med RMO.

Aktivera TLS 1.2-stöd för RMO-komponenter

TLS1.2-stöd för RMO-komponenter i Windows 2012 och lägre kan aktiveras genom att installera uppdateringen KB 3140245och skapa registernycklarna enligt beskrivningen i artikeln. I Windows 2012 R2 och senare versioner behöver endast registernycklarna som nämns i artikeln ovan skapas.

Exempel

Det här exemplet visar cachelagring av egenskapsändringar. Ändringar som görs i attributen för en transaktionspublikation cachelagras tills de uttryckligen skickas till servern.

// 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();
}