Replication Management Objects Concepts

Gilt für:SQL ServerAzure SQL Managed Instance

Bei Replikationsverwaltungsobjekten (RMO) handelt es sich um eine verwaltete Codeassembly, die Replikationsfunktionen für SQL Server kapselt. RMO wird durch den Microsoft.SqlServer.Replication-Namespace implementiert.

In den folgenden Abschnitten wird beschrieben, wie Sie RMO für die programmgesteuerte Kontrolle von Replikationsaufgaben verwenden können:

Verteilung konfigurieren
Die Themen in diesem Abschnitt veranschaulichen, wie RMO zum Konfigurieren von Veröffentlichung und Verteilung verwendet wird.

Erstellen einer Veröffentlichung
Die Themen in diesem Abschnitt demonstrieren, wie mit RMO Veröffentlichungen und Artikel erstellt, gelöscht und geändert werden.

Abonnieren von Veröffentlichungen
Die Themen in diesem Abschnitt beschreiben, wie mit RMO Abonnements erstellt, gelöscht und geändert werden.

Sichern einer Replikationstopologie
Die Themen in diesem Abschnitt erläutern, wie mit RMO Sicherheitseinstellungen angezeigt und geändert werden.

Synchronisieren von Abonnements (Replikation)
Die Themen in diesem Abschnitt veranschaulichen, wie Abonnements synchronisiert werden.

Überwachen der Replikation
Die Themen in diesem Abschnitt beschreiben, wie eine Replikationstopologie programmgesteuert überwacht wird.

Einführung in die RMO-Programmierung

RMO wurde zum Programmieren aller Aspekte der SQL Server-Replikation entwickelt. Der RMO-Namespace lautet Microsoft.SqlServer.Replication. Er wird durch die Microsoft.SqlServer.Rmo.dll, eine Microsoft .NET Framework-Assembly, implementiert. Die Microsoft.SqlServer.Replication.dll-Assembly, die ebenfalls zum Microsoft.SqlServer.Replication-Namespace gehört, implementiert eine verwaltete Codeschnittstelle zum Programmieren der verschiedenen Replikations-Agents (Momentaufnahme-Agent, Verteilungs-Agent und Merge-Agent). Der Zugriff auf die entsprechenden Klassen kann in RMO erfolgen, um Abonnements zu synchronisieren. Klassen im Microsoft.SqlServer.Replication.BusinessLogicSupport-Namespace, die durch die Microsoft.SqlServer.Replication.BusinessLogicSupport.dll-Assembly implementiert werden, dienen zum Erstellen benutzerdefinierter Geschäftslogik für die Mergereplikation. Diese Assembly ist von RMO unabhängig.

Bereitstellen von Anwendungen auf Grundlage von RMO

RMO hängt von den Replikationskomponenten und den Clientverbindungskomponenten ab, die in allen Versionen von SQL Server mit Ausnahme von SQL Server Compact enthalten sind. Zum Bereitstellen einer Anwendung auf Grundlage von RMO müssen Sie eine Version von SQL Server, die Replikationskomponenten und Clientverbindungskomponenten enthält, auf dem Computer installieren, auf dem die Anwendung ausgeführt wird.

Erste Schritte mit RMO

In diesem Abschnitt wird beschrieben, wie ein einfaches RMO-Projekt mit Microsoft Visual Studio gestartet wird.

So erstellen Sie ein neues Microsoft Visual C#-Projekt

  1. Starten Sie Visual Studio.

  2. Klicken Sie im Menü Datei auf NeuProjekt. Das Dialogfeld Neues Projekt wird angezeigt.

  3. Wählen Sie im Dialogfeld Projekttypen den Typ Visual C#-Projekte aus. Wählen Sie im Bereich Vorlagen die Option Windows-Anwendung aus.

  4. (Optional) Geben Sie im Feld Name einen Namen für die neue Anwendung ein.

  5. Klicken Sie auf OK, um die Visual C# Windows-Vorlage zu laden.

  6. Wählen Sie im Menü Projekt die Option Verweis hinzufügen aus. Das Dialogfeld Verweis hinzufügen wird angezeigt.

  7. Wählen Sie die folgenden Assemblys aus der Liste auf der Registerkarte .NET aus, und klicken Sie anschließend auf OK.

    • Microsoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfo

    • Replication Agent Library

    Hinweis

    Mit gedrückter STRG-Taste können Sie mehrere Dateien gleichzeitig auswählen.

  8. (Optional) Wiederholen Sie Schritt 6. Klicken Sie auf die Registerkarte Durchsuchen, navigieren Sie zu C:\Programme\Microsoft SQL Server\nnn\COM, wählen Sie Microsoft.SqlServer.Replication.BusinessLogicSupport.dll aus, und klicken Sie dann auf OK.

  9. Klicken Sie im Menü Ansicht auf Code.

  10. Geben Sie im Code vor der Namespace-Anweisung die folgenden using-Anweisungen ein, um die Typen in den RMO-Namespaces zu qualifizieren:

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

So erstellen Sie ein neues Microsoft Visual Basic .NET-Projekt

  1. Starten Sie Visual Studio.

  2. Wählen Sie im Menü Datei die Option Neues Projekt aus. Das Dialogfeld Neues Projekt wird angezeigt.

  3. Wählen Sie im Projekttypenbereich Visual Basic aus. Wählen Sie im Vorlagenbereich die Option Windows-Anwendung aus.

  4. (Optional) Geben Sie im Feld Name einen Namen für die neue Anwendung ein.

  5. Klicken Sie auf OK, um die Visual Basic Windows-Vorlage zu laden.

  6. Wählen Sie im Menü Projekt die Option Verweis hinzufügen aus. Das Dialogfeld Verweis hinzufügen wird angezeigt.

  7. Wählen Sie die folgenden Assemblys aus der Liste auf der Registerkarte .NET aus, und klicken Sie anschließend auf OK.

    • Microsoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfo

    • Replication Agent Library

    Hinweis

    Mit gedrückter STRG-Taste können Sie mehrere Dateien gleichzeitig auswählen.

  8. (Optional) Wiederholen Sie Schritt 6. Klicken Sie auf die Registerkarte Durchsuchen, navigieren Sie zu C:\Programme\Microsoft SQL Server\nnn\COM, wählen Sie Microsoft.SqlServer.Replication.BusinessLogicSupport.dll aus, und klicken Sie dann auf OK.

  9. Klicken Sie im Menü Ansicht auf Code.

  10. Geben Sie im Code vor möglichen Deklarationen die folgenden Imports-Anweisungen ein, um die Typen im RMO-Namespace zu qualifizieren.

    ' 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   
    

Verbinden mit einem Replikationsserver

Bei RMO-Programmierobjekten ist es erforderlich, dass eine Verbindung zu einer Instanz von SQL Server mithilfe einer Instanz der ServerConnection-Klasse erfolgt. Diese Verbindung mit dem Server erfolgt unabhängig von einem RMO-Programmierobjekt. Sie wird anschließend entweder während der Erstellung der Instanz oder durch die Zuweisung zur P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContex-Eigenschaft des Objekts an das RMO-Objekt übergeben. Dadurch können ein RMO-Programmierobjekt und die Instanzen des Verbindungsobjekts getrennt erstellt und verwaltet werden. Zudem kann ein einzelnes Verbindungsobjekt mit mehreren RMO-Programmierobjekten verwendet werden. Für Verbindungen mit einem Replikationsserver gelten die folgenden Regeln:

  • Alle Eigenschaften für die Verbindung werden für ein angegebenes ServerConnection-Objekt definiert.

  • Eine Verbindung zu jeder Instanz von SQL Server muss über ein eigenes ServerConnection-Objekt verfügen.

  • Das ServerConnection-Objekt ist der P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext-Eigenschaft des RMO-Programmierobjekts zugewiesen, das auf dem Server erstellt oder auf das über den Server zugegriffen wird.

  • Mit der Connect-Methode wird die Verbindung mit dem Server geöffnet. Diese Methode muss aufgerufen werden, bevor Methoden aufgerufen werden, die auf den Server zugreifen, oder bevor RMO-Programmierobjekte aufgerufen werden, die diese Verbindung verwenden.

  • Da sowohl RMO- als auch SQL Server-Verwaltungsobjekte (SMO) die ServerConnection-Klasse für Verbindungen zu SQL Server verwenden, können RMO- und SMO-Objekte die gleiche Verbindung verwenden. Weitere Informationen finden Sie unter Hinzufügen von Funktionen zu einer Instanz von SQL Server.

  • Sämtliche Authentifizierungsinformationen, die zur Herstellung der Verbindung und zur erfolgreichen Anmeldung beim Server erforderlich sind, sind im ServerConnection-Objekt angegeben.

  • Die Windows-Authentifizierung ist als Standard vorgegeben. Um die Authentifizierung von SQL Server verwenden zu können, müssen LoginSecure auf FALSE und Login sowie Password auf eine gültige Kombination aus Anmeldeinformationen und Kennwort für SQL Server gesetzt sein. Anmeldeinformationen müssen stets sicher aufbewahrt und behandelt werden. Nach Möglichkeit sollte die Eingabe zur Laufzeit erfolgen.

  • Für Multithreadanwendungen sollte in jedem Thread ein separates ServerConnection-Objekt verwendet werden.

Rufen Sie die Disconnect-Methode für das ServerConnection-Objekt auf, um aktive, von RMO-Objekten verwendete Serververbindungen zu schließen.

Festlegen von RMO-Eigenschaften

Die Eigenschaften von RMO-Programmierobjekten stellen die Eigenschaften dieser Replikationsobjekte auf dem Server dar. Wenn Sie neue Replikationsobjekte auf dem Server erstellen, werden diese Objekte mithilfe von RMO-Eigenschaften definiert. Für vorhandene Objekte stellen die RMO-Eigenschaften die Eigenschaften des vorhandenen Objekts dar, die nur für nicht schreibgeschützte oder festlegbare Eigenschaften geändert werden können. Eigenschaften können für neue Objekte oder vorhandene Objekte festgelegt werden.

Festlegen von Eigenschaften für neue Replikationsobjekte

Beim Erstellen eines neuen Replikationsobjekts auf dem Server müssen Sie alle erforderlichen Eigenschaften angeben, bevor die Create-Methode des Objekts aufgerufen wird. Weitere Informationen zum Festlegen von Eigenschaften für ein neues Replikationsobjekt finden Sie unter Konfigurieren der Veröffentlichung und der Verteilung.

Festlegen von Eigenschaften für vorhandene Replikationsobjekte

Für auf dem Server vorhandene Replikationsobjekte unterstützt RMO abhängig vom Objekt die Fähigkeit, einige oder alle Eigenschaften zu ändern. Nur nicht schreibgeschützte oder festlegbare Eigenschaften können geändert werden. Bevor Eigenschaften geändert werden können, muss entweder die Load-Methode oder die M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties-Methode aufgerufen werden, um die aktuellen Eigenschaften vom Server abzurufen. Durch Aufrufen dieser Methoden wird angegeben, dass ein vorhandenes Objekt geändert wird.

Beim Ändern der Objekteigenschaften führt RMO standardmäßig einen Commit für diese Änderungen auf dem Server auf Grundlage des verwendeten Ausführungsmodus von ServerConnection aus. Mit der P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject-Methode können Sie überprüfen, ob ein Objekt auf dem Server vorhanden ist, bevor Sie versuchen, die entsprechenden Eigenschaften abzurufen oder zu ändern. Informationen zum Ändern der Eigenschaften eines Replikationsobjekts finden Sie unter Anzeigen und Ändern der Verteiler- und Verlegereigenschaften.

Hinweis

Wenn mehrere RMO-Clients oder mehrere Instanzen eines RMO-Programmierobjekts auf das gleiche Replikationsobjekt auf dem Server zugreifen, kann die Refresh-Methode des RMO-Objekts aufgerufen werden, um Eigenschaften basierend auf dem aktuellen Status des Objekts auf dem Server zu aktualisieren.

Zwischenspeichern von Eigenschaftsänderungen

Wenn die SqlExecutionModes -Eigenschaft auf CaptureSql alle Transact-SQL-Anweisungen festgelegt ist, die von RMO generiert werden, werden erfasst, sodass sie manuell in einem einzelnen Batch mithilfe einer der Ausführungsmethoden ausgeführt werden können. Mit RMO können Sie Eigenschaftsänderungen zwischenspeichern und mit der M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges-Methode des Objekts einen Commit für alle Änderungen gleichzeitig in einem einzelnen Batch durchführen. Um Eigenschaftsänderungen zwischenzuspeichern, muss die P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges-Eigenschaft des Objekts auf TRUE festgelegt werden. Beim Zwischenspeichern von Eigenschaftsänderungen in RMO wird der Zeitpunkt, wann Änderungen an den Server gesendet werden, nach wie vor vom ServerConnection-Objekt gesteuert. Weitere Informationen zum Zwischenspeichern von Eigenschaftsänderungen eines Replikationsobjekts finden Sie unter Anzeigen und Ändern der Verteiler- und Verlegereigenschaften.

Wichtig

Obwohl die ServerConnection-Klasse das Deklarieren von expliziten Transaktionen beim Festlegen von Eigenschaften unterstützt, können diese Transaktionen interne Replikationstransaktionen beeinträchtigen und zu unerwarteten Ergebnissen führen und sollten daher nicht mit RMO verwendet werden.

Aktivieren von TLS 1.2-Unterstützung für RMO-Komponenten

Die TLS 1.2-Unterstützung für RMO-Komponenten unter Windows 2012 und niedriger lässt sich aktivieren, indem Sie das Update KB 3140245 installieren und die Registrierungsschlüssel wie in diesem Artikel erklärt erstellen. Unter Windows 2012 R2 und höher müssen nur die in diesem Artikel erwähnten Registrierungsschlüssel erstellt werden.

Beispiel

In diesem Beispiel wird das Zwischenspeichern der Eigenschaftsänderungen veranschaulicht. Änderungen an den Attributen einer Transaktionsveröffentlichung werden zwischengespeichert, bis sie explizit an den Server gesendet werden.

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

Weitere Informationen

Replication System Stored Procedures Concepts
Konzepte für die Replikationsprogrammierung