Replication Management Objects Concepts
Gilt für: SQL Server Azure SQL Managed Instance
Replikationsverwaltungsobjekte (Replication Management Objects, RMO) ist eine Assembly mit verwaltetem Code, 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 für die Programmierung aller Aspekte der SQL Server-Replikation entwickelt. Der RMO-Namespace ist Microsoft.SqlServer.Replicationund wird von der Microsoft.SqlServer.Rmo.dll implementiert, bei der es sich um eine Microsoft .NET Framework-Assembly handelt. 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 Clientkonnektivitätskomponenten ab, die in allen Versionen von SQL Server mit Ausnahme von SQL Server Compact enthalten sind. Um eine Anwendung basierend auf RMO bereitzustellen, müssen Sie eine Version von SQL Server installieren, die Replikationskomponenten und Clientkonnektivitätskomponenten auf dem Computer enthält, auf dem die Anwendung ausgeführt wird.
Erste Schritte mit RMO
In diesem Abschnitt wird beschrieben, wie Sie ein einfaches RMO-Projekt mit Microsoft Visual Studio starten.
So erstellen Sie ein neues Microsoft Visual C#-Projekt
Starten Sie Visual Studio.
Klicken Sie im Menü "Datei " auf "NewProject". Das Dialogfeld "Neues Projekt " wird angezeigt.
Wählen Sie im Dialogfeld Projekttypen den Typ Visual C#-Projekte aus. Wählen Sie im Bereich Vorlagen die Option Windows-Anwendung aus.
(Optional) Geben Sie im Feld Name einen Namen für die neue Anwendung ein.
Klicken Sie auf OK, um die Visual C# Windows-Vorlage zu laden.
Wählen Sie im Menü Projekt die Option Verweis hinzufügen aus. Das Dialogfeld Verweis hinzufügen wird angezeigt.
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.
(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".
Klicken Sie im Menü Ansicht auf Code.
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
Starten Sie Visual Studio.
Wählen Sie im Menü Datei die Option Neues Projekt aus. Das Dialogfeld Neues Projekt wird angezeigt.
Wählen Sie im Projekttypenbereich Visual Basic aus. Wählen Sie im Vorlagenbereich die Option Windows-Anwendung aus.
(Optional) Geben Sie im Feld Name einen Namen für die neue Anwendung ein.
Klicken Sie auf OK, um die Visual Basic Windows-Vorlage zu laden.
Wählen Sie im Menü Projekt die Option Verweis hinzufügen aus. Das Dialogfeld Verweis hinzufügen wird angezeigt.
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.
(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".
Klicken Sie im Menü Ansicht auf Code.
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
RMO-Programmierobjekte erfordern, dass eine Verbindung mit einer Instanz von SQL Server mithilfe einer Instanz der ServerConnection Klasse hergestellt wird. 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 RMO und SQL Server Management Objects (SMO) beide die ServerConnection Klasse für Verbindungen mit SQL Server verwenden, kann die gleiche Verbindung sowohl von RMO- als auch von SMO-Objekten verwendet werden. 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 SQL Server-Authentifizierung zu verwenden, LoginSecure muss auf "false " festgelegt sein und Login Password muss auf eine gültige SQL Server-Anmeldung und ein gültiges Kennwort festgelegt werden. 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();
}