sp_reinitsubscription (Transact-SQL)
Contrassegna la sottoscrizione per la reinizializzazione. Questa stored procedure viene eseguita nel server di pubblicazione per sottoscrizioni push.
Convenzioni della 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 è di tipo sysname e il valore predefinito è all.
- [ @article=] 'article'
Nome dell'articolo. article è di tipo sysname e il valore predefinito è all. Per le pubblicazioni ad aggiornamento immediato, article deve essere impostato su all. In caso contrario, la stored procedure ignora la pubblicazione e restituisce un errore.
- [ @subscriber=] 'subscriber'
Nome del Sottoscrittore. subscriber è di tipo sysname e non prevede alcun valore predefinito.
- [ @destination_db=] 'destination_db'
Nome del database di destinazione. destination_db è di tipo sysname e il valore predefinito è all.
- [ @for_schema_change=] 'for_schema_change'
Specifica se la reinizializzazione viene eseguita in seguito a modifiche dello schema apportate nel database di pubblicazione. for_schema_change è di tipo bit e il valore predefinito è 0. Se è 0, le sottoscrizioni attive delle pubblicazioni che supportano l'aggiornamento immediato vengono riattivate, a condizione che la reinizializzazione sia impostata per l'intera pubblicazione e non semplicemente per alcuni articoli. Le reinizializzazione viene pertanto avviata in seguito a modifiche dello schema. Se è 1, le sottoscrizioni attive vengono riattivate solo quando viene eseguito l'agente snapshot.
[@publisher= ] 'publisher'
Specifica un server di pubblicazione non SQL Server. publisher è di tipo sysname e il valore predefinito è NULL.[!NOTA] Non utilizzare publisher per server di pubblicazione SQL Server.
- [ @ignore_distributor_failure= ] ignore_distributor_failure
Consente la reinizializzazione anche se il server di distribuzione non esiste o non è in linea. ignore_distributor_failure è di tipo bit e il valore predefinito è 0. Se è 0, la reinizializzazione ha esito negativo se il server di distribuzione non esiste o non è in linea.
- [ @invalidate_snapshot= ] invalidate_snapshot
Invalida lo snapshot della pubblicazione esistente. invalidate_snapshot è di tipo bit e il valore predefinito è 0. Se il valore è 1, per la pubblicazione viene generato un nuovo snapshot.
Osservazioni
sp_reinitsubscription viene utilizzata per la replica transazionale.
sp_reinitsubscription non è supportata 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 di massa 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 di massa più recenti creati in precedenza dall'agente snapshot. Se non è occupato, l'agente di distribuzione risincronizza la sottoscrizione immediatamente dopo l'esecuzione della stored procedure sp_reinitsubscription. In caso contrario, la sincronizzazione viene eseguita al termine dell'intervallo per la visualizzazione di un messaggio specificato dal parametro della riga di comando MessageInterval dell'agente di distribuzione.
sp_reinitsubscription non ha alcun effetto sulle sottoscrizioni in cui lo snapshot iniziale viene applicato manualmente.
Per risincronizzare le sottoscrizioni anonime di una pubblicazione, passare il valore all o NULL per il parametro 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 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.
Autorizzazioni
Solo i membri del ruolo predefinito del server sysadmin, i membri del ruolo predefinito del database db_owner o l'autore della sottoscrizione possono eseguire sp_reinitsubscription.
Valori restituiti
0 (esito positivo) o 1 (esito negativo)
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'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.
Vedere anche
Riferimento
Stored procedure per la replica (Transact-SQL)
Altre risorse
How to: Reinitialize a Subscription (Replication Transact-SQL Programming)
Reinizializzazione di una sottoscrizione