Sunteți pe pagina 1din 6

SQL SERVER

Realizar cambios de esquema en bases de


datos de publicaciones
La replicacin admite una gran variedad de cambios en el esquema de objetos publicados.
Cuando se realiza cualquiera de los siguientes cambios de esquema en el objeto publicado
apropiado en un publicador de Microsoft SQL Server , dicho cambio se propaga de
manera predeterminada a todos los suscriptores de SQL Server :

ALTER TABLE
ALTER TABLE SET LOCK ESCALATION no se debera usar si la replicacin
de cambio de esquema est habilitada y una topologa incluye Resultado de o SQL
Server Compact 3.5 Subscribers.ALTER VIEW
ALTER PROCEDURE
ALTER FUNCTION
ALTER TRIGGER

ALTER TRIGGER solo puede utilizarse para desencadenadores de lenguaje de


manipulacin de datos (DML), ya que los desencadenadores de lenguaje de
definicin de datos (DDL) no se pueden replicar.

Importante

Los cambios de esquema de las tablas deben realizarse con Transact-SQL u Objetos de
administracin de SQL Server (SMO). Cuando se realizan cambios de esquema en SQL
Server Management Studio, Management Studio intenta quitar y volver a crear la tabla.
Debido a que no es posible quitar objetos publicados, se produce un error en el cambio
de esquema.

En la replicacin transaccional y de mezcla, los cambios de esquema se propagan de


forma incremental al ejecutar el Agente de distribucin o el Agente de mezcla. En la
replicacin de instantneas, los cambios de esquema se propagan al aplicar una nueva
instantnea en el suscriptor. En la replicacin de instantneas, se enva una nueva copia
del esquema al suscriptor cada vez que se produce la sincronizacin. Por tanto, todos los
cambios de esquema (y no solo los indicados antes) en objetos previamente publicados
se propagan automticamente con cada sincronizacin.

Para obtener informacin sobre cmo agregar y quitar artculos de publicaciones, vea
Agregar y quitar artculos de publicaciones existentes.

Para replicar cambios de esquema

Los cambios de esquema antes indicados se replican de manera predeterminada. Para


obtener informacin acerca de cmo deshabilitar la replicacin de los cambios de
esquema, vea Replicate Schema Changes.

EQUIPO 1 1
SQL SERVER

Consideraciones para los cambios de esquema


Tenga en cuenta las consideraciones siguientes al replicar cambios de esquema.

Consideraciones generales

Los cambios de esquema estn sujetos a las restricciones impuestas por Transact-
SQL. Por ejemplo, ALTER TABLE no permite aplicar ALTER a las columnas de
clave principal.
La asignacin de tipo de datos solo se realiza para la instantnea inicial. Los
cambios de esquema no se asignan a versiones anteriores de tipos de datos. Por
ejemplo, si la instruccin ALTER TABLE ADD datetime2 column se utiliza en
SQL Server 2012, el tipo de datos no se traduce a nvarchar para los suscriptores
de Resultado de . En algunos casos, los cambios de esquema se bloquean en el
publicador.
Si una publicacin est configurada para permitir la propagacin de los cambios
de esquema, stos se propagarn independientemente de cmo est establecida la
opcin de esquema relacionada para un artculo de la publicacin. Por ejemplo, si
elige no replicar las restricciones de clave externa para un artculo de la tabla y
despus emite un comando ALTER TABLE que agrega una clave externa a la
tabla en el publicador, la clave externa se agregar a la tabla en el suscriptor. Para
evitarlo, deshabilite la propagacin de los cambios de esquema antes de emitir el
comando ALTER TABLE.
Los cambios de esquema deben realizarse nicamente en el publicador y no en los
suscriptores (incluidos los suscriptores de republicacin). La replicacin de
mezcla impide los cambios de esquema en el suscriptor. La replicacin
transaccional no impide los cambios, pero los cambios pueden causar errores en
la replicacin.
Los cambios propagados a un suscriptor de republicacin se propagan de manera
predeterminada a sus suscriptores.
Si el cambio de esquema hace referencia a objetos o restricciones existentes en el
publicador, pero no en el suscriptor, el cambio de esquema se realizar
correctamente en el publicador pero se producir un error en el suscriptor.
Todos los objetos del suscriptor a los que se hace referencia al agregar una clave
externa deben tener el mismo nombre y propietario que el objeto correspondiente
en el publicador.
No se permite agregar, quitar ni alterar ndices explcitamente. Se admiten los
ndices creados implcitamente para las restricciones (como la restriccin de clave
principal).
No se permite alterar ni quitar columnas de identidad administradas por la
replicacin. Para obtener ms informacin sobre la administracin automtica de
las columnas de identidad, vea Replicar columnas de identidad.
No se admiten los cambios de esquema que incluyen funciones no deterministas,
ya que pueden producir datos distintos en el publicador y en el suscriptor (falta de
convergencia). Por ejemplo, si emite en el publicador el comando ALTER TABLE
SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), los
valores sern distintos cuando el comando se replique en el suscriptor y se ejecute.
Para obtener ms informacin acerca de las funciones no deterministas, vea
Deterministic and Nondeterministic Functions.

EQUIPO 1 2
SQL SERVER

Se recomienda asignar explcitamente un nombre a las restricciones. Si una


restriccin no tiene un nombre explcito, SQL Server genera un nombre para la
restriccin y estos nombres sern diferentes en el publicador y en cada suscriptor.
Esto puede causar problemas durante la replicacin de cambios de esquema. Por
ejemplo, si quita una columna en el publicador y se quita una restriccin
dependiente, la replicacin intentar quitar la restriccin en el suscriptor. Esta
eliminacin en el suscriptor no se podr llevar a cabo porque el nombre de la
restriccin es diferente. Si no funciona la sincronizacin por un problema de
nombre de restriccin, quite manualmente la restriccin en el suscriptor y ejecute
de nuevo el agente de mezcla.
Si se publica una tabla para la replicacin, no se puede modificar una columna de
esa tabla a un tipo de datos de XML si ya se ha generado una instantnea de
publicacin. Para modificar la columna, antes debe quitar la replicacin.
La lectura no confirmada no es un nivel de aislamiento compatible al hacer DDL
en una tabla publicada.
No se debe usarSET CONTEXT_INFO para modificar el contexto de las
transacciones en las que se realizan cambios de esquema en objetos publicados.

Agregar columnas

Para agregar una columna nueva a una tabla e incluirla en una publicacin
existente, ejecute ALTER TABLE <tabla> ADD <columna>. De manera
predeterminada, la columna se replicar en todos los suscriptores. La columna
debe admitir valores NULL o incluir una restriccin predeterminada. Para obtener
ms informacin sobre la forma de agregar columnas, consulte la seccin
"Replicacin de mezcla" de este tema.
Para agregar una columna nueva a una tabla sin incluirla en una publicacin
existente, deshabilite la replicacin de los cambios de esquema y despus, ejecute
ALTER TABLE <tabla> ADD <columna>.
Para incluir una columna existente en una publicacin existente, use
sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL) o el
cuadro de dilogo Propiedades de la publicacin: <publicacin>.

Para ms informacin, consulte Define and Modify a Column Filter. Ser


necesario reinicializar las suscripciones.

No se admite la posibilidad de agregar una columna de identidad a una tabla


publicada porque puede dar como resultado la falta de convergencia cuando la
columna se replica en el suscriptor. Los valores de la columna de identidad en el
publicador dependen del orden en que se almacenen fsicamente 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.

Quitar columnas

Para quitar una columna de una publicacin existente y de la tabla del publicador,
ejecute ALTER TABLE <tabla> DROP <columna>. De forma predeterminada,
la columna se quitar de la tabla en todos los suscriptores.

EQUIPO 1 3
SQL SERVER

Para quitar una columna de una publicacin existente, pero conservarla en la tabla
del publicador, use sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn
(Transact-SQL) o el cuadro de dilogo Propiedades de la publicacin:
<publicacin>.

Para ms informacin, consulte Define and Modify a Column Filter. Ser


necesario generar una instantnea nueva.

La columna que se quita no puede utilizarse en las clusulas de filtro de ningn


artculo de ninguna publicacin de la base de datos.
Al quitar una columna de un artculo publicado, tenga en cuenta las restricciones,
ndices o propiedades de la columna que pudieran afectar a la base de datos. Por
ejemplo:
o No puede quitar columnas utilizadas en una clave principal de los artculos
en publicaciones transaccionales, ya que se utilizan en la replicacin.
o No puede quitar la columna rowguid de los artculos de publicaciones de
combinacin ni la columna mstran_repl_version de los artculos de
publicaciones transaccionales que admiten suscripciones de actualizacin,
ya que se usan en la replicacin.
o Los cambios de ndice no se propagan a los suscriptores: si quita una
columna en el publicador y se quita un ndice dependiente, la eliminacin
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 eliminacin de la columna cuando se replique desde el
publicador al suscriptor. Si no funciona la sincronizacin debido a un
ndice en el suscriptor, quite manualmente el ndice y ejecute de nuevo el
agente de mezcla.
o Las restricciones deben tener un nombre explcito para permitir la
eliminacin. Para obtener ms informacin, vea la seccin
"Consideraciones generales" de este tema.

Replicacin transaccional

Los cambios de esquema se propagan a los suscriptores que ejecutan versiones


anteriores de SQL Server, pero la instruccin DDL solo debe incluir sintaxis
compatible con la versin instalada en el suscriptor.

Si el suscriptor vuelve a publicar los datos, los nicos cambios de esquema


admitidos sern agregar y quitar una columna. Estos cambios deberan realizarse
en el publicador mediante sp_repladdcolumn (Transact-SQL) y
sp_repldropcolumn (Transact-SQL) en lugar de mediante la sintaxis ALTER
TABLE DDL.

Los cambios de esquema no se replican en los suscriptores que no sean de SQL


Server.
Los cambios de esquema no se propagan desde los publicadores que no sean de
SQL Server .
No se pueden alterar las vistas indizadas que se replican como tablas. Se pueden
alterar las vistas indizadas que se replican como tales, pero esto har que se
conviertan en vistas normales en lugar de vistas indizadas.
EQUIPO 1 4
SQL SERVER

Si la publicacin admite suscripciones de actualizacin inmediata o en cola, se


debe poner el sistema en modo inactivo antes de realizar cambios de esquema: es
necesario detener toda la actividad en la tabla publicada en el publicador y los
suscriptores, y propagar los datos pendientes a todos los nodos. Una vez
propagados los cambios de esquema a todos los nodos, se puede reiniciar la
actividad en las tablas publicadas.
Si la publicacin est en una topologa punto a punto, se debe poner el sistema en
modo inactivo antes de realizar cambios de esquema. Para ms informacin, vea
Poner en modo inactivo una topologa de replicacin (programacin de la
replicacin con Transact-SQL).
La adicin de una columna de marca de tiempo a una tabla y la asignacin de la
marca de tiempo a binary(8) hacen que se reinicialice el artculo para todas las
suscripciones activas.

Replicacin de mezcla

El nivel de compatibilidad de las publicaciones determina la forma en que la


replicacin de mezcla controla los cambios de esquema y si la instantnea debe
establecerse en modo nativo (valor predeterminado) o en modo de carcter:
o Para replicar cambios de esquema, el nivel de compatibilidad de la
publicacin debe ser de al menos 90RTM. Si los suscriptores ejecutan
versiones anteriores de SQL Server o el nivel de compatibilidad es inferior
a 90RTM, puede usar sp_repladdcolumn (Transact-SQL) y
sp_repldropcolumn (Transact-SQL) para agregar y quitar columnas. No
obstante, estos procedimientos estn desusados.
o Si intenta agregar a un artculo existente una columna con un tipo de datos
introducido en SQL Server 2008, SQL Server se comportar de este modo:

100RTM, 100RTM, Todos los dems


instantnea instantnea de niveles de
nativa carcter compatibilidad
Permitir Bloquear
hierarchyid Bloquear cambio
cambio cambio
geography y Permitir Permitir
Bloquear cambio
geometry cambio cambio
secuencia de Permitir Bloquear
Bloquear cambio
archivo cambio cambio
date, time,
Permitir Permitir
datetime2, and Bloquear cambio
cambio cambio
datetimeoffset

o 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 sincronizacin y es necesario
reinicializar la suscripcin.

EQUIPO 1 5
SQL SERVER

Si se realiza un cambio de esquema en una columna que forma parte de un filtro


de combinacin o con parmetros, es necesario reinicializar todas las
suscripciones y volver a generar la instantnea.
La replicacin de mezcla proporciona procedimientos almacenados para omitir
los cambios de esquema durante la solucin de problemas. Para obtener ms
informacin, vea sp_markpendingschemachange (Transact-SQL) y
sp_enumeratependingschemachanges (Transact-SQL).

EQUIPO 1 6