Compartir a través de


sp_addpublication (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Crea una publicación de instantáneas o transaccional. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicación.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_addpublication
    [ @publication = ] N'publication'
    [ , [ @taskid = ] taskid ]
    [ , [ @restricted = ] N'restricted' ]
    [ , [ @sync_method = ] N'sync_method' ]
    [ , [ @repl_freq = ] N'repl_freq' ]
    [ , [ @description = ] N'description' ]
    [ , [ @status = ] N'status' ]
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @immediate_sync = ] N'immediate_sync' ]
    [ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
    [ , [ @allow_push = ] N'allow_push' ]
    [ , [ @allow_pull = ] N'allow_pull' ]
    [ , [ @allow_anonymous = ] N'allow_anonymous' ]
    [ , [ @allow_sync_tran = ] N'allow_sync_tran' ]
    [ , [ @autogen_sync_procs = ] N'autogen_sync_procs' ]
    [ , [ @retention = ] retention ]
    [ , [ @allow_queued_tran = ] N'allow_queued_tran' ]
    [ , [ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @pre_snapshot_script = ] N'pre_snapshot_script' ]
    [ , [ @post_snapshot_script = ] N'post_snapshot_script' ]
    [ , [ @compress_snapshot = ] N'compress_snapshot' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_subdirectory = ] N'ftp_subdirectory' ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @allow_dts = ] N'allow_dts' ]
    [ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
    [ , [ @conflict_policy = ] N'conflict_policy' ]
    [ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @queue_type = ] N'queue_type' ]
    [ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
    [ , [ @logreader_job_name = ] N'logreader_job_name' ]
    [ , [ @qreader_job_name = ] N'qreader_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @allow_initialize_from_backup = ] N'allow_initialize_from_backup' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @enabled_for_p2p = ] N'enabled_for_p2p' ]
    [ , [ @publish_local_changes_only = ] N'publish_local_changes_only' ]
    [ , [ @enabled_for_het_sub = ] N'enabled_for_het_sub' ]
    [ , [ @p2p_conflictdetection = ] N'p2p_conflictdetection' ]
    [ , [ @p2p_originator_id = ] p2p_originator_id ]
    [ , [ @p2p_continue_onconflict = ] N'p2p_continue_onconflict' ]
    [ , [ @allow_partition_switch = ] N'allow_partition_switch' ]
    [ , [ @replicate_partition_switch = ] N'replicate_partition_switch' ]
    [ , [ @allow_drop = ] N'allow_drop' ]
    [ , [ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy' ]
[ ; ]

Argumentos

[ @publication = ] N'publication'

Nombre de la publicación que se va a crear. @publication es sysname, sin ningún valor predeterminado. El nombre debe ser único en la base de datos.

[ @taskid = ] taskid

Compatible solo con la compatibilidad con versiones anteriores; use sp_addpublication_snapshot.

[ @restricted = ] N'restricted'

Compatible solo con la compatibilidad con versiones anteriores; use default_access.

[ @sync_method = ] N'sync_method'

Modo de sincronización. @sync_method es nvarchar(40) y puede ser uno de los valores siguientes.

Valor Descripción
native 1 Genera la salida de todas las tablas mediante un programa de copia masiva en modo nativo.
character Genera la salida de todas las tablas mediante un programa de copia masiva en modo de caracteres. Nota: Para un publicador de Oracle, character solo es válido para la replicación de instantáneas.
concurrent 1 Genera la salida del programa de copia masiva en modo nativo de todas las tablas, pero no bloquea las tablas durante la instantánea. Solo se admite para publicaciones transaccionales.
concurrent_c Genera la salida del programa de copia masiva en modo de caracteres de todas las tablas, pero no bloquea las tablas durante la instantánea. Solo se admite para publicaciones transaccionales.
database snapshot Produce la salida de todas las tablas mediante un programa de copia masiva en modo nativo desde una instantánea de base de datos. Las instantáneas de base de datos no están disponibles en todas las ediciones de SQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL Server, consulta Ediciones y características admitidas de SQL Server 2022.
database snapshot character Produce la salida de todas las tablas mediante un programa de copia masiva en modo de carácter desde una instantánea de base de datos. Las instantáneas de base de datos no están disponibles en todas las ediciones de SQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL Server, consulta Ediciones y características admitidas de SQL Server 2022.
NULL (valor predeterminado) El valor predeterminado es native para publicadores de SQL Server. En el caso de los publicadores que no son de SQL Server, el character valor predeterminado es cuando el valor de @repl_freq es Snapshot y se concurrent_c para todos los demás casos.

1 No se admite para publicadores de Oracle.

[ @repl_freq = ] N'repl_freq'

El tipo de frecuencia de replicación, @repl_freq es nvarchar(10) y puede ser uno de los siguientes valores.

Valor Descripción
continuous (valor predeterminado) El agente de registro del log se ejecuta continuamente. Para los publicadores que no son de SQL Server, esto requiere que @sync_method establecerse concurrent_cen .
snapshot El agente de registro del log se ejecuta según una programación. Para los publicadores que no son de SQL Server, esto requiere que @sync_method establecerse characteren .

[ @description = ] N'description'

Descripción opcional de la publicación. @description es nvarchar(255), con un valor predeterminado de NULL.

[ @status = ] N'status'

Especifica si los datos de publicación están disponibles. @status es nvarchar(8) y puede ser uno de los siguientes valores.

Valor Descripción
active Los datos de la publicación están inmediatamente disponibles para los suscriptores.
inactive (valor predeterminado) Los datos de publicación no están disponibles para los suscriptores cuando se crea la publicación por primera vez (pueden suscribirse, pero las suscripciones no se procesan).

No se admite para publicadores de Oracle.

[ @independent_agent = ] N'independent_agent'

Especifica si hay un Agente de distribución independiente para esta publicación. @independent_agent es nvarchar(5), con un valor predeterminado de false.

  • Si truees , hay una Agente de distribución independiente para esta publicación.
  • Si falsees , la publicación usa una Agente de distribución compartida y cada par de base de datos de publicador o suscriptor tiene un único agente compartido.

[ @immediate_sync = ] N'immediate_sync'

Especifica si los archivos de sincronización de la publicación se crean cada vez que se ejecuta el agente de instantáneas. @immediate_sync es nvarchar(5), con un valor predeterminado de false.

Si truees , los archivos de sincronización se crean o se vuelven a crear cada vez que se ejecuta el Agente de instantáneas. Los suscriptores pueden disponer inmediatamente de los archivos si el Agente de instantáneas ya ha terminado su tarea antes de crear 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 debe ser true para que @immediate_sync sea true. Si falsees , los archivos de sincronización solo se crean si hay nuevas suscripciones. Debe llamar a sp_addsubscription para cada suscripción al agregar incrementalmente un nuevo artículo a una publicación existente. Los suscriptores no pueden recibir los archivos de sincronización después de la suscripción hasta que se inicien y completen los Agente de instantáneas.

[ @enabled_for_internet = ] N'enabled_for_internet'

Especifica si la publicación está habilitada para Internet y determina si se puede utilizar el protocolo de transferencia de archivos (FTP) para transferir los archivos de instantánea a un suscriptor. @enabled_for_internet es nvarchar(5), con un valor predeterminado de false. Si truees , los archivos de sincronización de la publicación se colocan en el C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp directorio . El usuario debe crear el Ftp directorio.

[ @allow_push = ] N'allow_push'

Especifica si es posible crear suscripciones de inserción para la publicación indicada. @allow_push es nvarchar(5), con un valor predeterminado de true, que permite suscripciones de inserción en la publicación.

[ @allow_pull = ] N'allow_pull'

Especifica si es posible crear suscripciones de extracción para la publicación indicada. @allow_pull es nvarchar(5), con un valor predeterminado de false. Si falsees , no se permiten suscripciones de extracción en la publicación.

[ @allow_anonymous = ] N'allow_anonymous'

Especifica si es posible crear suscripciones anónimas para la publicación indicada. @allow_anonymous es nvarchar(5), con un valor predeterminado de false. Si truees , @immediate_sync también debe establecerse trueen . Si falsees , no se permiten suscripciones anónimas en la publicación.

[ @allow_sync_tran = ] N'allow_sync_tran'

Especifica si se permiten suscripciones de actualización inmediata en la publicación. @allow_sync_tran es nvarchar(5), con un valor predeterminado de false. true no se admite para publicadores de Oracle.

[ @autogen_sync_procs = ] N'autogen_sync_procs'

Especifica si se ha generado en el publicador un procedimiento almacenado de sincronización para suscripciones de actualización. @autogen_sync_procs es nvarchar(5) y puede ser uno de los siguientes valores.

Valor Descripción
true Se define de forma automática cuando se habilita la actualización de suscripciones.
false Se establece automáticamente cuando las suscripciones de actualización no están habilitadas o para publicadores de Oracle.
NULL (valor predeterminado) El valor predeterminado es cuando true se habilitan las suscripciones de actualización y a false cuando no se habilitan las suscripciones de actualización.

Nota:

El valor proporcionado por el usuario para @autogen_sync_procsse invalidará en función de los valores especificados para @allow_queued_tran y @allow_sync_tran.

[ @retention = ] retención

Período de retención en horas para la actividad de la suscripción. @retention es int, con un valor predeterminado de 336. Si una suscripción no está activa dentro del período de retención, expira y se quita. El valor puede ser mayor que el período máximo de retención de la base de datos de distribución utilizada por el publicador. Si 0es , las suscripciones conocidas a la publicación nunca expirarán y las quitará el Agente de limpieza de suscripciones expiradas.

[ @allow_queued_tran = ] N'allow_queued_tran'

Habilita o deshabilita la colocación en cola de los cambios del suscriptor hasta que se puedan aplicar en el publicador. @allow_queued_tran es nvarchar(5), con un valor predeterminado de false.

  • Si falsees , los cambios en el suscriptor no se ponen en cola.
  • true no se admite para publicadores de Oracle.

[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder'

Especifica si los archivos de instantánea se almacenan en la carpeta predeterminada. @snapshot_in_defaultfolder es nvarchar(5), con un valor predeterminado de true.

  • Si truees , los archivos de instantánea se pueden encontrar en la carpeta predeterminada.
  • Si falsees , los archivos de instantánea se han almacenado en la ubicación alternativa especificada por @alt_snapshot_folder.

Las ubicaciones alternativas pueden estar en otro servidor, en una unidad de red o en medios extraíbles (como discos extraíbles). También puede guardar los archivos de instantánea en un sitio FTP, para que el suscriptor los recupere más tarde. Este parámetro puede ser true y seguir teniendo una ubicación en el parámetro @alt_snapshot_folder . Esta combinación especifica que los archivos de instantáneas se almacenarán tanto en la ubicación predeterminada como en la alternativa.

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

Especifica la ubicación de la carpeta alternativa de la instantánea. @alt_snapshot_folder es nvarchar(255), con un valor predeterminado de NULL.

[ @pre_snapshot_script = ] N'pre_snapshot_script'

Especifica un puntero a una ubicación de archivo .sql . @pre_snapshot_script es nvarchar(255), con un valor predeterminado de NULL. El Agente de distribución ejecutará el script previo a la instantánea antes de la ejecución de cualquiera de los scripts de objetos replicados al aplicar la instantánea en un suscriptor. El script se ejecuta en el contexto de seguridad utilizado por el Agente de distribución al conectarse a la base de datos de suscripciones.

[ @post_snapshot_script = ] N'post_snapshot_script'

Especifica un puntero a una .sql ubicación de archivo. @post_snapshot_script es nvarchar(255), con un valor predeterminado de NULL. El Agente de distribución ejecutará el script posterior a la instantánea después de que se apliquen el resto de scripts de objetos replicados y datos durante la sincronización inicial. El script se ejecuta en el contexto de seguridad utilizado por el Agente de distribución al conectarse a la base de datos de suscripciones.

[ @compress_snapshot = ] N'compress_snapshot'

Especifica que la instantánea escrita en la ubicación de @alt_snapshot_folder se va a comprimir en el formato CAB de Microsoft. @compress_snapshot es nvarchar(5), con un valor predeterminado de false.

  • false especifica que la instantánea no está comprimida.
  • true especifica que la instantánea está comprimida.

Los archivos de instantánea que tienen más de 2 gigabytes (GB) no se pueden comprimir. Los archivos de instantánea comprimidos se descomprimen en la ubicación en la que se ejecuta el Agente de distribución; por lo general, se usan suscripciones de extracción con las instantáneas comprimidas para descomprimir los archivos en el suscriptor. La instantánea de la carpeta predeterminada no se puede comprimir.

[ @ftp_address = ] N'ftp_address'

Dirección de red del servicio FTP para el distribuidor. @ftp_address es sysname, con un valor predeterminado de NULL. Especifica dónde se encuentran los archivos de instantánea de una publicación para que los recoja el Agente de distribución o el Agente de mezcla de un suscriptor. Dado que esta propiedad se almacena para cada publicación, cada publicación puede tener una @ftp_address diferente. La publicación debe ser compatible con la propagación de instantáneas mediante FTP.

[ @ftp_port = ] ftp_port

Número de puerto del servicio FTP para el distribuidor. @ftp_port es int, con un valor predeterminado de 21. Especifica dónde se encuentran los archivos de instantáneas de publicación para el Agente de distribución o Agente de mezcla de un suscriptor que se va a recoger. Dado que esta propiedad se almacena para cada publicación, cada publicación puede tener su propia @ftp_port.

[ @ftp_subdirectory = ] N'ftp_subdirectory'

Especifica dónde están disponibles los archivos de instantáneas para el Agente de distribución o Agente de mezcla de suscriptor para recoger si la publicación admite la propagación de instantáneas mediante FTP. @ftp_subdirectory es nvarchar(255), con un valor predeterminado de NULL. Dado que esta propiedad se almacena para cada publicación, cada publicación puede tener su propia @ftp_subdirctory o elegir no tener ningún subdirectorio, indicado con un NULL valor.

[ @ftp_login = ] N'ftp_login'

Nombre de usuario usado para conectarse al servicio FTP. @ftp_login es sysname, con un valor predeterminado de anonymous.

[ @ftp_password = ] N'ftp_password'

Contraseña de usuario usada para conectarse al servicio FTP. @ftp_password es sysname, con un valor predeterminado de NULL.

[ @allow_dts = ] N'allow_dts'

Especifica que la publicación permite transformaciones de datos. Puede especificar un paquete DTS al crear una suscripción. @allow_dts es nvarchar(5), con un valor predeterminado de false, que no permite transformaciones DTS. Cuando @allow_dts es true, @sync_method debe establecerse en character o concurrent_c.

true no se admite para publicadores de Oracle.

[ @allow_subscription_copy = ] N'allow_subscription_copy'

Habilita o deshabilita la funcionalidad de copia de las bases de datos de suscripciones suscritas a esta publicación. @allow_subscription_copy es nvarchar(5), con un valor predeterminado de false.

[ @conflict_policy = ] N'conflict_policy'

Especifica la directiva de resolución de conflictos seguida cuando se utiliza la opción de suscriptor de actualización en cola. @conflict_policy es nvarchar(100) y puede ser uno de los valores siguientes.

Valor Descripción
pub wins El publicador gana el conflicto
sub reinit Reinicializar la suscripción.
sub wins El suscriptor gana el conflicto
NULL (valor predeterminado) Si NULL, y la publicación es una publicación de instantáneas, la directiva predeterminada se convierte en sub reinit. Si NULL y la publicación no son una publicación de instantáneas, el valor predeterminado se convierte en pub wins.

No se admite para publicadores de Oracle.

[ @centralized_conflicts = ] N'centralized_conflicts'

Especifica si los registros de conflictos se almacenan en el publicador. @centralized_conflicts es nvarchar(5), con un valor predeterminado de NULL.

  • Si truees , los registros de conflictos se almacenan en el publicador.
  • Si falsees , los registros de conflictos se almacenan tanto en el publicador como en el suscriptor que provocó el conflicto.

No se admite para publicadores de Oracle.

[ @conflict_retention = ] conflict_retention

Especifica el período de retención de conflictos, en días. Es el período de tiempo durante el que se almacenan los metadatos de conflictos para la replicación transaccional punto a punto y para las suscripciones de actualización en cola. @conflict_retention es int, con un valor predeterminado de 14.

No se admite para publicadores de Oracle.

[ @queue_type = ] N'queue_type'

Especifica el tipo de cola utilizado. @queue_type es nvarchar(10) y puede ser uno de estos valores.

Valor Descripción
sql Use SQL Server para almacenar transacciones.
NULL (valor predeterminado) El valor predeterminado es sql, que especifica el uso de SQL Server para almacenar transacciones.

Nota:

La compatibilidad con el uso de Microsoft Message Queuing se interrumpe. Si especifica un valor de msmq , se producirá una advertencia y la replicación establecerá automáticamente el valor sqlen .

No se admite para publicadores de Oracle.

[ @add_to_active_directory = ] N'add_to_active_directory'

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.

[ @logreader_job_name = ] N'logreader_job_name'

Nombre de un trabajo de agente existente. @logreader_job_name es sysname, con un valor predeterminado de NULL. Este parámetro solo se especifica cuando el Agente de registro del Log usa un trabajo existente en lugar de crear uno nuevo.

[ @qreader_job_name = ] N'qreader_job_name'

Nombre de un trabajo de agente existente. @qreader_job_name es sysname, con un valor predeterminado de NULL. Este parámetro solo se especifica cuando el Agente de lectura de cola usa un trabajo existente en lugar de crear uno nuevo.

[ @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 agregar una publicación a un publicador de SQL Server.

[ @allow_initialize_from_backup = ] N'allow_initialize_from_backup'

Indica si los suscriptores pueden inicializar una suscripción a esta publicación a partir de una copia de seguridad en lugar de una instantánea inicial. @allow_initialize_from_backup es nvarchar(5) y puede ser uno de estos valores:

Valor Descripción
true Habilita la inicialización desde una copia de seguridad.
false Deshabilita la inicialización desde una copia de seguridad.
NULL (valor predeterminado) El valor predeterminado es true para una publicación en una topología de replicación punto a punto y false para todas las demás publicaciones.

Para obtener más información, consulte Initialize a Transactional Subscription Without a Snapshot.

Advertencia

Para evitar que falten datos de suscriptor, al usar sp_addpublication con @allow_initialize_from_backup = N'true', use @immediate_sync = N'true'siempre .

[ @replicate_ddl = ] replicate_ddl

Indica si la publicación admite replicación de esquema. @replicate_ddl es int, con un valor predeterminado de para publicadores de 1 SQL Server y 0 para publicadores que no son de SQL Server.

  • 1 indica que se replican las instrucciones del lenguaje de definición de datos (DDL) ejecutadas en el publicador.
  • 0 indica que las instrucciones DDL no se replican.

No se admite la replicación de esquemas para publicadores de Oracle.

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

El parámetro @replicate_ddl se respeta cuando una instrucción DDL agrega una columna. El parámetro @replicate_ddl se omite cuando una instrucción DDL modifica o quita una columna por los siguientes motivos.

  • Cuando se quita una columna, sysarticlecolumns se debe actualizar para evitar que se incluyan nuevas instrucciones DML, lo que provocaría un error en el agente de distribución. El parámetro @replicate_ddl se omite porque la replicación siempre debe replicar el cambio de esquema.

  • Cuando se modifica una columna, es posible que el tipo de datos de origen o la nulabilidad hayan cambiado, lo que hace que las instrucciones DML contengan un valor que podría no ser compatible con la tabla en el suscriptor. Estas instrucciones DML pueden hacer que el agente de distribución genere un error. El parámetro @replicate_ddl se omite porque la replicación siempre debe replicar el cambio de esquema.

  • Cuando una instrucción DDL agrega una nueva columna, sysarticlecolumns no incluye la nueva columna. Las instrucciones DML no intentan replicar datos para la nueva columna. Se respeta el parámetro porque la DDL es aceptable se realice o no la replicación.

[ @enabled_for_p2p = ] N'enabled_for_p2p'

Permite utilizar la publicación en una topología de replicación punto a punto. @enabled_for_p2p es nvarchar(5), con un valor predeterminado de false. true indica que la publicación admite la replicación punto a punto. Al establecer @enabled_for_p2p en 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.
  • @conflict_policy debe ser false.
  • @independent_agent debe ser true.
  • @repl_freq debe ser continuous.
  • @replicate_ddl debe ser 1.

Para obtener más información, consulte Replicación transaccional punto a punto.

[ @publish_local_changes_only = ] N'publish_local_changes_only'

Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

[ @enabled_for_het_sub = ] N'enabled_for_het_sub'

Permite que la publicación admita suscriptores que no son de SQL Server. @enabled_for_het_sub es nvarchar(5), con un valor predeterminado de false. Un valor de true significa que la publicación admite suscriptores que no son de SQL Server. Cuando @enabled_for_het_sub es true, se aplican las restricciones siguientes:

  • @allow_initialize_from_backup debe ser false.
  • @allow_push debe ser true.
  • @allow_queued_tran debe ser false.
  • @allow_subscription_copy debe ser false.
  • @allow_sync_tran debe ser false.
  • @autogen_sync_procs debe ser false.
  • @conflict_policy debe ser NULL.
  • @enabled_for_internet debe ser false.
  • @enabled_for_p2p debe ser false.
  • @ftp_address debe ser NULL.
  • @ftp_subdirectory debe ser NULL.
  • @ftp_password debe ser NULL.
  • @pre_snapshot_script debe ser NULL.
  • @post_snapshot_script debe ser NULL.
  • @replicate_ddl debe ser 0.
  • @qreader_job_name debe ser NULL.
  • @queue_type debe ser NULL.
  • @sync_method no puede ser native ni concurrent.

Para más información, consulte Non-SQL Server Subscribers.

[ @p2p_conflictdetection = ] N'p2p_conflictdetection'

Habilita el agente de distribución para detectar conflictos si la publicación está habilitada para la replicación punto a punto. @p2p_conflictdetection es nvarchar(5), con un valor predeterminado de false. Para obtener más información, consulte Detección de conflictos punto a punto en replicación punto a punto.

[ @p2p_originator_id = ] p2p_originator_id

Especifica un Id. para un nodo en una topología punto a punto. @p2p_originator_id es int, con un valor predeterminado de NULL. Este identificador se usa para la detección de conflictos si @p2p_conflictdetection está establecido en TRUE. Especifique un identificador positivo distinto de cero que no se haya usado en la topología. Para obtener una lista de identificadores que se usan, ejecute sp_help_peerconflictdetection.

[ @p2p_continue_onconflict = ] N'p2p_continue_onconflict'

Determina si el Agente de distribución continúa procesando los cambios después de la detección de un conflicto. @p2p_continue_onconflict es nvarchar(5), con un valor predeterminado de false.

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.

[ @allow_partition_switch = ] N'allow_partition_switch'

Especifica si ALTER TABLE...SWITCH se pueden ejecutar instrucciones en la base de datos publicada. @allow_partition_switch es nvarchar(5), con un valor predeterminado de false. Para obtener más información, vea Replicar tablas e índices con particiones.

[ @replicate_partition_switch = ] N'replicate_partition_switch'

Especifica si ALTER TABLE...SWITCH las instrucciones que se ejecutan en la base de datos publicada deben replicarse en suscriptores. @replicate_partition_switch es nvarchar(5), con un valor predeterminado de NULL. Esta opción solo es válida si @allow_partition_switch se establece en TRUE.

[ @allow_drop = ] N'allow_drop'

Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

[ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy'

Se aplica a: SQL Server 2019 (15.x) CU 13 y versiones posteriores.

@p2p_conflictdetection_policy es nvarchar(12) y puede ser uno de estos valores:

Valor Descripción
originatorid (valor predeterminado) El agente de distribución detecta el conflicto y decide el ganador en función del identificador del originador, si p2p_continue_onconflict = N'true'es . De lo contrario, genera un error.
lastwriter El agente de distribución detecta el conflicto y decide el ganador en función de la fecha y hora del último escritor si p2p_continue_onconflict = N'true'es . De lo contrario, genera un error.

Nota:

Al especificar originatorid, la detección de conflictos es la misma que la de SQL Server 2019 (15.x) CU 12 y versiones anteriores. Al especificar lastwriter, SQL Server permite que los conflictos se resuelvan automáticamente en función de la escritura más reciente.

Valores de código de retorno

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

Comentarios

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

Si existen varias publicaciones que publican el mismo objeto de base de datos, solo las publicaciones con un valor @replicate_ddl de 1 replica las ALTER TABLEinstrucciones DDL , ALTER VIEW, ALTER PROCEDURE, ALTER FUNCTIONy ALTER TRIGGER . Sin embargo, todas las publicaciones que publican la columna quitada replican una ALTER TABLE DROP COLUMN instrucción DDL.

Con la replicación DDL habilitada (@replicate_ddl = 1) para una publicación, con el fin de realizar cambios de DDL no replicados en la publicación, sp_changepublication primero debe ejecutarse para establecer @replicate_ddl en .0 Una vez emitidas las instrucciones DDL no replicadas, sp_changepublication se puede volver a ejecutar para volver a activar la replicación DDL.

Ejemplos

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

Permisos

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_addpublication. Los inicios de sesión que usan la autenticación de Windows deben tener una cuenta de usuario en la base de datos que represente su cuenta de usuario de Windows. Una cuenta de usuario que representa un grupo de Windows no es suficiente.