Condividi tramite


sp_mergecleanupmetadata (Transact-SQL)

Si applica a: SQL Server

Deve essere usato solo nelle topologie di replica che includono server che eseguono versioni di SQL Server precedenti a SQL Server 2000 (8.x) Service Pack 1. sp_mergecleanupmetadata consente agli amministratori di pulire i metadati nelle MSmerge_genhistorytabelle di sistema , MSmerge_contentse MSmerge_tombstone . Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_mergecleanupmetadata
    [ [ @publication = ] N'publication' ]
    [ , [ @reinitialize_subscriber = ] N'reinitialize_subscriber' ]
[ ; ]

Argomenti

[ @publication = ] N'publication'

Nome della pubblicazione. @publication è sysname, con un valore predefinito , %che pulisce i metadati per tutte le pubblicazioni. Se viene specificata in modo esplicito, la pubblicazione deve essere esistente.

[ @reinitialize_subscriber = ] N'reinitialize_subscriber'

Specifica se reinizializzare il Sottoscrittore. @reinitialize_subscriber è nvarchar(5), con il valore predefinito true.

  • Se true, le sottoscrizioni vengono contrassegnate per la reinizializzazione.
  • Se false, le sottoscrizioni non sono contrassegnate per la reinizializzazione.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_mergecleanupmetadata deve essere usato solo nelle topologie di replica che includono server che eseguono versioni di SQL Server precedenti a SQL Server 2000 (8.x) Service Pack 1. Le topologie che includono solo SQL Server 2000 (8.x) Service Pack 1 o versione successiva devono usare la pulizia automatica dei metadati basati sulla conservazione. Quando si esegue questa stored procedure, è importante tenere presente che le dimensioni del file di log nel computer di esecuzione sono destinate ad aumentare, a volte in modo consistente.

Dopo sp_mergecleanupmetadata l'esecuzione, per impostazione predefinita, tutte le sottoscrizioni nei Sottoscrittori di pubblicazioni con metadati archiviati in MSmerge_genhistoryMSmerge_contents e MSmerge_tombstone sono contrassegnate per la reinizializzazione, eventuali modifiche in sospeso nel Sottoscrittore andranno perse e lo snapshot corrente viene contrassegnato come obsoleto.

Se sono presenti più pubblicazioni in un database e una di queste pubblicazioni utilizza un periodo di conservazione di pubblicazione infinito (@retention è 0), l'esecuzione sp_mergecleanupmetadata non pulisce i metadati di rilevamento delle modifiche della replica di tipo merge per il database. È pertanto opportuno utilizzare il periodo di memorizzazione infinito con cautela.

Quando si esegue questa stored procedure, è possibile scegliere se reinizializzare i Sottoscrittori impostando il parametro @reinitialize_subscriber su true (impostazione predefinita) o false. Se sp_mergecleanupmetadata viene eseguito con il parametro @reinitialize_subscriber impostato su true, uno snapshot viene riapplicato nel Sottoscrittore anche se la sottoscrizione è stata creata senza uno snapshot iniziale, ad esempio se i dati e lo schema dello snapshot sono stati applicati manualmente o già esistenti nel Sottoscrittore. L'impostazione del parametro su false deve essere utilizzata con cautela, perché se la pubblicazione non viene reinizializzata, è necessario assicurarsi che i dati nel server di pubblicazione e nel Sottoscrittore siano sincronizzati.

Indipendentemente dal valore di @reinitialize_subscriber, sp_mergecleanupmetadata non riesce se sono presenti processi di merge in corso che tentano di caricare le modifiche in un server di pubblicazione o in un Sottoscrittore di ripubblicazione al momento della chiamata della stored procedure.

Eseguire sp_mergecleanupmetadata con @reinitialize_subscriber = N'true'

  1. È consigliabile, ma non obbligatorio, arrestare tutti gli aggiornamenti ai database di pubblicazione e di sottoscrizione. Se l'esecuzione degli aggiornamenti continua, gli aggiornamenti effettuati in un Sottoscrizione dall'ultimo processo di tipo merge andranno perduti quando la pubblicazione viene reinizializzata. Viene tuttavia conservata la convergenza dei dati.

  2. Eseguire un'operazione di merge tramite l'agente di merge. È consigliabile usare l'opzione della riga di comando -Validate agent in ogni Sottoscrittore quando si esegue il agente di merge. Se si eseguono merge in modalità continua, vedere Considerazioni speciali per le operazioni di merge in modalità continua più avanti in questa sezione.

  3. Al termine di tutte le operazioni di merge, eseguire sp_mergecleanupmetadata.

  4. Eseguire sp_reinitmergepullsubscription su tutti i sottoscrittori usando una sottoscrizione pull denominata o anonima per garantire la convergenza dei dati.

  5. Se si eseguono merge in modalità continua, vedere Considerazioni speciali per le operazioni di merge in modalità continua più avanti in questa sezione.

  6. Rigenerare i file di snapshot per tutte le pubblicazioni di tipo merge a tutti i livelli. Se si tenta di eseguire il merge senza rigenerare prima lo snapshot, viene richiesto di rigenerare lo snapshot.

  7. Eseguire il backup del database di pubblicazione. Se non si esegue questa operazione, dopo il ripristino del database di pubblicazione può verificarsi un errore del processo di merge.

Eseguire sp_mergecleanupmetadata con @reinitialize_subscriber = N'false'

  1. Arrestare tutti gli aggiornamenti dei database di pubblicazione e di sottoscrizione.

  2. Eseguire un'operazione di merge tramite l'agente di merge. È consigliabile usare l'opzione della riga di comando dell'agente -Validate in ogni Sottoscrittore quando si esegue il agente di merge. Se si eseguono merge in modalità continua, vedere Considerazioni speciali per i merge in modalità continua più avanti in questo articolo.

  3. Al termine di tutte le operazioni di merge, eseguire sp_mergecleanupmetadata.

  4. Se si eseguono merge in modalità continua, vedere Considerazioni speciali per le operazioni di merge in modalità continua più avanti in questa sezione.

  5. Rigenerare i file di snapshot per tutte le pubblicazioni di tipo merge a tutti i livelli. Se si tenta di eseguire il merge senza rigenerare prima lo snapshot, viene richiesto di rigenerare lo snapshot.

  6. Eseguire il backup del database di pubblicazione. Se non si esegue questa operazione, dopo il ripristino del database di pubblicazione può verificarsi un errore del processo di merge.

Considerazioni speciali per i merge in modalità continua

Se si eseguono operazioni di merge in modalità continua, è necessario:

  • Arrestare il agente di merge e quindi eseguire un'altra unione senza il -Continuous parametro specificato.

  • Disattivare la pubblicazione con sp_changemergepublication per assicurarsi che eventuali merge in modalità continua che eseguono il polling dello stato della pubblicazione hanno esito negativo.

    EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'inactive';
    

Dopo aver completato il passaggio 3 dell'esecuzione sp_mergecleanupmetadatadi , riprendere i merge in modalità continua in base alla modalità di arresto. Uno dei seguenti:

  • Aggiungere di nuovo il parametro -Continuous per il agente di merge.

  • Riattivare la pubblicazione con sp_changemergepublication.

    EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'active'
    

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin o db_owner ruolo predefinito del database possono eseguire sp_mergecleanupmetadata.

Per usare questa stored procedure, il server di pubblicazione deve eseguire SQL Server 2000 (8.x). I Sottoscrittori devono eseguire SQL Server 2000 (8.x) o SQL Server 7.0, Service Pack 2.