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_genhistory
tabelle di sistema , MSmerge_contents
e 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_genhistory
MSmerge_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'
È 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.
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.
Al termine di tutte le operazioni di merge, eseguire
sp_mergecleanupmetadata
.Eseguire
sp_reinitmergepullsubscription
su tutti i sottoscrittori usando una sottoscrizione pull denominata o anonima per garantire la convergenza dei dati.Se si eseguono merge in modalità continua, vedere Considerazioni speciali per le operazioni di merge in modalità continua più avanti in questa sezione.
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.
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'
Arrestare tutti gli aggiornamenti dei database di pubblicazione e di sottoscrizione.
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.Al termine di tutte le operazioni di merge, eseguire
sp_mergecleanupmetadata
.Se si eseguono merge in modalità continua, vedere Considerazioni speciali per le operazioni di merge in modalità continua più avanti in questa sezione.
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.
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_mergecleanupmetadata
di , 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.