Compartir vía


sp_changepublication (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Cambia las propiedades de una publicación. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicación.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_changepublication
    [ [ @publication = ] N'publication' ]
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

Argumentos

[ @publication = ] N'publication'

Nombre de la publicación. @publication es sysname, con un valor predeterminado de NULL.

[ @property = ] N'property'

Propiedad de publicación que se va a cambiar. @property es nvarchar(255), con un valor predeterminado de NULL.

[ @value = ] N'value'

El nuevo valor de la propiedad. @value es nvarchar(255), con un valor predeterminado de NULL.

Esta tabla describe las propiedades de la publicación que se pueden cambiar y las restricciones de los valores de esas propiedades.

Propiedad Valor Descripción
allow_anonymous true Las suscripciones anónimas se pueden crear para la publicación especificada y immediate_sync también deben ser true. No se puede cambiar para las publicaciones punto a punto.
false No se pueden crear suscripciones anónimas para la publicación especificada. No se puede cambiar para las publicaciones punto a punto.
allow_initialize_from_backup true Los suscriptores pueden inicializar una suscripción a esta publicación desde una copia de seguridad en lugar de desde una instantánea inicial. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
false Los suscriptores deben utilizar la instantánea inicial. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
allow_partition_switch true ALTER TABLE...SWITCH Las instrucciones se pueden ejecutar en la base de datos publicada. Para obtener más información, vea Replicar tablas e índices con particiones.
false ALTER TABLE...SWITCH Las instrucciones no se pueden ejecutar en la base de datos publicada.
allow_pull true Se permiten suscripciones de extracción para la publicación indicada. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
false No se permiten suscripciones de extracción para la publicación especificada. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
allow_push true Se permiten suscripciones de inserción para la publicación indicada.
false No se permiten suscripciones de inserción para la publicación especificada.
allow_subscription_copy true Habilita la funcionalidad de copia de las bases de datos suscritas a esta publicación. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
false Deshabilita la funcionalidad de copia de las bases de datos suscritas a esta publicación. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
alt_snapshot_folder Ubicación de la carpeta alternativa de la instantánea.
centralized_conflicts true Los registros de conflictos se almacenan en el publicador. Se puede cambiar únicamente si no hay suscripciones activas. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
false Los registros de conflictos se almacenan tanto en el publicador como en el suscriptor que provocó el conflicto. Se puede cambiar únicamente si no hay suscripciones activas. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
compress_snapshot true La instantánea de una carpeta de instantáneas alternativa se comprime en el formato de archivo .cab. La instantánea de la carpeta de instantáneas predeterminada no se puede comprimir.
false La instantánea no está comprimida, que es el comportamiento predeterminado para la replicación.
conflict_policy pub wins Directiva de resolución de conflictos para actualizar suscriptores en los que el publicador gana el conflicto. Esta propiedad se puede cambiar únicamente si no hay suscripciones activas. No es compatible con publicadores de Oracle.
sub reinit Para actualizar los suscriptores; si se produce un conflicto, la suscripción debe renicializarse. Esta propiedad se puede cambiar únicamente si no hay suscripciones activas. No es compatible con publicadores de Oracle.
sub wins Directiva de resolución de conflictos para actualizar suscriptores en los que el suscriptor gana el conflicto. Esta propiedad se puede cambiar únicamente si no hay suscripciones activas. No es compatible con publicadores de Oracle.
conflict_retention Valor int que especifica el período de retención de conflictos, en días. El período de retención predeterminado es de 14 días. 0 significa que no se necesita ninguna limpieza de conflictos. No es compatible con publicadores de Oracle.
description Entrada opcional en la que se describe la publicación.
enabled_for_het_sub true Permite que la publicación admita suscriptores que no son de SQL Server. enabled_for_het_sub no se puede cambiar cuando hay suscripciones a la publicación. Es posible que tenga que ejecutar sp_changepublication para cumplir los siguientes requisitos antes de establecer enabled_for_het_sub en true:
- allow_queued_tran debe ser false.
- allow_sync_tran debe ser false.
Cambiar enabled_for_het_sub a true podría cambiar la configuración de publicación existente. Para más información, consulte Non-SQL Server Subscribers. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
false La publicación no admite suscriptores que no son de SQL Server. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
enabled_for_internet true Se habilita la publicación para Internet y se puede utilizar el protocolo de transferencia de archivos (FTP) para transferir los archivos de instantáneas a un suscriptor. Los archivos de sincronización de la publicación se colocan en el directorio siguiente: C:\Program Files\Microsoft SQL Server\MSSQL\Repldata\ftp. ftp_address no puede ser NULL. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
false La publicación no está habilitada para Internet. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
enabled_for_p2p true La publicación admite la replicación punto a punto. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
Para establecer en enabled_for_p2p true, se aplican las restricciones siguientes:
- allow_anonymous debe ser false
- allow_dts debe ser false.
- allow_initialize_from_backup debe ser true
- allow_queued_tran debe ser false.
- allow_sync_tran debe ser false.
- enabled_for_het_sub debe ser false.
- independent_agent debe ser true.
- repl_freq debe ser continuous.
- replicate_ddl debe ser 1.
false La publicación no admite la replicación punto a punto. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
ftp_address Ubicación de los archivos de instantáneas de la publicación accesible a través de FTP. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
ftp_login Nombre de usuario usado para conectarse al servicio FTP y se permite el valor anonymous . Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
ftp_password Contraseña para el nombre de usuario utilizado para conectarse al servicio FTP. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
ftp_port Número de puerto del servicio FTP para el distribuidor. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
ftp_subdirectory Especifica dónde se crean los archivos de instantánea si la publicación admite la propagación de instantáneas mediante FTP. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
immediate_sync true Se crean o vuelven a crear archivos de sincronización para la publicación cada vez que se ejecuta el Agente de instantáneas. Los suscriptores pueden recibir los archivos de sincronización inmediatamente después de la suscripción, si el Agente de instantáneas se completa una vez antes de la suscripción. Las nuevas suscripciones obtienen los últimos archivos de sincronización generados por la ejecución más reciente del Agente de instantáneas. independent_agent también debe ser true. Para obtener más información, vea Efecto de la sincronización inmediata.
false Se crean archivos de sincronización solo si hay nuevas suscripciones. Los suscriptores no pueden recibir los archivos de sincronización después de la suscripción hasta que se inicie y complete la Agente de instantáneas.
independent_agent true La publicación tiene su propio Agente de distribución dedicado.
false La publicación utiliza un Agente de distribución compartido, y cada par de bases de datos de publicaciones y suscripciones tiene un agente compartido.
p2p_continue_onconflict true El Agente de distribución continúa procesando los cambios cuando se detecta un conflicto.

Precaución: Se recomienda usar el valor predeterminado de FALSE. Cuando esta opción se establece TRUEen , el Agente de distribución intenta converger datos en la topología aplicando la fila en conflicto del nodo que es el identificador de origen más alto. Este método no garantiza la convergencia. Debe asegurarse de que la topología sea coherente una vez detectado un conflicto. Para obtener más información, vea "Control de conflictos" en Detección de conflictos punto a punto en replicación punto a punto.
false El Agente de distribución detiene el procesamiento de los cambios cuando detecta un conflicto.
post_snapshot_script Especifica la ubicación de un archivo de script de Transact-SQL que el Agente de distribución se ejecuta después de que se apliquen todos los demás scripts y datos de objetos replicados durante una sincronización inicial.
pre_snapshot_script Especifica la ubicación de un archivo de script de Transact-SQL que el Agente de distribución se ejecuta antes de que se apliquen todos los demás scripts y datos de objetos replicados durante una sincronización inicial.
publish_to_ActiveDirectory true Este parámetro está en desuso y solo se admite para la compatibilidad con versiones anteriores de scripts. Ya no puede agregar información de publicación a Microsoft Active Directory.
false Quita la información de publicaciones de Active Directory.
queue_type sql Use SQL Server para almacenar transacciones. Esta propiedad se puede cambiar únicamente si no hay suscripciones activas.

Nota: La compatibilidad con el uso de Microsoft Message Queuing se interrumpe. Si se especifica un valor de msmq para @value se produce un error.
redirected_publisher Nombre del agente de escucha del grupo de disponibilidad. Se usa en la replicación punto a punto cuando un elemento del mismo nivel está en un grupo de disponibilidad. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server. Se introdujo en SQL Server 2019 (15.x) CU 13. Para obtener más información, consulte Configuración de un mismo nivel como parte del grupo de disponibilidad o Configuración de ambos elementos del mismo nivel en grupos de disponibilidad.
repl_freq continuous Publica la salida de todas las transacciones basadas en el registro.
snapshot Publica solamente los eventos de sincronización programados.
replicate_ddl 1 Las instrucciones de Lenguaje de definición de datos (DDL) que se ejecutan en el publicador se replican. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server.
0 Las instrucciones DDL no se replican. Esta propiedad no se puede cambiar para publicaciones que no son de SQL Server. No se puede deshabilitar la replicación de cambios de esquema al usar la replicación punto a punto.
replicate_partition_switch true ALTER TABLE...SWITCH Las instrucciones que se ejecutan en la base de datos publicada deben replicarse en suscriptores. Esta opción solo es válida si allow_partition_switch se establece en true. Para obtener más información, vea Replicar tablas e índices con particiones.
false ALTER TABLE...SWITCH Las instrucciones no deben replicarse en suscriptores.
retention int que representa el período de retención, en horas, para la actividad de suscripción. Si una suscripción no está activa dentro del período de retención, se quita.
snapshot_in_defaultfolder true Los archivos de instantánea se almacenan en la carpeta de instantáneas predeterminada. Si alt_snapshot_folder también se especifica, los archivos de instantánea se almacenan en las ubicaciones predeterminadas y alternativas.
false Los archivos de instantánea se almacenan en la ubicación alternativa especificada por alt_snapshot_folder.
status active Los datos de la publicación están disponibles inmediatamente para los suscriptores cuando se crea la publicación. No es compatible con publicadores de Oracle.
inactive Los datos de publicación no están disponibles para los suscriptores cuando se crea la publicación. No es compatible con publicadores de Oracle.
sync_method native Utiliza la salida de todas las tablas mediante copia masiva en modo nativo al sincronizar las suscripciones.
character Utiliza la salida de todas las tablas mediante copia masiva en modo de carácter al sincronizar las suscripciones.
concurrent Usa la salida del programa de copia masiva en modo nativo de todas las tablas, pero no bloquea las tablas durante el proceso de generación de instantáneas. No es válido para la replicación de instantáneas.
concurrent_c Usa la salida del programa de copia masiva en modo de caracteres de todas las tablas, pero no bloquea las tablas durante el proceso de generación de instantáneas. No es válido para la replicación de instantáneas.
taskid Esta propiedad está en desuso y ya no se admite.
allow_drop true Habilita la DROP TABLE compatibilidad de DLL con artículos que forman parte de la replicación transaccional. Versión mínima admitida: Service Pack 2014 (12.x) SQL Server 2 o superior y SQL Server 2016 (13.x) Service Pack 1 o superior. Para obtener más información, consulte KB 3170123
false (valor predeterminado) Deshabilita la DROP TABLE compatibilidad de DLL con artículos que forman parte de la replicación transaccional.
NULL (valor predeterminado) Devuelve la lista de valores admitidos para @property.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Confirma que la acción realizada por este procedimiento almacenado podría invalidar una instantánea existente. @force_invalidate_snapshot es bit, con un valor predeterminado de 0.

  • 0 especifica que los cambios realizados en el artículo no hacen que la instantánea no sea válida. Si el procedimiento almacenado detecta que el cambio requiere una nueva instantánea, se producirá un error y no se realizarán cambios.
  • 1 especifica que los cambios realizados en el artículo podrían hacer que la instantánea no sea válida. Si existen suscripciones que requieran una nueva instantánea, este valor da permiso para que la instantánea existente se marque como obsoleta y se genere otra nueva.

Consulte la sección Comentarios de las propiedades que, cuando se cambian, requieren la generación de una nueva instantánea.

[ @force_reinit_subscription = ] force_reinit_subscription

Confirma que la acción realizada por este procedimiento almacenado puede requerir la reinicialización de las suscripciones existentes. @force_reinit_subscription es bit, con un valor predeterminado de 0.

  • 0 especifica que los cambios realizados en el artículo no hacen que se reinicialice la suscripción. Si el procedimiento almacenado detecta que el cambio requiere la reinicialización de las suscripciones existentes, se producirá un error y no se realizarán cambios.
  • 1 especifica que los cambios realizados en el artículo hacen que se reinicialice la suscripción existente y que se conceda permiso para que se produzca la reinicialización de la suscripción.

[ @publisher = ] N'publisher'

Especifica un publicador que no es de SQL Server. @publisher es sysname, con un valor predeterminado de NULL.

@publisher no se debe usar al cambiar las propiedades del artículo en un publicador de SQL Server.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_changepublication se usa en la replicación de instantáneas y la replicación transaccional.

Después de cambiar cualquiera de las siguientes propiedades, debe generar una nueva instantánea y debe especificar un valor de 1 para el parámetro @force_invalidate_snapshot .

  • alt_snapshot_folder
  • compress_snapshot
  • enabled_for_het_sub
  • ftp_address
  • ftp_login
  • ftp_password
  • ftp_port
  • ftp_subdirectory
  • post_snapshot_script
  • pre_snapshot_script
  • snapshot_in_defaultfolder
  • sync_mode

Para enumerar objetos de publicación en Active Directory mediante el publish_to_active_directory parámetro , el objeto de SQL Server ya debe crearse en Active Directory.

Efecto de la sincronización inmediata

Cuando la sincronización inmediata está activada, se realiza un seguimiento de todos los cambios en el registro inmediatamente después de que se genere la instantánea inicial incluso si no hay suscripciones. Los cambios registrados se usan cuando un cliente usa la copia de seguridad para agregar un nuevo nodo del mismo nivel. Una vez restaurada la copia de seguridad, el elemento del mismo nivel se sincroniza con cualquier otro cambio que se produzca después de realizar la copia de seguridad. Dado que se realiza un seguimiento de los comandos en la base de datos de distribución, la lógica de sincronización puede examinar el último LSN de copia de seguridad y usarlo como punto de partida, sabiendo que el comando está disponible si la copia de seguridad se realizó dentro del período de retención máximo. (El valor predeterminado para el período de retención mínimo es de 0 horas y el período máximo de retención es de 24 horas).

Cuando la sincronización inmediata está desactivada, los cambios se mantienen al menos el período de retención mínimo y se limpian inmediatamente para todas las transacciones que ya se han replicado. Si la sincronización inmediata está desactivada y configurada con el período de retención predeterminado, es probable que los cambios necesarios después de que se haya realizado la copia de seguridad se limpien y que el nuevo nodo del mismo nivel no se inicialice correctamente. La única opción que queda es poner en modo inactivo la topología. Activar la sincronización inmediata proporciona mayor flexibilidad y es el valor recomendado para la replicación P2P.

Ejemplos

DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran' 

-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks2022]
EXEC sp_changepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0
GO

Permisos

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_changepublication.