Replication Management Objects Concepts

Se aplica a: SQL Server Azure SQL Managed Instance

Replication Management Objects (RMO) es un ensamblado de código administrado que encapsula las funcionalidades de replicación para SQL Server. RMO se implementa mediante el espacio de nombres Microsoft.SqlServer.Replication.

En los temas de las secciones siguientes se describe cómo puede utilizar RMO para controlar mediante programación las tareas de replicación:

Configurar distribución
Los temas de esta sección muestran cómo utilizar RMO para configurar la publicación y la distribución.

Create a Publication (Creación de una publicación)
Los temas de esta sección muestran cómo utilizar RMO para crear, eliminar y modificar las publicaciones y los artículos.

Subscribe to Publications
Los temas de esta sección muestran cómo utilizar RMO para crear, eliminar y modificar las suscripciones.

Proteger una topología de replicación
Los temas de esta sección muestran cómo utilizar RMO para ver y modificar la configuración de seguridad.

Sincronizar suscripciones (replicación)
Los temas de esta sección muestran cómo sincronizar las suscripciones.

Supervisar la replicación
Los temas de esta sección muestran cómo supervisar mediante programación una topología de replicación.

Introducción a la programación de RMO

RMO está diseñado para programar todos los aspectos de la replicación de SQL Server. El espacio de nombres RMO es Microsoft.SqlServer.Replicationy lo implementa el Microsoft.SqlServer.Rmo.dll, que es un ensamblado de Microsoft .NET Framework. El ensamblado Microsoft.SqlServer.Replication.dll, que también pertenece al espacio de nombres Microsoft.SqlServer.Replication, implementa una interfaz de código administrado para programar varios agentes de replicación (Agente de instantáneas, Agente de distribución y Agente de mezcla). Se puede tener acceso a sus clases desde RMO para sincronizar las suscripciones. Las clases en el espacio de nombres Microsoft.SqlServer.Replication.BusinessLogicSupport, que implementa el ensamblado Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, se utilizan para crear una lógica empresarial personalizada para la replicación de mezcla. Este ensamblado es independiente de RMO.

Implementar aplicaciones basadas en RMO

RMO depende de los componentes de replicación y de los componentes de conectividad de cliente que se incluyen con todas las versiones de SQL Server excepto SQL Server Compact. Para implementar una aplicación basada en RMO, debe instalar una versión de SQL Server que incluya componentes de replicación y componentes de conectividad de cliente en el equipo en el que se ejecutará la aplicación.

Introducción a RMO

En esta sección se describe cómo iniciar un proyecto RMO sencillo mediante Microsoft Visual Studio.

Para crear un proyecto nuevo de Microsoft Visual C#

  1. Inicie Visual Studio.

  2. En el menú Archivo , haga clic en NuevoProyecto. Aparece el cuadro de diálogo Nuevo proyecto .

  3. En el cuadro de diálogo Tipos de proyecto, seleccione Proyectos de Visual C#. En el panel Plantillas, seleccione Aplicación para Windows.

  4. (Opcional) en Nombre, escriba el nombre de la nueva aplicación.

  5. Haga clic en Aceptar para cargar la plantilla de Windows de Visual C#.

  6. En el menú Proyecto, seleccione el elemento Agregar referencia. Aparecerá el cuadro de diálogo Agregar referencia.

  7. Seleccione los siguientes ensamblados de la lista de la pestaña .NET y haga clic en Aceptar.

    • Interfaz de programación Microsoft.SqlServer.Replication de .NET

    • Microsoft.SqlServer.ConnectionInfo

    • Biblioteca de agentes de replicación

    Nota:

    Utilice la tecla CTRL para seleccionar más de un archivo.

  8. (Opcional) Repita el paso 6. Haga clic en la pestaña Examinar , vaya a C:\Archivos de programa\Microsoft SQL Server\nnn\COM, seleccione Microsoft.SqlServer.Replication.BusinessLogicSupport.dll y haga clic en Aceptar.

  9. En el menú Ver , haga clic en Código.

  10. En el código, antes de la instrucción de espacio de nombres, escriba las siguientes instrucciones using para certificar los tipos de los espacios de nombres de 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;   
    

Para crear un nuevo proyecto de Microsoft Visual Basic .NET

  1. Inicie Visual Studio.

  2. En el menú Archivo, seleccione Nuevo proyecto. Aparecerá el cuadro de diálogo Nuevo proyecto.

  3. En el panel Tipos de proyecto, seleccione Visual Basic. En el panel Plantillas, seleccione Aplicación para Windows.

  4. (Opcional) en el cuadro Nombre, escriba el nombre de la nueva aplicación.

  5. Haga clic en Aceptar para cargar la plantilla de Windows de Visual Basic.

  6. En el menú Proyecto, seleccione Agregar referencia. Aparecerá el cuadro de diálogo Agregar referencia.

  7. Seleccione los siguientes ensamblados de la lista de la pestaña .NET y haga clic en Aceptar.

    • Interfaz de programación Microsoft.SqlServer.Replication de .NET

    • Microsoft.SqlServer.ConnectionInfo

    • Biblioteca de agentes de replicación

    Nota:

    Utilice la tecla CTRL para seleccionar más de un archivo.

  8. (Opcional) Repita el paso 6. Haga clic en la pestaña Examinar , vaya a C:\Archivos de programa\Microsoft SQL Server\nnn\COM, seleccione Microsoft.SqlServer.Replication.BusinessLogicSupport.dll y haga clic en Aceptar.

  9. En el menú Ver , haga clic en Código.

  10. En el código, antes de cualquier declaración, escriba las siguientes instrucciones Imports para certificar los tipos de los espacios de nombres de 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   
    

Conectar a un servidor de replicación

Los objetos de programación RMO requieren que se realice una conexión a una instancia de SQL Server mediante una instancia de la ServerConnection clase . Esta conexión al servidor se efectúa independientemente de cualquier objeto de programación de RMO. A continuación, se pasa al objeto RMO durante la creación de la instancia o por asignación a la propiedad P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext del objeto. De esta manera, se pueden crear y administrar los objetos de programación RMO y las instancias de objeto de conexión por separado y se puede reutilizar un objeto de conexión único con varios objetos de programación RMO. Las reglas siguientes se aplican a las conexiones a un servidor de replicación:

  • Todas las propiedades de la conexión se definen para un objeto ServerConnection dado.

  • Una conexión a cada instancia de SQL Server debe tener su propio ServerConnection objeto.

  • El objeto ServerConnection se asigna a la propiedad P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext del objeto de programación de RMO que se va a crear o al que se va a tener acceso en el servidor.

  • El método Connect abre la conexión al servidor. Se debe llamar a este método antes de llamar a cualquier método que tenga acceso al servidor en cualquier objeto de programación de RMO que use la conexión.

  • Dado que RMO y OBJETOS de administración de SQL Server (SMO) usan la ServerConnection clase para las conexiones a SQL Server, los objetos RMO y SMO pueden usar la misma conexión. Para obtener más información, vea Connecting to an Instance of SQL Server (Conectarse a una instancia de SQL Server).

  • Toda la información de autenticación para realizar la conexión e iniciar sesión en el servidor correctamente se proporciona en el objeto ServerConnection.

  • La autenticación de Windows es el valor predeterminado. Para usar la autenticación de SQL Server, LoginSecure debe establecerse en false y Login Password debe establecerse en un inicio de sesión y contraseña válidos de SQL Server. Las credenciales de seguridad siempre deben almacenarse y administrarse de forma segura, y se deben proporcionar en tiempo de ejecución cuando sea posible.

  • Para las aplicaciones multiproceso, se debe utilizar un objeto ServerConnection independiente en cada subproceso.

Llame al método Disconnect en el objeto ServerConnection para cerrar las conexiones al servidor activas que usan los objetos RMO.

Establecer las propiedades de RMO

Las propiedades de los objetos de programación de RMO representan las propiedades de estos objetos de replicación en el servidor. Al crear nuevos objetos de replicación en el servidor, se utilizan las propiedades de RMO para definirlos. En los objetos existentes, las propiedades de RMO representan sus propiedades, que solo se pueden modificar en el caso de que se puedan escribir o configurar. Las propiedades se pueden establecer en los objetos nuevos o en los objetos existentes.

Establecer propiedades para los nuevos objetos de replicación

Al crear un nuevo objeto de replicación en el servidor, debe especificar todas las propiedades necesarias antes de llamar al método Create del objeto. Para obtener más información sobre cómo establecer las propiedades para un nuevo objeto de replicación, vea Configurar la publicación y la distribución.

Establecer propiedades para los objetos de replicación existentes

Para algunos de los objetos de replicación que existen en el servidor, RMO podría admitir la capacidad de cambiar algunas o todas sus propiedades. Solo es posible cambiar las propiedades que se puedan escribir o configurar. Antes de poder cambiar las propiedades, se debe llamar al método Load o M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties para recibir las propiedades actuales del servidor. Llamar a estos métodos indica que un objeto existente se está modificando.

De forma predeterminada, al cambiar las propiedades del objeto, RMO confirma estos cambios en el servidor según el modo de ejecución de ServerConnection que se esté usando. El método P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject se puede utilizar para comprobar que un objeto existe en el servidor antes de intentar recuperar o cambiar sus propiedades. Para obtener más información sobre cómo cambiar las propiedades de un objeto de replicación, vea Ver y modificar las propiedades del distribuidor y del publicador.

Nota:

Cuando varios clientes de RMO o varias instancias de un objeto de programación RMO están accediendo al mismo objeto de replicación del servidor, se puede llamar al método Refresh del objeto RMO para actualizar las propiedades en función del estado actual del objeto del servidor.

Almacenar en memoria caché los cambios de propiedades

Cuando la SqlExecutionModes propiedad se establece en CaptureSql todas las instrucciones Transact-SQL generadas por RMO se capturan para que se puedan ejecutar manualmente en un único lote mediante uno de los métodos de ejecución. RMO le permite almacenar en memoria caché los cambios de las propiedades y las confirma conjuntamente en un único lote utilizando el método M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges del objeto. Para almacenar en caché los cambios de las propiedades, la propiedad P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges del objeto debe estar establecida en true. Al almacenar en memoria caché los cambios de las propiedades en RMO, el objeto ServerConnection todavía controla cuándo se envían los cambios al servidor. Para obtener más información sobre cómo almacenar en caché los cambios de las propiedades de un objeto de replicación, vea Ver y modificar las propiedades del distribuidor y del publicador.

Importante

Aunque la clase ServerConnection permite declarar las transacciones explícitas al establecer las propiedades, tales transacciones pueden interferir con las transacciones de replicación internas, producir resultados imprevistos y no se deberían utilizar con RMO.

Habilitación de la compatibilidad de TLS 1.2 con componentes RMO

La compatibilidad de TLS 1.2 con componentes RMO en Windows 2012 e inferior puede habilitarse mediante la instalación de la actualización KB 3140245 y la creación de las claves del Registro, como se ha mencionado en el artículo. En Windows 2012 R2 y versiones posteriores, solo es necesario crear las claves del Registro, como se ha mencionado en el artículo anterior.

Ejemplo

En este ejemplo se muestra el almacenamiento en memoria caché de los cambios de las propiedades. Los cambios realizados en los atributos de una publicación transaccional se almacenan en memoria caché hasta que se envían explícitamente al servidor.

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