Compartir a través de


Publicar datos y objetos de base de datos

Se aplica a: SQL Server Azure SQL Managed Instance

Al crear una publicación puede elegir las tablas y otros objetos de base de datos que desee publicar. Puede publicar los siguientes objetos de base de datos utilizando la replicación.

Objeto Database Replicación de instantáneas y replicación transaccional Replicación de mezcla
Tablas X X
Tablas con particiones X X
Procedimientos almacenados: definición (Transact-SQL y CLR) X X
Procedimientos almacenados: ejecución (Transact-SQL y CLR) X no
Vistas X X
Vistas indizadas X X
Vista indizadas como tablas X no
Tipos definidos por el usuario (CLR) X X
Funciones definidas por el usuario (Transact-SQL y CLR) X X
Tipos de datos de alias X X
Índices de texto completo X X
Objetos de esquema (restricciones, índices, desencadenadores DML de usuario, propiedades extendidas e intercalación) X X

Crear publicaciones

Para crear una publicación, debe proporcionar la siguiente información:

  • El distribuidor.
  • La ubicación de los archivos de instantáneas.
  • La base de datos de publicaciones.
  • El tipo de publicación que se va a crear (de instantánea, transaccional, transaccional con suscripciones actualizables o de mezcla).
  • Los datos y los objetos de la base de datos (artículos) que se incluirán en la publicación.
  • Filtros de fila estáticos y filtros de columna para todos los tipos de publicaciones, y filtros de fila con parámetros y filtros de combinación para publicaciones de combinación.
  • La programación del Agente de instantáneas.
  • Las cuentas con las que se ejecutarán los siguientes agentes: el Agente de instantáneas para todas las publicaciones, el Agente de registro del LOG para todas las publicaciones transaccionales, el Agente de lectura de cola para publicaciones transaccionales que permiten suscripciones de actualización.
  • Un nombre y una descripción para la publicación.

Para obtener información acerca de cómo trabajar con publicaciones, vea los siguientes temas:

Nota:

Al eliminar un artículo o una publicación, los objetos no se quitan del suscriptor.

Publicar tablas

El objeto que se publica con más frecuencia es la tabla. Los siguientes vínculos proporcionan información adicional acerca de las áreas relacionadas con la publicación de tablas:

Cuando se publica una tabla para replicación, puede especificar qué objetos de esquema se deben copiar al suscriptor, como la integridad referencial declarada (restricciones de clave principal, de referencia y UNIQUE), los índices, los desencadenadores DML de usuario (los desencadenadores DDL no se pueden replicar), las propiedades extendidas y la intercalación. Las propiedades extendidas solo se replican en la sincronización inicial entre el publicador y el suscriptor. Si agrega o modifica una propiedad extendida después de la sincronización inicial, el cambio no se replica.

Para especificar opciones de esquema, vea Especificar las opciones del esquema o SchemaOption.

Tablas e índices con particiones

La replicación admite la publicación de tablas con particiones e índices. El nivel de compatibilidad depende del tipo de replicación que se utiliza y las opciones que especifica para la publicación y los artículos asociados a las tablas con particiones. Para obtener más información, vea Replicar tablas e índices con particiones.

Publicar procedimientos almacenados

Todos los tipos de replicación permiten replicar definiciones de procedimientos almacenados: CREATE PROCEDURE se copia en cada suscriptor. En el caso de los procedimientos almacenados CLR (Common Language Runtime), también se copia el ensamblado asociado. Los cambios en los procedimientos se replican en los suscriptores, a diferencia de los cambios en los ensamblados asociados.

Además de replicar la definición de un procedimiento almacenado, la replicación transaccional permite replicar la ejecución de procedimientos almacenados. Esto resulta de utilidad al replicar los resultados de los procedimientos almacenados orientados al mantenimiento que afectan a grandes cantidades de datos. Para más información, vea Publishing Stored Procedure Execution in Transactional Replication.

Publicar vistas

Todos los tipos de replicación permiten replicar vistas: la vista (y el índice asociado, si se trata de una vista indizada) se puede copiar en el suscriptor, pero la tabla base también se debe replicar.

En las vistas indizadas, la replicación transaccional también permite replicar la vista indizada en forma de tabla y no como vista, eliminando la necesidad de replicar también la tabla base. Para ello, especifique una de las opciones "indexed view logbased" del parámetro @type de sp_addarticle (Transact-SQL). Para obtener más información sobre cómo usar sp_addarticle, vea Definir un artículo.

Publicar funciones definidas por el usuario

Las instrucciones CREATE FUNCTION para las funciones CLR y de Transact-SQL se copian en cada suscriptor. En el caso de las funciones CLR, también se copia el ensamblado asociado. Los cambios en las funciones se replican en los suscriptores, a diferencia de los cambios en los ensamblados asociados.

Publicar tipos definidos por el usuario y tipos de datos de alias

Las columnas que usan tipos definidos por el usuario o tipos de datos de alias se replican en los suscriptores como cualquier otra columna. La instrucción CREATE TYPE de cada tipo replicado se ejecuta en el suscriptor antes de que se cree la tabla. En el caso de los tipos definidos por el usuario, el ensamblado asociado también se copia en cada suscriptor. Los cambios en los tipos definidos por el usuario y en los tipos de datos de alias no se replican en los suscriptores.

Si se define un tipo en una base de datos, pero no se hace referencia al mismo en ninguna columna al crear la publicación, el tipo no se copia en los suscriptores. Si posteriormente crea una columna de ese tipo en la base de datos y desea replicarla, primero debe copiar el tipo manualmente (y el ensamblado asociado de un tipo definido por el usuario) en cada suscriptor.

Publicar índices de texto completo

La instrucción CREATE FULLTEXT INDEX se copia en cada suscriptor y el índice de texto completo se crea en el suscriptor. Los cambios realizados en los índices de texto completo con ALTER FULLTEXT INDEX no se replican.

Realizar cambios en el esquema de objetos publicados

La replicación admite una gran variedad de cambios en el esquema de objetos publicados. Cuando realice cualquiera de los siguientes cambios de esquema en el objeto publicado correspondiente en un publicador de SQL Server, ese cambio se propaga de manera predeterminada a todos los suscriptores de SQL Server:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

Para más información, vea Realizar cambios de esquema en bases de datos de publicaciones.

Consideraciones sobre las publicaciones

Tenga en cuenta los siguientes aspectos a la hora de publicar objetos de base de datos:

  • Los usuarios pueden tener acceso a la base de datos durante la creación de la publicación y la instantánea inicial, pero es aconsejable crear publicaciones durante los períodos de baja actividad en el publicador.

  • No se puede cambiar el nombre de una base de datos después de crear en ella una publicación. Para cambiarle el nombre, primero debe quitar la replicación de la base de datos.

  • Para publicar un objeto de base de datos que depende de uno o más objetos de base de datos, debe publicar todos los objetos a los que se hace referencia. Por ejemplo, si publica una vista que depende de una tabla, también debe publicar la tabla.

    Nota:

    Si se agrega un artículo a una publicación de combinación y ya hay un artículo que depende de este nuevo artículo, debe especificar un orden de procesamiento para los dos artículos con el parámetro @processing_order de sp_addmergearticle y sp_changemergearticle. Considere el caso siguiente: publica una tabla pero no publica una función a la que hace referencia la tabla. Si no publica la función, la tabla no se puede crear en el suscriptor. Al agregar la función a la publicación: especifique el valor 1 para el parámetro @processing_order de sp_addmergearticley el valor 2 para el parámetro @processing_order de sp_changemergearticle; especifique el nombre de la tabla para el parámetro @article. Este orden de procesamiento garantiza que la función se cree en el suscriptor antes que la tabla que depende de él. Puede usar números distintos para cada artículo, siempre que el número de la función sea inferior al de la tabla.

  • Los nombres de publicación no pueden incluir los caracteres siguientes: % * [ ] | : " ? \ / <>.

Limitaciones en la publicación de objetos

  • El número máximo de artículos y columnas que pueden publicarse varía según el tipo de publicación. Para obtener más información, vea la sección "Replication Objects" (Objetos de replicación) de Maximum Capacity Specifications for SQL Server (Especificaciones de capacidad máxima para SQL Server).

  • Los procedimientos almacenados, vistas, desencadenadores y funciones definidas por el usuario que están definidos como WITH ENCRYPTION no se pueden publicar como parte de la replicación de SQL Server.

  • Las colecciones de esquemas XML se pueden replicar pero los cambios no se replican después de la instantánea inicial.

  • Las tablas publicadas para la replicación transaccional deben tener una clave principal. Si una tabla se encuentra en una publicación de replicación transaccional, no puede deshabilitar ningún índice que esté asociado con las columnas de clave principal. Estos índices son necesarios para la replicación. Para deshabilitar un índice, primero debe quitar la tabla de la publicación.

  • Los valores predeterminados enlazados creados con sp_bindefault (Transact-SQL) no se replican (los valores predeterminados enlazados han quedado en desuso en favor de los valores predeterminados creados con la palabra clave DEFAULT de ALTER TABLE o CREATE TABLE).

  • Las funciones que contienen la sugerencia NOEXPAND en vistas indizadas no se pueden publicar en la misma publicación que las tablas y las vistas indizadas a las que se hace referencia, debido al orden en que el agente de distribución las entrega. Para evitar este problema, coloque la creación de tablas y vistas indizadas en una primera publicación, y agregue las funciones que contienen la sugerencia NOEXPAND en las vistas indizadas en una segunda publicación que se publique después de que se complete la primera publicación. O bien, cree scripts para estas funciones y entregue el script mediante el parámetro @post_snapshot_script de sp_addpublication.

Esquemas y propiedad de objetos

La replicación tiene el siguiente comportamiento predeterminado en el Asistente para nueva publicación con respecto a los esquemas y a la propiedad de objetos:

  • Para artículos de publicaciones de combinación con un nivel de compatibilidad de 90 o superior, publicaciones de instantáneas y publicaciones transaccionales: de manera predeterminada, el propietario del objeto en el suscriptor es el mismo que el propietario del objeto correspondiente en el publicador. Si en el suscriptor no existen esquemas que posean objetos, se crean de forma automática.

  • Para artículos en publicaciones de combinación con un nivel de compatibilidad menor de 90: de manera predeterminada, el propietario se deja en blanco y se especifica como dbo durante la creación del objeto en el suscriptor.

  • Para artículos de publicaciones de Oracle: de forma predeterminada, el propietario se especifica como dbo.

  • Para artículos de publicaciones que utilizan instantáneas en modo de carácter (que se utilizan para los que no son suscriptores de SQL Server y para los suscriptores de SQL Server Compact): de manera predeterminada, el propietario se deja en blanco. Como valor predeterminado del propietario se utiliza el propietario asociado con la cuenta utilizada por el Agente de distribución o el Agente de mezcla para conectarse con el suscriptor.

El propietario del objeto se puede cambiar mediante el cuadro de diálogo Propiedades del artículo - <Artículo> y mediante los siguientes procedimientos almacenados: sp_addarticle, sp_addmergearticle, sp_changearticle y sp_changemergearticle. Para más información, vea Ver y modificar propiedades de publicación, Definir un artículo y Ver y modificar las propiedades de un artículo.

Publicar datos en suscriptores que se ejecutan en versiones anteriores de SQL Server

  • Si va a publicar en un suscriptor que ejecuta una versión anterior de SQL Server, está limitado por la funcionalidad de esa versión, tanto en cuestiones de funcionalidad específica de la replicación como en la funcionalidad general del producto.

  • Las publicaciones de combinación utilizan un nivel de compatibilidad que determina las características que se pueden usar en una publicación y le permite admitir suscriptores que ejecuten versiones anteriores de SQL Server.

Publicar tablas en más de una publicación

La replicación es compatible con la publicación de artículos en varias publicaciones (incluso permiten volver a publicar datos) con las siguientes restricciones:

  • Si un artículo se publica en una publicación transaccional y en una publicación de combinación, asegúrese de que la propiedad @published_in_tran_pub está establecida en TRUE para el artículo de mezcla. Para obtener más información, vea Ver y modificar propiedades de publicación y Ver y modificar las propiedades de un artículo.

    También debería establecer la propiedad @published_in_tran_pub si un artículo forma parte de una suscripción transaccional y está incluido en una publicación de combinación. Si éste es el caso, tenga en cuenta que, de forma predeterminada, la replicación transaccional espera que las tablas del suscriptor se traten como de solo lectura; si la replicación de mezcla realiza cambios en los datos de una tabla de una suscripción transaccional, se puede producir la no convergencia de los datos. Para evitar esta posibilidad, se recomienda que cada tabla de este tipo se especifique como solo para descarga en la publicación de combinación. Esto evita que un suscriptor de mezcla cargue cambios de datos en la tabla. Para más información, vea Optimizar el rendimiento de la replicación de mezcla con artículos de solo descarga.

  • No es posible publicar un artículo en una publicación de combinación y en una publicación transaccional con suscripciones de actualización en cola.

  • Los artículos incluidos en las publicaciones transaccionales que admiten suscripciones de actualización no se pueden volver a publicar.

  • Si un artículo se publica en más de una publicación transaccional que admita suscripciones de actualización en cola, las siguientes propiedades deben tener el mismo valor para el artículo en todas las publicaciones:

    Propiedad Parámetro en sp_addarticle
    Administración del intervalo de identidad @auto_identity_range (en desuso) y @identityrangemangementoption
    Intervalo de identidad del publicador @pub_identity_range
    Intervalo de identidad @identity_range
    Umbral del intervalo de identidad @threshold

    Para obtener más información sobre estos parámetros, consulte sp_addarticle (Transact-SQL).

  • Si un artículo se publica en más de una publicación de combinación, las siguientes propiedades deben tener el mismo valor para el artículo en todas las publicaciones:

    Propiedad Parámetro en sp_addmergearticle
    Seguimiento de columnas @column_tracking
    Opciones del esquema @schema_option
    Filtrado de columnas @vertical_partition
    Opciones de carga de suscriptor @subscriber_upload_options
    Seguimiento condicional de eliminaciones @delete_tracking
    Compensación de errores @compensate_for_errors
    Administración del intervalo de identidad @auto_identity_range (en desuso) y @identityrangemangementoption
    Intervalo de identidad del publicador @pub_identity_range
    Intervalo de identidad @identity_range
    Umbral del intervalo de identidad @threshold
    Opciones de partición @partition_options
    Secuencias de columnas de tipo Blob @stream_blob_columns
    Tipo de filtro @filter_type (parámetro de sp_addmergefilter)

    Para obtener más información sobre estos parámetros, consulte sp_addmergearticle (Transact-SQL) y sp_addmergefilter (Transact-SQL).

  • La replicación transaccional y la replicación de mezcla sin filtrar admiten la publicación de una tabla en varias publicaciones y la posterior suscripción en una única tabla en la base de datos de suscripciones (es lo que normalmente se denomina un escenario de acumulación). Este tipo de escenario se suele utilizar para agregar subconjuntos de datos de varias ubicaciones en una tabla en un suscriptor central. Las publicaciones de combinación filtradas no admiten el escenario de suscriptor central. En la replicación de mezcla, la acumulación se suele implementar a través de una única publicación con filtros de fila con parámetros. Para obtener más información, consulte Filtros de fila con parámetros.