Compartir a través de


sp_reinitsubscription (Transact-SQL)

Marca las suscripciones para reinicialización. Este procedimiento almacenado se ejecuta en el publicador para suscripciones de inserción.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

sp_reinitsubscription [ [ @publication = ] 'publication' ]
    [ , [ @article = ] 'article' ]
        , [ @subscriber = ] 'subscriber'
    [ , [ @destination_db = ] 'destination_db']
    [ , [ @for_schema_change = ] 'for_schema_change']
    [ , [ @publisher = ] 'publisher' ]
    [ , [ @ignore_distributor_failure = ] ignore_distributor_failure ] 
    [ , [ @invalidate_snapshot = ] invalidate_snapshot ]

Argumentos

  • [ @publication=] 'publication'
    Es el nombre de la publicación. publication es de tipo sysname y su valor predeterminado es all.

  • [ @article=] 'article'
    Es el nombre del artículo. article es de tipo sysname y su valor predeterminado es all. Para una publicación de actualización inmediata, article debe ser all; de lo contrario, el procedimiento almacenado pasa por alto la publicación e informa que se ha producido un error.

  • [ @subscriber=] 'subscriber'
    Es el nombre del suscriptor. subscriber es de tipo sysname y no tiene un valor predeterminado.

  • [ @destination_db=] 'destination_db'
    Es el nombre de la base de datos de destino. destination_db es de tipo sysname y su valor predeterminado es all.

  • [ @for_schema_change=] 'for_schema_change'
    Indica si la reinicialización se produce como resultado de un cambio de esquema en la base de datos de publicaciones. for_schema_change es de tipo bit y su valor predeterminado es 0. Si es 0, las suscripciones activas a las publicaciones que permiten la actualización inmediata se reactivan siempre y cuando se reinicialice toda la publicación y no sólo algunos de los artículos. Esto significa que la reinicialización se produce como resultado de un cambio de esquema. Si es 1, las suscripciones activas no se reactivan hasta que se ejecute el Agente de instantáneas.

  • [ @publisher= ] 'publisher'
    Especifica un publicador que no es de SQL Server. publisher es de tipo sysname y su valor predeterminado es NULL.

    [!NOTA]

    publisher no se debe utilizar para publicadores de SQL Server.

  • [ @ignore_distributor_failure= ] ignore_distributor_failure
    Permite la reinicialización incluso si el distribuidor no existe o no está conectado. ignore_distributor_failure es de tipo bit y su valor predeterminado es 0. Si es 0, se produce un error en la reinicialización en caso de que el distribuidor no exista o esté sin conexión.

  • [ @invalidate_snapshot= ] invalidate_snapshot
    Invalida la instantánea de publicación existente. invalidate_snapshot es de tipo bit, con valor predeterminado 0. Si es 1, se genera una nueva instantánea para la publicación.

Valores de código de retorno

0 (correcto) o 1 (error)

Notas

sp_reinitsubscription se utiliza en la replicación transaccional.

sp_reinitsubscription no se admite en la replicación transaccional de punto a punto.

Para aquellas suscripciones en las que se aplica automáticamente la instantánea inicial y en las que la publicación no admite suscripciones actualizables, es necesario ejecutar el Agente de instantáneas después de ejecutar el procedimiento almacenado a fin de que el esquema y los archivos del programa de copia masiva estén preparados; a continuación, los Agentes de distribución estarán preparados para volver a sincronizar las suscripciones.

Para aquellas suscripciones en las que la instantánea inicial se aplica automáticamente y en las que la publicación admite suscripciones actualizables, el Agente de distribución vuelve a sincronizar la suscripción utilizando el esquema y los archivos del programa de copia masiva más recientes creados previamente por el Agente de instantáneas. El Agente de distribución vuelve a sincronizar la suscripción inmediatamente después de que el usuario ejecute sp_reinitsubscription, si el Agente de distribución no está ocupado; de lo contrario, la sincronización se podría realizar después del intervalo de mensajes (especificado por el parámetro de símbolo del sistema del Agente de distribución: MessageInterval).

sp_reinitsubscription no tiene ningún efecto en suscripciones en las que la instantánea inicial se aplica manualmente.

Para volver a sincronizar las suscripciones anónimas a una publicación, pase all o NULL como subscriber.

La replicación transaccional admite la reinicialización de suscripciones en el nivel del artículo. La instantánea del artículo se volverá a aplicar en el suscriptor durante la siguiente sincronización una vez que se haya marcado el artículo para reinicializarlo. Sin embargo, si hay artículos dependientes a los que también está suscrito el mismo suscriptor, se puede generar un error al volver a aplicar la instantánea en el artículo, a menos que los artículos dependientes de la publicación se reinicialicen también automáticamente en determinadas circunstancias:

  • Si el comando de creación previa del artículo es 'drop', los artículos de vistas y procedimientos almacenados enlazados a un esquema del objeto base de ese artículo también se marcan para reinicializarlos.

  • Si la opción de esquema del artículo incluye scripts de integridad referencial declarada en las claves principales, los artículos que tienen tablas base con relaciones de clave externa con tablas base del artículo reinicializado también se marcan para reinicializarlos.

Ejemplo

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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 @subscriptionDB AS sysname;
DECLARE @publication AS sysname;
SET @subscriptionDB = N'AdventureWorksReplica';
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorksReplica]

-- Execute at the Publisher to reinitialize the push subscription.
EXEC sp_reinitsubscription 
    @subscriber = $(SubServer),
    @destination_db = @subscriptionDB,
    @publication = @publication;
GO

-- Start the Distribution Agent.

Permisos

Sólo los miembros de la función fija de servidor sysadmin, los miembros de la función fija de base de datos db_owner o el creador de la suscripción pueden ejecutar sp_reinitsubscription.