Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Managed Instance
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 Microsoft SQL Server, ese cambio se propaga de manera predeterminada a todos los suscriptores de SQL Server:
ALTER TABLE
ALTER TABLE SET LOCK ESCALATIONno debe usarse si la replicación de cambios de esquema está habilitada y una topología incluye SQL Server 2005 (9.x) o SQL Server Compact 3.5 Subscribers.ALTER VIEW
ALTER PROCEDURE
ALTER FUNCTION
ALTER TRIGGER
ALTER TRIGGERsolo puede usarse para disparadores de lenguaje de manipulación de datos (DML) porque los disparadores del lenguaje de definición de datos (DDL) no pueden replicarse.
Importante
Debes realizar cambios de esquema en las tablas usando Transact-SQL o SQL Server Objetos de Gestión (SMO). Cuando haces cambios en el esquema en SQL Server Management Studio, Management Studio intenta eliminar y recrear la tabla. No puedes eliminar objetos publicados, así que el cambio de esquema falla.
En la replicación transaccional y de mezcla, los cambios de esquema se propagan de forma incremental al ejecutar el Agente de distribución o el Agente de mezcla. En la replicación de instantáneas, los cambios de esquema se propagan al aplicar una nueva instantánea en el suscriptor. En la replicación de instantáneas, se envía una nueva copia del esquema al suscriptor cada vez que se produce la sincronización. Por lo tanto, todos los cambios en el esquema (no solo los mencionados anteriormente) en objetos previamente publicados se propagan automáticamente con cada sincronización.
Para obtener información sobre cómo agregar y quitar artículos de publicaciones, vea Agregar y quitar artículos de publicaciones existentes.
Para replicar cambios de esquema
Los cambios de esquema mencionados anteriormente se replican por defecto. Para obtener información acerca de cómo deshabilitar la replicación de los cambios de esquema, vea Replicate Schema Changes.
Consideraciones para los cambios de esquema
Tenga en cuenta las consideraciones siguientes al replicar cambios de esquema.
Consideraciones generales
Los cambios de esquema están sujetos a las restricciones impuestas por Transact-SQL. Por ejemplo,
ALTER TABLEno permite modificar las columnas clave primarias.El mapeo de tipos de datos ocurre solo para la instantánea inicial. Los cambios en el esquema no se corresponden con versiones anteriores de tipos de datos. Por ejemplo, si usas
ALTER TABLE ADD datetime2 columnen SQL Server 2012 (11.x), el tipo de dato no se traduce a nvarchar para suscriptores de SQL Server 2005 (9.x). En algunos casos, los cambios de esquema quedan bloqueados en el Publicador.Si configuras una publicación para permitir la propagación de cambios en el esquema, esta propaga los cambios en el esquema independientemente de cómo configures la opción de esquema relacionada para un artículo en la publicación. Por ejemplo, si selecciona no replicar restricciones de clave externa para un artículo de tabla, pero luego ejecuta un comando
ALTER TABLEque agrega una clave externa a la tabla en el Publicador, la clave externa se agrega a la tabla en el Suscriptor. Para evitar este comportamiento, desactiva la propagación de los cambios en el esquema antes de emitir elALTER TABLEcomando.Realice cambios en el esquema solo en el Publicador, no en los Suscriptores (incluidos los Suscriptores que vuelven a publicar). La replicación de mezcla impide los cambios de esquema en el suscriptor. La replicación transaccional no impide los cambios, pero estos pueden hacer que la replicación falle.
Los cambios propagados a un suscriptor de republicación se propagan de manera predeterminada a sus suscriptores.
Si el cambio de esquema hace referencia a objetos o restricciones existentes en el Publisher pero no en el Suscriptor, el cambio de esquema tiene éxito en el Publisher pero falla en el Suscriptor.
Todos los objetos del Suscriptor que referencias al añadir una clave externa deben tener el mismo nombre y propietario que el objeto correspondiente en el Publisher.
No se replica la adición, eliminación o modificación explícita de índices. Necesitas ejecutar cualquier cambio que implique un índice explícito en cada conjunto de réplicas individualmente. Se admiten los índices creados implícitamente para las restricciones (como la restricción de clave principal).
No se admite modificar ni eliminar columnas de identidad que la replicación gestiona. Para obtener más información sobre la administración automática de las columnas de identidad, vea Replicar columnas de identidad.
Los cambios de esquema que incluyen funciones no deterministas no están soportados porque pueden hacer que los datos en el Publisher y el Suscriptor sean diferentes (lo que se denomina no convergencia). Por ejemplo, si emite en el publicador el comando
ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), los valores serán distintos cuando el comando se replique en el suscriptor y se ejecute. Para obtener más información acerca de las funciones no deterministas, vea Deterministic and Nondeterministic Functions.Indique explícitamente las restricciones. Si no nombras explícitamente una restricción, SQL Server genera un nombre para la restricción, y estos nombres son diferentes en el Publisher y en cada Suscriptor. Esta diferencia puede causar problemas durante la replicación de cambios en el esquema. Por ejemplo, si se elimina una columna en el Publisher y se elimina una restricción dependiente, la replicación intenta eliminar la restricción en el Suscriptor. La eliminación en el suscriptor falla porque el nombre de la restricción es diferente. Si no funciona la sincronización por un problema de nombre de restricción, quite manualmente la restricción en el suscriptor y ejecute de nuevo el agente de mezcla.
Si publicas una tabla para replicarla, no puedes modificar una columna de esa tabla a un tipo de dato XML si ya has generado una instantánea de publicación. Para modificar la columna, primero debes eliminar la replicación.
La lectura no confirmada no es un nivel de aislamiento admitido al realizar operaciones DDL en una tabla publicada.
No uses SET CONTEXT_INFO para modificar el contexto de transacciones donde se realizan cambios de esquema contra objetos publicados.
Adición de columnas
Para añadir una nueva columna a una tabla e incluir esa columna en una publicación existente, ejecuta
ALTER TABLE <Table> ADD <Column>. De manera predeterminada, la columna se replicará en todos los suscriptores. La columna debe permitirNULLvalores o incluir una restricción por defecto. Para más información sobre cómo añadir columnas, consulte la sección "Replicación de Fusión" en este artículo.Para añadir una nueva columna a una tabla y no incluir esa columna en una publicación existente, desactive la replicación de cambios en el esquema y luego ejecute
ALTER TABLE <Table> ADD <Column>.Para incluir una columna existente en una publicación existente, use sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL) o el cuadro de diálogo Propiedades de la publicación: <Publicación>.
Para más información, consulte definir y modificar un filtro de columna. Esta acción requiere que las suscripciones sean reinicializadas.
No se permite añadir una columna identidad a una tabla publicada, porque puede resultar en no convergencia cuando la columna se replica al Suscriptor. Los valores de la columna de identidad en el publicador dependen del orden en que se almacenen físicamente las filas de la tabla afectada. Las filas se pueden almacenar de forma diferente en el suscriptor; por tanto, el valor de la columna de identidad puede ser diferente para las mismas filas.
Eliminar columnas
Para eliminar una columna de una publicación existente y eliminar la columna de la tabla en el Publisher, ejecute
ALTER TABLE <Table> DROP <Column>. De forma predeterminada, la columna se elimina de la tabla en todos los Suscriptores.Para quitar una columna de una publicación existente, pero conservarla en la tabla del publicador, use sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL) o el cuadro de diálogo Propiedades de la publicación: <Publicación>.
Para más información, consulte definir y modificar un filtro de columna. Esta acción requiere generar una nueva instantánea.
No puedes usar la columna para incluir las cláusulas de filtro de cualquier artículo de cualquier publicación en la base de datos.
Al eliminar una columna de un artículo publicado, considera cualquier restricción, índice o propiedad de la columna que pueda afectar a la base de datos. Por ejemplo:
No puedes eliminar columnas usadas en una clave primaria de artículos en publicaciones transaccionales, porque la replicación las utiliza.
No puedes eliminar la
rowguidcolumna de los artículos en publicaciones de fusión ni lamstran_repl_versioncolumna de artículos en publicaciones transaccionales que permiten actualizar suscripciones, porque la replicación las utiliza.Los cambios en el índice no se propagan a los suscriptores. Si sueltas una columna en el Publisher y se elimina un índice dependiente, la caída del índice no se replica. Debe quitar el índice en el suscriptor antes de quitar la columna en el publicador, de manera que se lleve a cabo correctamente la eliminación de la columna cuando se replique desde el publicador al suscriptor. Si se produce un error de sincronización debido a un índice en el Suscriptor, elimine manualmente el índice y vuelva a ejecutar el Agente de mezcla.
Limitaciones de nombre explícitas para que puedas eliminarlas. Para más información, consulte la sección "Consideraciones Generales" anterior en este artículo.
Replicación transaccional
Los cambios de esquema se propagan a los suscriptores que ejecutan versiones anteriores de SQL Server, pero la instrucción de DDL solo debe incluir sintaxis compatible con la versión instalada en el suscriptor.
Si el suscriptor vuelve a publicar los datos, los únicos cambios de esquema admitidos serán agregar y quitar una columna. Haz estos cambios en el Publisher usando sp_repladdcolumn (Transact-SQL) y sp_repldropcolumn (Transact-SQL) en lugar de
ALTER TABLEla sintaxis DDL.Los cambios de esquema no se replican a los suscriptores que no sean de SQL Server.
Los cambios de esquema no se propagan desde publicadores que no sean de SQL Server.
No puedes modificar vistas indexadas que se replican como tablas. Puedes modificar vistas indexadas que se replican como vistas indexadas, pero al modificarlas se convierten en vistas normales en lugar de vistas indexadas.
Si la publicación admite suscripciones de actualización inmediata o en cola, ponga el sistema en estado de inactividad antes de realizar cambios en el esquema: detenga toda actividad en la tabla publicada en el Publicador y los Suscriptores, y propague los cambios de datos pendientes a todos los nodos. Una vez que los cambios en el esquema se propaguen a todos los nodos, la actividad puede reanudar en las tablas publicadas.
Si la publicación está en una topología peer-to-peer, detén el sistema antes de realizar cambios en el esquema. Para más información, vea Poner en modo inactivo una topología de replicación (programación de la replicación con Transact-SQL).
Añadir una columna de marca de tiempo a una tabla y mapear la marca de tiempo
binary(8)hace que el artículo se reinicialice para todas las suscripciones activas.
Replicación de mezcla
La forma en que la replicación de mezcla controla los cambios de esquema depende del nivel de compatibilidad de la publicación y de si la instantánea está configurada en modo nativo (predeterminado) o en modo carácter:
Para replicar los cambios de esquema, establece el nivel de compatibilidad de la publicación en, como mínimo, 90RTM. Si los suscriptores usan versiones anteriores de SQL Server o el nivel de compatibilidad es inferior a 90RTM, utiliza sp_repladdcolumn (Transact-SQL) y sp_repldropcolumn (Transact-SQL) para añadir y eliminar columnas. No obstante, estos procedimientos han quedado obsoletos.
Si intenta agregar a un artículo existente una columna con un tipo de datos introducido en SQL Server 2008 (10.0.x), SQL Server se comportará de este modo:
100RTM, captura nativa 100RTM, instantánea de carácter Todos los demás niveles de compatibilidad hierarchyid Permitir cambio Bloquear cambio Bloquear cambio geography y geometry Permitir cambio Permitir cambio* Bloquear cambio secuencia de archivo Permitir cambio Bloquear cambio Bloquear cambio date, time, datetime2y datetimeoffset Permitir cambio Permitir cambio* Bloquear cambio *Los suscriptores de SQL Server Compact convierten estos tipos de datos en el suscriptor.
En caso de error al aplicar un cambio de esquema (por ejemplo, un error que se produce por agregar una clave externa que hace referencia a una tabla que no está disponible en el suscriptor), se produce un error en la sincronización y es necesario reinicializar la suscripción.
Si se realiza un cambio de esquema en una columna que forma parte de un filtro de combinación o con parámetros, es necesario reinicializar todas las suscripciones y volver a generar la instantánea.
La replicación de mezcla proporciona procedimientos almacenados para omitir los cambios de esquema durante la solución de problemas. Para obtener más información, consulte sp_markpendingschemachange (Transact-SQL) y sp_enumeratependingschemachanges (Transact-SQL).