Concepts liés à Replication Management ObjectsReplication Management Objects Concepts

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database (Managed Instance uniquement) nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

RMO (Replication Management Objects) est un assembly de code managé qui encapsule les fonctionnalités de réplication pour SQL ServerSQL Server.Replication Management Objects (RMO) is a managed code assembly that encapsulates replication functionalities for SQL ServerSQL Server. RMO est implémenté par l'espace de noms Microsoft.SqlServer.Replication.RMO is implemented by the Microsoft.SqlServer.Replication namespace.

Les rubriques des sections suivantes indiquent comment utiliser RMO pour contrôler par programme les tâches de réplication :The topics in the following sections describe how you can use RMO to programmatically control replication tasks:

Configurer la distributionConfigure Distribution
Les rubriques de cette section indiquent comment utiliser RMO pour configurer la publication et la distribution.Topics in this section show how to use RMO to configure publishing and distribution.

Create a PublicationCreate a Publication
Les rubriques de cette section indiquent comment utiliser RMO pour créer, supprimer et modifier des publications et des articles.Topics in this section show how to use RMO to create, delete, and modify publications and articles.

S'abonner à des publicationsSubscribe to Publications
Les rubriques de cette section indiquent comment utiliser RMO pour créer, supprimer et modifier des abonnements.Topics in this section show how to use RMO to create, delete, and modify subscriptions.

Sécuriser une topologie de réplicationSecure a Replication Topology
Les rubriques de cette section indiquent comment utiliser RMO pour afficher et modifier des paramètres de sécurité.Topics in this section show how to use RMO to view and modify security settings.

Synchroniser des abonnements (réplication)Synchronize Subscriptions (Replication)
Les rubriques de cette section indiquent comment synchroniser des abonnements.Topics in this section show how to synchronize subscriptions.

Surveillance de la réplicationMonitoring Replication
Les rubriques de cette section indiquent comment analyser par programme une topologie de réplication.Topics in this section show how to programmatically monitor a replication topology.

Présentation de la programmation RMOIntroduction to RMO Programming

RMO est conçu pour la programmation de tous les aspects de la réplication SQL ServerSQL Server.RMO is designed for programming all aspects of SQL ServerSQL Server replication. L'espace de noms RMO est Microsoft.SqlServer.Replication, et il est implémenté par le fichier Microsoft.SqlServer.Rmo.dll, qui est un assembly MicrosoftMicrosoft .NET Framework.The RMO namespace is Microsoft.SqlServer.Replication, and it is implemented by the Microsoft.SqlServer.Rmo.dll, which is a MicrosoftMicrosoft .NET Framework assembly. L'assembly Microsoft.SqlServer.Replication.dll, qui appartient également à l'espace de noms Microsoft.SqlServer.Replication, implémente une interface de code managé pour la programmation des différents agents de réplication (Agent d'instantané, Agent de distribution et Agent de fusion).The Microsoft.SqlServer.Replication.dll assembly, which also belongs to the Microsoft.SqlServer.Replication namespace, implements a managed code interface for programming the various replication agents (Snapshot Agent, Distribution Agent, and Merge Agent). Ses classes sont accessibles à partir de RMO pour synchroniser des abonnements.Its classes can be accessed from RMO to synchronize subscriptions. Les classes de l'espace de noms Microsoft.SqlServer.Replication.BusinessLogicSupport, implémenté par l'assembly Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, sont utilisées pour créer la logique métier personnalisée pour la réplication de fusion.Classes in the Microsoft.SqlServer.Replication.BusinessLogicSupport namespace, implemented by the Microsoft.SqlServer.Replication.BusinessLogicSupport.dll assembly, are used to create custom business logic for merge replication. Cet assembly est indépendant de RMO.This assembly is independent from RMO.

Déploiement d'applications basées sur RMODeploying Applications Based on RMO

RMO dépend des composants de réplication et des composants de connectivité client qui sont inclus dans toutes les versions de SQL ServerSQL Server sauf SQL Server Compact.RMO depends on the replication components and client connectivity components that are included with all versions of SQL ServerSQL Server except SQL Server Compact. Pour déployer une application basée sur RMO, vous devez installer une version de SQL ServerSQL Server incluant les composants de réplication et les composants de connectivité client sur l’ordinateur sur lequel l’application s’exécutera.To deploy an application based on RMO, you must install a version of SQL ServerSQL Server that includes replication components and client connectivity components on the computer on which the application will run.

Mise en route avec RMOGetting Started with RMO

Cette section décrit comment démarrer un projet RMO simple à l'aide de MicrosoftMicrosoft Visual Studio.This section describes how to start a simple RMO project using MicrosoftMicrosoft Visual Studio.

Pour créer un projet Microsoft Visual C#To create a new Microsoft Visual C# project

  1. Démarrez Visual Studio.Start Visual Studio.

  2. Dans le menu Fichier, cliquez sur Nouveau projet.On the File menu, click NewProject. La boîte de dialogue Nouveau projet s'affiche.The New Project dialog box appears.

  3. Dans la boîte de dialogue Types de projets, sélectionnez Projets Visual C# .In the Project Types dialog box, select Visual C# Projects. Dans le volet Modèles, sélectionnez Application Windows.In the Templates pane, select Windows Application.

  4. (Facultatif) Dans la zone Nom, tapez le nom de la nouvelle application.(Optional) In Name, type the name of the new application.

  5. Cliquez sur OK pour charger le modèle Windows Visual C#.Click OK to load the Visual C# Windows template.

  6. Dans le menu Projet, sélectionnez l’élément Ajouter une référence.On the Project menu, select Add Reference item. La boîte de dialogue Ajouter une référence s’affiche.The Add Reference dialog box appears.

  7. Sélectionnez les assemblys suivants dans la liste de l’onglet .NET, puis cliquez sur OK.Select the following assemblies from the list on the .NET tab, and then click OK.

    • Interface de programmation .NET Microsoft.SqlServer.ReplicationMicrosoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.ConnectionInfo

    • Bibliothèque de l'Agent de réplicationReplication Agent Library

    Notes

    Utilisez la touche CTRL pour sélectionner plusieurs fichiers.Use the CTRL key to select more than one file.

  8. (Facultatif) Répétez l'étape 6.(Optional) Repeat step 6. Cliquez sur l’onglet Parcourir, accédez à C:\Program Files\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\COM, sélectionnez Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, puis cliquez sur OK.Click the Browse tab, navigate to C:\Program Files\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, and then click OK.

  9. Dans le menu Affichage , cliquez sur Code.On the View menu, click Code.

  10. Dans le code, avant l’instruction d’espace de noms, tapez les instructions using suivantes pour qualifier les types dans les espaces de noms RMO :In the code, before the namespace statement, type the following using statements to qualify the types in the RMO namespaces:

Nous sommes à votre écoute : Si vous trouvez des informations obsolètes ou incorrectes dans cet article, par exemple une étape ou une erreur dans un code, n’hésitez pas à nous en faire part.We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. Vous pouvez cliquer sur le bouton Cette page dans la section Commentaires au bas de cette page.You can click the This page button in the Feedback section at the bottom of this page. Nous lisons chaque commentaire concernant SQL, généralement le jour suivant.We read every item of feedback about SQL, typically the next day. Nous vous remercions.Thanks.

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

Pour créer un projet Microsoft Visual Basic .NETTo create a new Microsoft Visual Basic .NET project

  1. Démarrez Visual Studio.Start Visual Studio.

  2. Dans le menu Fichier, sélectionnez Nouveau projet.On the File menu, select New Project. La boîte de dialogue Nouveau projet s'affiche.The New Project dialog box appears.

  3. Dans le volet Types de projets, sélectionnez Visual Basic.In the Project Types pane, select Visual Basic. Dans le volet Modèles, sélectionnez Application Windows.In the Templates pane, select Windows Application.

  4. (Facultatif) Dans la zone Nom, tapez le nom de la nouvelle application.(Optional) In the Name box, type the name of the new application.

  5. Cliquez sur OK pour charger le modèle Windows Visual Basic.Click OK to load the Visual Basic Windows template.

  6. Dans le menu Projet, sélectionnez Ajouter une référence.On the Project menu, select Add Reference. La boîte de dialogue Ajouter une référence s’affiche.The Add Reference dialog box appears.

  7. Sélectionnez les assemblys suivants dans la liste de l’onglet .NET, puis cliquez sur OK.Select the following assemblies from the list on the .NET tab, and then click OK.

    • Interface de programmation .NET Microsoft.SqlServer.ReplicationMicrosoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.ConnectionInfo

    • Bibliothèque de l'Agent de réplicationReplication Agent Library

    Notes

    Utilisez la touche CTRL pour sélectionner plusieurs fichiers.Use the CTRL key to select more than one file.

  8. (Facultatif) Répétez l'étape 6.(Optional) Repeat step 6. Cliquez sur l’onglet Parcourir, accédez à C:\Program Files\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\COM, sélectionnez Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, puis cliquez sur OK.Click the Browse tab, navigate to C:\Program Files\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, and then click OK.

  9. Dans le menu Affichage , cliquez sur Code.On the View menu, click Code.

  10. Dans le code, avant les déclarations, tapez les instructions Imports suivantes pour qualifier les types dans les espaces de noms RMO.In the code, before any declarations, type the following Imports statements to qualify the types in the RMO namespaces.

    ' 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   
    

Connexion à un serveur de réplicationConnecting to a Replication Server

Pour les objets de programmation RMO, il est nécessaire qu'une connexion à une instance de SQL ServerSQL Server soit établie en utilisant une instance de la classe ServerConnection.RMO programming objects require that a connection to an instance of SQL ServerSQL Server is made by using an instance of the ServerConnection class. Cette connexion au serveur est établie indépendamment des objets de programmation RMO.This connection to the server is made independently of any RMO programming objects. Elle est ensuite transmise à l’objet RMO lors de la création de l’instance ou par assignation à la propriété P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext de l’objet.It is then passed to the RMO object either during instance creation or by assignment to the P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext property of the object. De cette manière, un objet de programmation RMO et les instances d'objet de connexion peuvent être créés et gérés séparément, et un objet de connexion peut être réutilisé avec plusieurs objets de programmation RMO.In this manner, an RMO programming object and the connection object instances can be created and managed separately, and a single connection object can be reused with multiple RMO programming objects. Les règles suivantes s'appliquent aux connexions à un serveur de réplication :The following rules apply for connections to a replication server:

  • Toutes les propriétés de la connexion sont définies pour un objet ServerConnection donné.All properties for the connection are defined for a given ServerConnection object.

  • Une connexion à chaque instance de SQL ServerSQL Server doit comporter son propre objet ServerConnection.A connection to each instance of SQL ServerSQL Server must have its own ServerConnection object.

  • L'objet ServerConnection est assigné à la propriété P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext de l'objet de programmation RMO créé ou faisant l'objet d'un accès sur le serveur.The ServerConnection object is assigned to the P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext property of the RMO programming object being created or accessed on the server.

  • La méthode Connect établit la connexion au serveur.The Connect method opens the connection to the server. Vous devez appeler cette méthode avant d'appeler une méthode qui accède au serveur sur un objet de programmation RMO à l'aide de la connexion.This method must be called before calling any methods that access the server on any RMO programming objects using the connection.

  • Dans la mesure où RMO et SQL ServerSQL Server Management Objects (SMO) utilisent tous deux la classe ServerConnection pour les connexions à SQL ServerSQL Server, les objets RMO et SMO peuvent utiliser la même connexion.Because RMO and SQL ServerSQL Server Management Objects (SMO) both use the ServerConnection class for connections to SQL ServerSQL Server, the same connection can be used by both RMO and SMO objects. Pour plus d’informations, consultez Connexion à une instance de SQL Server.For more information, see Connecting to an Instance of SQL Server.

  • Toutes les informations d'authentification nécessaires pour l'établissement de la connexion et l'ouverture d'une session sur le serveur sont fournies dans l'objet ServerConnection.All authentication information to make the connection and successfully log on to the server is supplied in the ServerConnection object.

  • La méthode par défaut est l'authentification Windows.Windows Authentication is the default. Pour utiliser l’authentification SQL ServerSQL Server, LoginSecure doit avoir la valeur false, et Login et Password doivent être définis avec un nom d’ouverture de session et un mot de passe SQL ServerSQL Server valides.To use SQL ServerSQL Server Authentication, LoginSecure must be set to false and Login and Password must be set to a valid SQL ServerSQL Server logon and password. Les informations d'identification de sécurité doivent toujours être stockées et gérées de manière sécurisée, et elles doivent être fournies au moment de l'exécution chaque fois que cela est possible.Security credentials must always be stored and handled securely, and supplied at run-time whenever possible.

  • Pour les applications multithread, un objet ServerConnection distinct doit être utilisé dans chaque thread.For multithreaded applications, a separate ServerConnection object should be used in each thread.

Appelez la méthode Disconnect sur l'objet ServerConnection pour fermer les connexions au serveur actives utilisées par les objets RMO.Call the Disconnect method on the ServerConnection object to close active server connections used by RMO objects.

Définition des propriétés RMOSetting RMO Properties

Les propriétés d'objets de programmation RMO représentent les propriétés de ces objets de réplication sur le serveur.The properties of RMO programming objects represent the properties of these replication objects at the server. Lorsque des objets de réplication sont créés sur le serveur, les propriétés RMO sont utilisées pour définir ces objets.When creating new replication objects at the server, RMO properties are used to define these objects. Pour les objets existants, les propriétés RMO représentent les propriétés de l'objet existant, qui peuvent être modifiées uniquement pour les propriétés accessibles en écriture ou définissables.For existing objects, the RMO properties represent the existing object's properties, which can be modified only for properties that are writable or settable. Les propriétés peuvent être définies sur les nouveaux objets ou les objets existants.Properties can be set on new objects or existing objects.

Définition des propriétés des nouveaux objets de réplicationSetting Properties for New Replication Objects

Quand vous créez un objet de réplication sur le serveur, vous devez spécifier toutes les propriétés requises avant d’appeler la méthode Create de l’objet.When creating a new replication object at the server, you must specify all required properties before calling the Create method of the object. Pour plus d’informations sur la définition des propriétés d’un nouvel objet de réplication, consultez Configurer la publication et la distribution.For more information about setting properties for a new replication object, see Configure Publishing and Distribution.

Définition des propriétés des objets de réplication existantsSetting Properties for Existing Replication Objects

Pour un objet de réplication qui réside sur le serveur, en fonction de l'objet, RMO peut être en mesure de modifier certaines de ses propriétés ou toutes ses propriétés.For replication objects that exist at the server, depending on the object, RMO might support the ability to change some or all of its properties. Seules les propriétés accessibles en écriture ou définissables peuvent être modifiées.Only writable or settable properties can be changed. Avant de modifier les propriétés, vous devez appeler Load ou la méthode M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties pour obtenir les propriétés actuelles auprès du serveur.Before properties can be changed, either the Load or the M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties method must be called to get the current properties from the server. L'appel de ces méthodes indique qu'un objet existant fait l'objet d'une modification.Calling these methods indicates that an existing object is being modified.

Par défaut, lors de la modification des propriétés d'un objet, RMO valide ces modifications sur le serveur selon le mode d'exécution de l'objet ServerConnection utilisé.By default, when changing object properties, RMO commits these changes to the server based on the execution mode of the ServerConnection being used. La propriété P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject peut être utilisée pour vérifier qu'un objet existe sur le serveur avant la tentative d'extraction ou de modification de ses propriétés.The P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject method can be used to verify that an object exists at the server before attempting to retrieve or change its properties. Pour plus d’informations sur la modification des propriétés d’un objet de réplication, consultez Afficher et modifier les propriétés d’un serveur de distribution ou d’un serveur de publication.For more information about changing the properties of a replication object, see View and Modify Distributor and Publisher Properties.

Notes

Quand plusieurs clients RMO ou plusieurs instances d’un objet de programmation RMO accèdent au même objet de réplication sur le serveur, la méthode Refresh de l’objet RMO peut être appelée pour mettre à jour les propriétés en fonction de l’état actuel de l’objet sur le serveur.When multiple RMO clients or multiple instances of an RMO programming object are accessing the same replication object at the server, the Refresh method of the RMO object can be called to update the properties based on the current state of the object at the server.

Mise en cache de modifications de propriétéCaching Property Changes

Lorsque la propriété SqlExecutionModes a la valeur CaptureSql, toutes les instructions Transact-SQLTransact-SQL générées par RMO sont capturées afin qu'elles puissent être exécutées manuellement dans un lot unique au moyen de l'une des méthodes d'exécution.When the SqlExecutionModes property is set to CaptureSql all Transact-SQLTransact-SQL statements generated by RMO are captured so that they can be executed manually in a single batch by using one of the execution methods. RMO vous permet de mettre en cache les modifications de propriété et de les valider globalement dans un lot unique au moyen de la méthode M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges de l'objet.RMO lets you cache property changes and commit them together in a single batch by using the M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges method of the object. Pour la mise en cache des modifications de propriété, la propriété P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges de l’objet doit avoir la valeur true.To cache property changes, the P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges property of the object must be set to true. Lors de la mise en cache des modifications de propriété dans RMO, l'objet ServerConnection détermine toujours le moment auquel les modifications sont envoyées au serveur.When caching property changes in RMO, the ServerConnection object still controls when changes are sent to the server. Pour plus d’informations sur la mise en cache des modifications de propriété pour un objet de réplication, consultez Afficher et modifier les propriétés d’un serveur de distribution ou d’un serveur de publication.For more information about caching property changes for a replication object, see View and Modify Distributor and Publisher Properties.

Important

Bien que la classe ServerConnection prenne en charge la déclaration de transactions explicites lors de la définition des propriétés, ces transactions peuvent interférer avec les transactions de réplication internes et produire des résultats inattendus. Par conséquent, elles ne doivent pas être utilisées avec RMO.Although the ServerConnection class supports declaring explicit transactions when setting properties, such transactions may interfere with internal replication transactions, can produce unanticipated results, and should not be used with RMO.

Activation de la prise en charge de TLS 1.2 pour les composants RMOEnabling TLS 1.2 Support for RMO Components

Vous pouvez activer la prise en charge de TLS 1.2 pour les composants RMO sur Windows 2012 et versions antérieures en installant la mise à jour KB 3140245 et en créant des clés de Registre, comme indiqué dans l’article.TLS1.2 support for RMO Components on Windows 2012 and lower can be enabled by installing the update KB 3140245, and creating the registry keys as mentioned in the article. Sur Windows 2012 R2 et versions ultérieures, seules doivent être créées les clés de Registre telles qu’indiquées dans l’article ci-dessus.On Windows 2012 R2 and later versions, only the registry keys as mentioned in above article, need to be created.

ExempleExample

Cet exemple illustre la mise en cache des modifications de propriété.This example demonstrates the caching of property changes. Les modifications apportées aux attributs d'une publication transactionnelle sont mises en cache tant qu'elles n'ont pas été envoyées explicitement au serveur.Changes made to the attributes of a transactional publication are cached until they are explicitly sent to the server.

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

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

Voir aussiSee Also

Concepts liés aux procédures stockées système de réplication Replication System Stored Procedures Concepts
Concepts de programmation en matière de réplicationReplication Programming Concepts