Compartir vía


sp_reinitsubscription (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

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

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

[ @publication = ] N'publication'

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

[ @article = ] N'article'

Nombre del artículo. @article es sysname, con un valor predeterminado de all. Para una publicación de actualización inmediata, @article debe ser all. De lo contrario, el procedimiento almacenado omite la publicación e informa de un error.

[ @subscriber = ] N'subscriber'

Nombre del suscriptor. @subscriber es sysname, sin ningún valor predeterminado.

[ @destination_db = ] N'destination_db'

El nombre de la base de datos de destino. @destination_db es sysname, con un valor predeterminado de 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 publicación. @for_schema_change es bit, con un valor predeterminado de 0.

  • Si 0es , las suscripciones activas para publicaciones que permiten la actualización inmediata se reactivan siempre que toda la publicación, y no solo algunos de sus artículos, se reinicializan. Esto significa que la reinicialización se produce como resultado de un cambio de esquema.

  • Si 1es , las suscripciones activas no se reactivan hasta que se ejecute el Agente de instantáneas.

[ @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 para publicadores de SQL Server.

[ @ignore_distributor_failure = ] ignore_distributor_failure

Permite reinicialización incluso si el distribuidor no existe o está sin conexión. @ignore_distributor_failure es bit, con un valor predeterminado de 0. Si 0es , se produce un error en la reinicialización si el distribuidor no existe o está sin conexión.

[ @invalidate_snapshot = ] invalidate_snapshot

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

Valores de código de retorno

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

Comentarios

sp_reinitsubscription se usa en la replicación transaccional.

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

En el caso de las suscripciones en las que se aplica automáticamente la instantánea inicial y donde la publicación no permite suscripciones actualizables, el Agente de instantáneas debe ejecutarse después de ejecutar este procedimiento almacenado para que se preparen los archivos de programa de esquema y copia masiva y los Agente de distribución puedan resincronizar las suscripciones.

En el caso de las suscripciones en las que se aplica automáticamente la instantánea inicial y la publicación permite suscripciones actualizables, el Agente de distribución resincroniza la suscripción mediante el esquema más reciente y los archivos de programa de copia masiva creados anteriormente por el Agente de instantáneas. El Agente de distribución resincroniza 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 puede producirse después del intervalo de mensajes (especificado por Agente de distribución parámetro MessageIntervaldel símbolo del sistema ).

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

Para resincronizar 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 precremento del artículo es drop, los artículos para vistas enlazadas a esquema y procedimientos almacenados enlazados a esquema en el objeto base de ese artículo también se marca para reinicialización.

  • Si la opción de esquema del artículo incluye scripting 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 reinicialización.

Ejemplos

-- 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'AdventureWorks2022Replica';
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorks2022Replica]

-- 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

Solo los miembros del rol fijo de servidor sysadmin , los miembros del rol fijo de base de datos db_owner o el creador de la suscripción pueden ejecutar sp_reinitsubscription.