Condividi tramite


sp_reinitsubscription (Transact-SQL)

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

Icona di collegamento a un argomento 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 viene eseguita la reinizializzazione in seguito a modifiche dello schema apportate nel database di pubblicazione. for_schema_change è di tipo bit e il valore predefinito è 0. Se il valore è 0, le sottoscrizioni attive per le pubblicazioni che consentono l'aggiornamento immediato vengono riattivate a condizione che venga eseguita la reinizializzazione dell'intera pubblicazione e non solo di 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 è offline. ignore_distributor_failure è di tipo bit e il valore predefinito è 0. Se il valore è 0, la reinizializzazione ha esito negativo se il server di distribuzione non esiste o è offline.

  • [ @invalidate_snapshot= ] invalidate_snapshot
    Consente di invalidare lo snapshot della pubblicazione esistente. invalidate_snapshot è di tipo bit e il valore predefinito è 0. Se il valore è 1, viene generato un nuovo snapshot per la pubblicazione.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

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

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

USE [AdventureWorks2012Replica]

-- 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 possono eseguire sp_reinitsubscription.

Vedere anche

Riferimento

Stored procedure per la replica (Transact-SQL)

Concetti

Reinizializzare una sottoscrizione

Reinizializzare le sottoscrizioni