Condividi tramite


sp_reinitsubscription (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure

Contrassegna la sottoscrizione per la reinizializzazione. Questa stored procedure viene eseguita nel server di pubblicazione per sottoscrizioni push.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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 ]
[ ; ]

Argomenti

[ @publication = ] N'publication'

Nome della pubblicazione. @publication è sysname, con il valore predefinito all.

[ @article = ] N'article'

Nome dell'articolo. @article è sysname, con un valore predefinito .all Per una pubblicazione ad aggiornamento immediato, @article deve essere all. In caso contrario, la stored procedure ignora la pubblicazione e segnala un errore.

[ @subscriber = ] N'subscriber'

Nome del Sottoscrittore. @subscriber è sysname, senza impostazione predefinita.

[ @destination_db = ] N'destination_db'

Nome del database di destinazione. @destination_db è sysname, con il valore predefinito all.

[ @for_schema_change = ] for_schema_change

Specifica se viene eseguita la reinizializzazione in seguito a modifiche dello schema apportate nel database di pubblicazione. @for_schema_change è bit, con il valore predefinito 0.

  • Se 0, le sottoscrizioni attive per le pubblicazioni che consentono l'aggiornamento immediato vengono riattivate purché l'intera pubblicazione e non solo alcuni dei relativi articoli vengano reinizializzati. Le reinizializzazione viene pertanto avviata in seguito a modifiche dello schema.

  • Se 1, le sottoscrizioni attive non vengono riattivate fino all'esecuzione del agente di snapshot.

[ @publisher = ] N'publisher'

Specifica un server di pubblicazione non SQL Server. @publisher è sysname, con un valore predefinito .NULL

@publisher non deve essere usato per i server di pubblicazione di SQL Server.

[ @ignore_distributor_failure = ] ignore_distributor_failure

Consente la reinizializzazione anche se il server di distribuzione non esiste o è offline. @ignore_distributor_failure è bit, con un valore predefinito .0 Se 0, la reinizializzazione non riesce se il server di distribuzione non esiste o è offline.

[ @invalidate_snapshot = ] invalidate_snapshot

Consente di invalidare lo snapshot della pubblicazione esistente. @invalidate_snapshot è bit, con il valore predefinito 0. Se 1, viene generato un nuovo snapshot per la pubblicazione.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_reinitsubscription viene usato nella replica transazionale.

sp_reinitsubscription non è supportato per la replica transazionale peer-to-peer.

Per le sottoscrizioni in cui lo snapshot iniziale viene applicato automaticamente e in cui la pubblicazione non consente sottoscrizioni aggiornabili, il agente di snapshot deve essere eseguito dopo l'esecuzione di questa stored procedure in modo che i file di schema e di programma di copia bulk vengano preparati e i agente di distribuzione possano quindi risincronizzare le sottoscrizioni.

Per le sottoscrizioni in cui viene applicato automaticamente lo snapshot iniziale e la pubblicazione consente sottoscrizioni aggiornabili, il agente di distribuzione risincronizza la sottoscrizione usando lo schema più recente e i file di programma di copia bulk creati in precedenza dal agente di snapshot. Il agente di distribuzione risincronizza la sottoscrizione immediatamente dopo l'esecuzione sp_reinitsubscriptiondell'utente, se il agente di distribuzione non è occupato. In caso contrario, la sincronizzazione può verificarsi dopo l'intervallo di messaggio (specificato da agente di distribuzione parametro MessageIntervaldel prompt dei comandi ).

sp_reinitsubscription non ha alcun effetto sulle sottoscrizioni in cui lo snapshot iniziale viene applicato manualmente.

Per risincronizzare le sottoscrizioni anonime a una pubblicazione, passare all o NULL come @subscriber.

La replica transazionale supporta la reinizializzazione della sottoscrizione a livello di articolo. Lo snapshot dell'articolo viene riapplicato nel Sottoscrittore durante la successiva sincronizzazione dopo che l'articolo è stato contrassegnato per la reinizializzazione. Se esistono articoli dipendenti sottoscritti dallo stesso Sottoscrittore, tuttavia, la riapplicazione dello snapshot nell'articolo potrebbe avere esito negativo, a meno che anche gli articoli dipendenti della pubblicazione non vengano reinizializzati automaticamente in particolari circostanze:

  • Se il comando di precreazione nell'articolo è drop, gli articoli per le viste associate a schema e le stored procedure associate allo schema sull'oggetto di base di tale articolo sono contrassegnati anche per la reinizializzazione.

  • Se l'opzione dello schema nell'articolo include script di integrità referenziale dichiarata nelle chiavi primarie, gli articoli con tabelle di base, con relazioni di chiave esterna con tabelle di base dell'articolo reinizializzato, vengono contrassegnati anche per la reinizializzazione.

Esempi

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

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin , i membri del ruolo predefinito del database db_owner oppure l'autore della sottoscrizione può eseguire sp_reinitsubscription.