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 di sintassi Transact-SQL

Sintassi

  
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 ]  

Argomenti

[ @publication = ] 'publication' Nome della pubblicazione. publication è sysname, con un valore predefinito di tutti.

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

[ @subscriber = ] 'subscriber' Nome del Sottoscrittore. subscriber è sysname, senza impostazione predefinita.

[ @destination_db = ] 'destination_db' Nome del database di destinazione. destination_db è sysname, con un valore predefinito di tutti.

[ @for_schema_change = ] 'for_schema_change' Indica se la reinizializzazione si verifica in seguito a una modifica dello schema nel database di pubblicazione. for_schema_change è bit, con un valore predefinito pari a 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 = ] 'publisher' Specifica un server di pubblicazione non SQL Server. publisher è sysname, con valore predefinito NULL.

Nota

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 pari a 0. Se 0, la reinizializzazione non riesce se il server di distribuzione non esiste o è offline.

[ @invalidate_snapshot = ] invalidate_snapshot Invalida lo snapshot della pubblicazione esistente. invalidate_snapshot è bit, con un valore predefinito pari a 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 la pubblicazione non consente sottoscrizioni aggiornabili, l'agente snapshot deve essere eseguito al termine di questa stored procedure in modo che vengano preparati i file dello schema e del programma per la copia bulk e gli agenti di distribuzione siano quindi in grado di risincronizzare le sottoscrizioni.

Per le sottoscrizioni in cui lo snapshot iniziale viene applicato automaticamente e la pubblicazione consente sottoscrizioni aggiornabili, l'agente di distribuzione risincronizza la sottoscrizione utilizzando i file dello schema e del programma per la copia bulk più recenti creati in precedenza dall'agente snapshot. Il agente di distribuzione risincronizza la sottoscrizione immediatamente dopo l'esecuzione dell'utente sp_reinitsubscription, 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 del prompt dei comandi: MessageInterval).

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

Per risincronizzare le sottoscrizioni anonime a una pubblicazione, passare tutti o NULL come sottoscrittore.

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 preliminare eseguito sull'articolo è 'drop', gli articoli di viste associate a schema e stored procedure associate a schema dell'oggetto di base di tale articolo devono essere anch'essi contrassegnati per la reinizializzazione.

  • Se l'opzione dello schema dell'articolo include script dell'integrità referenziale dichiarata nelle chiavi primarie, gli articoli le cui tabelle di base includono relazioni di chiave esterna con le tabelle di base dell'articolo reinizializzato devono essere anch'essi contrassegnati per la reinizializzazione.

Esempio

-- 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 o l'autore della sottoscrizione può eseguire sp_reinitsubscription.

Vedi anche

Reinizializzare una sottoscrizione
Reinizializzare le sottoscrizioni
Stored procedure di replica (Transact-SQL)