Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La replica di tipo merge deve inizializzare sia il server di pubblicazione che il Sottoscrittore prima che i dati possano fluire tra di essi. Questo articolo fornisce informazioni sui passaggi che si verificano durante l'inizializzazione.
Inizializzare la pubblicazione
Nell'elenco seguente sono riportati i dettagli dei passaggi di inizializzazione per una pubblicazione, che si verificano durante l'esecuzione di ogni stored procedure elencata o dopo aver completato la Nuova pubblicazione guidata. Un'ulteriore inizializzazione viene eseguita dopo che lo Snapshot Agent viene eseguito per la prima volta per una pubblicazione.
sp_replicationdboption
Il database di pubblicazione è contrassegnato per la replica. Il database non può essere eliminato a meno che non venga rimossa la replica.
Le tabelle di sistema vengono aggiunte al database di pubblicazione , a meno che non esista già una pubblicazione di tipo merge nel database. Per un elenco completo delle tabelle di sistema, vedere la sezione "Tabelle di sistema create nei database di pubblicazione e di sottoscrizione" in questo articolo.
sp_addmergepublication
- Gli elementi per la pubblicazione vengono aggiunti alle tabelle di sistema.
sp_addpublication_snapshot
- Un'attività dell'agente snapshot viene aggiunta al sistema di SQL Server Agent. Il nome del lavoro è nel formato
<Publisher>-<PublicationDatabase>-<Publication>-<Integer>
.
- Un'attività dell'agente snapshot viene aggiunta al sistema di SQL Server Agent. Il nome del lavoro è nel formato
sp_addmergearticle
Ogni oggetto replicato è contrassegnato per la replica. L'oggetto non può essere eliminato a meno che l'articolo corrispondente non venga eliminato da tutte le pubblicazioni.
Le voci per ogni articolo vengono aggiunte alle tabelle di sistema.
Il completamento dell'inizializzazione del database di pubblicazione avviene durante la prima esecuzione dell'agente snapshot per una pubblicazione. Il database di pubblicazione non viene reinizializzato durante le esecuzioni successive del Snapshot Agent. Se si utilizza la Creazione guidata per nuova pubblicazione, lo snapshot iniziale viene creato per impostazione predefinita dopo averla completata. Se si usano stored procedure, è necessario eseguire il job dell'agente o eseguire direttamente l'agente. Per altre informazioni sull'esecuzione degli agenti, vedere Avviare e arrestare un agente di replica (SQL Server Management Studio) e Concetti relativi ai file eseguibili dell'agente di replica.
La prima volta che viene eseguito l'agente snapshot per una pubblicazione:
Una colonna denominata
rowguid
viene aggiunta a ogni tabella pubblicata, a meno che la tabella non abbia già una colonna di tipo di dati uniqueidentifier con ilROWGUIDCOL
set di proprietà (nel qual caso viene usata questa colonna). Larowguid
colonna viene utilizzata per identificare in modo univoco ogni riga di ogni tabella pubblicata. Se la tabella viene eliminata dalla pubblicazione, larowguid
colonna viene rimossa. Se per il rilevamento è stata utilizzata una colonna esistente, la colonna non viene rimossa.Gli oggetti seguenti vengono creati nel database di pubblicazione per ogni tabella pubblicata (tutti gli oggetti vengono creati nello
dbo
schema):I trigger di inserimento, i trigger di aggiornamento e i trigger di eliminazione vengono aggiunti alle tabelle pubblicate per tenere traccia delle modifiche. I trigger sono denominati nel formato
MSmerge_ins_<GUID>
,MSmerge_upd_<GUID>
eMSmerge_del_<GUID>
. Il valore GUID deriva dalla voce per l'articolo nella tabella di sistemasysmergearticles
.Le stored procedure vengono create per gestire inserimenti, aggiornamenti ed eliminazioni nelle tabelle pubblicate e per eseguire diverse altre operazioni correlate alla replica.
Le visualizzazioni vengono create per gestire inserimenti, aggiornamenti, eliminazioni e filtri.
Le tabelle dei conflitti vengono create per archiviare le informazioni sui conflitti. Le tabelle dei conflitti corrispondono allo schema delle tabelle pubblicate: ogni tabella pubblicata viene creata tramite script e quindi lo script viene usato per creare la tabella dei conflitti nel database di pubblicazione. Le tabelle dei conflitti sono denominate nel formato
dbo.MSmerge_conflict_<Publication>_<Article>
.
Ogni volta che viene eseguito l'agente snapshot, vengono creati i tipi di file seguenti (con le estensioni di file corrispondenti) per ogni articolo nel database di pubblicazione:
Schema (
.sch
)Vincoli e indici (
.dri
)Trigger (
.trg
)Dati della tabella di sistema (
.sys
)Tabelle dei conflitti (
.cft
)Dati (
.bcp
): non creati per le pubblicazioni con filtri parametrizzati.Se la pubblicazione non utilizza filtri con parametri, lo snapshot contiene i dati per le tabelle pubblicate in un set di
.bcp
file. Se la pubblicazione utilizza filtri con parametri ,che è tipico per le pubblicazioni di tipo merge, lo snapshot iniziale non contiene dati. I dati vengono forniti usando uno snapshot per la partizione di un Sottoscrittore, descritta nella sezione successiva.
Inizializzare una sottoscrizione
Ogni sottoscrizione viene inizializzata quando il Merge Agent per la sottoscrizione viene eseguito e copia lo snapshot iniziale nel database della sottoscrizione. Oltre allo schema e ai dati degli oggetti replicati, lo snapshot contiene le tabelle di sistema, le viste, i trigger e le stored procedure presenti nel database di pubblicazione. Anche una o due tabelle di sistema aggiuntive vengono copiate nel database di sottoscrizione. Per un elenco completo delle tabelle di sistema, vedere la sezione Tabelle di sistema create nei database di pubblicazione e di sottoscrizione in questo articolo. Se viene reinizializzata una sottoscrizione, tutti gli oggetti replicati e gli oggetti di sistema di replica vengono sovrascritti.
Se nessuna delle tabelle nel database di pubblicazione utilizza filtri con parametri, lo stesso snapshot di pubblicazione viene copiato in ogni Sottoscrittore. Se vengono usati uno o più filtri con parametri, il modo in cui ogni sottoscrizione viene inizializzata è governata dalla logica seguente:
Se il percorso dello snapshot viene fornito all'agente di merge nella riga di comando:
- Applicare lo snapshot da questa posizione.
Altrimenti, se lo snapshot è stato pregenerato:
- Recupera la posizione dello snapshot dal database di pubblicazione
MSmerge_dynamic_snapshots
e applica lo snapshot da quella posizione.
- Recupera la posizione dello snapshot dal database di pubblicazione
In caso contrario, se la pubblicazione consente ai Sottoscrittori di avviare gli snapshot:
Se uno snapshot è già stato generato per un altro Sottoscrittore con la stessa partizione, applicare tale snapshot al Sottoscrittore.
In caso contrario, generare e applicare uno snapshot al Sottoscrittore.
In caso contrario, inizializzare il Sottoscrittore utilizzando
SELECT
istruzioni sulle tabelle della pubblicazione. Questo approccio è più lento rispetto all'uso di uno snapshot per la partizione del Sottoscrittore.
Se il trasferimento dello snapshot viene interrotto in qualsiasi momento, riprende automaticamente e non invia nuovamente i file che sono già stati trasferiti completamente. L'unità di recapito per l'agente snapshot è il file bcp per ogni articolo di pubblicazione, pertanto i file parzialmente recapitati devono essere completamente ri-recapitati. Tuttavia, la ripresa dello snapshot può ridurre significativamente la quantità di dati trasmessi e garantire il recapito tempestivo degli snapshot anche se la connessione non è affidabile. Per altre informazioni sulla creazione di snapshot, vedere Filtri con parametri - Filtri di riga con parametri.
Percorso dello snapshot
La posizione dello snapshot dipende da: il percorso specificato per la posizione snapshot predefinita o alternativa; se la pubblicazione utilizza un percorso UNC o una condivisione FTP per la cartella snapshot; e se la pubblicazione utilizza filtri con parametri. In questi esempi si supponga che il percorso della cartella snapshot sia: : \\<MyComputer>\<MyFolder>
Se la pubblicazione utilizza UNC, la prima parte del percorso è :
\\<MyComputer>\<MyFolder>\unc\
. Se usa FTP, è\\<MyComputer>\<MyFolder>\ftp\
.Se la pubblicazione utilizza UNC e non utilizza filtri con parametri, il percorso è
\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>
Se la pubblicazione utilizza UNC e filtri con parametri, il percorso si basa sul percorso della cartella snapshot e sui criteri di filtro delle righe con parametri per la pubblicazione. Ad esempio, se l'articolo viene filtrato usando la
HOST_NAME()
funzione e il valore diHOST_NAME()
per la partizione èSalesLaptop
, il percorso dello snapshot per tale partizione è\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12
, dove12
è l'ID usato internamente per la partizione.
Tabelle di sistema create nei database di pubblicazione e di sottoscrizione
Le tabelle seguenti vengono create nel database di pubblicazione e in ogni database di sottoscrizione.
Tabella | Descrizione |
---|---|
MSdynamicsnapshotjobs | Contiene informazioni sui processi di snapshot per le pubblicazioni con filtri parametrici. |
MSdynamicsnapshotviews | Tiene traccia di tutte le viste snapshot temporanee create dall'agente snapshot. Viene usato dal sistema per la pulizia delle visualizzazioni in caso di arresto anomalo di SQL Server Agent o dell'agente snapshot. |
MSmerge_altsyncpartners | Tiene traccia dell'associazione dei partner di sincronizzazione attuali per un Publisher. |
MSmerge_articlehistory | Tiene traccia delle modifiche apportate agli articoli durante una sessione di sincronizzazione dell'agente di merge, con una riga per ogni articolo in cui sono state apportate modifiche. |
MSmerge_conflicts_info | Tiene traccia dei conflitti che si verificano durante la sincronizzazione di una sottoscrizione a una pubblicazione di tipo merge. |
MSmerge_contents | Contiene una riga per ogni riga modificata nel database corrente dopo la pubblicazione. Questa tabella viene utilizzata dal processo di unione per determinare le righe modificate. |
MSmerge_current_partition_mappings | Contiene una riga per ogni partizione a cui appartiene una determinata riga modificata. |
MSmerge_dynamic_snapshots | Tiene traccia del percorso dello snapshot per ogni partizione definita per una pubblicazione di tipo merge. |
MSmerge_errorlineage | Contiene righe che sono state eliminate nel Sottoscrittore, ma la cui eliminazione non viene propagata al Pubblicatore. |
MSmerge_generation_partition_mappings | Tiene traccia del fatto che una determinata generazione contenga modifiche rilevanti per una determinata partizione. |
MSmerge_genhistory | Contiene una riga per ogni generazione. Una generazione è una raccolta di modifiche recapitate a un server di pubblicazione o a un Sottoscrittore. Le generazioni vengono chiuse ogni volta che viene eseguito l'agente di merge; le successive modifiche in un database vengono aggiunte a una o più generazioni aperte. |
MSmerge_history | Contiene righe di cronologia con descrizioni dettagliate dei risultati delle sessioni di lavoro dell'agente di Merge precedenti. |
MSmerge_identity_range | Tiene traccia degli intervalli numerici assegnati alle colonne Identity per le sottoscrizioni alle pubblicazioni per le quali la replica gestisce automaticamente le assegnazioni di intervalli. |
MSmerge_metadataaction_request | Contiene una riga per ogni azione di compensazione necessaria. Un'azione di compensazione viene usata per eseguire il rollback di una modifica in un nodo se la modifica non è riuscita in un altro nodo. |
MSmerge_partition_groups | Contiene una riga per ogni partizione precomputata in un determinato database. |
MSmerge_past_partition_mappings | Contiene una riga per ogni partizione a cui una riga modificata specificata apparteneva in passato, ma a cui non appartiene più. |
MSmerge_replinfo | Contiene una riga per ogni sottoscrizione. Questa tabella tiene traccia delle informazioni interne sulle generazioni inviate e ricevute. |
MSmerge_sessions | Contiene righe di cronologia con i risultati delle sessioni precedenti del lavoro dell'agente di merge. |
MSmerge_settingshistory | Contiene una cronologia delle modifiche apportate alle proprietà dell'articolo e della pubblicazione, con una riga per ogni modifica apportata. |
MSmerge_tombstone | Contiene informazioni sulle righe eliminate e consente la propagazione delle eliminazioni ad altri Sottoscrittori. |
MSrepl_errors | Contiene informazioni dettagliate su eventuali errori dell'agente. |
sysmergearticles | Contiene una riga per ogni articolo unito. |
sysmergepartitioninfo | Contiene informazioni sulle partizioni per ogni articolo, con una riga per ogni articolo. |
sysmergepartitioninfoview | Contiene informazioni sul partizionamento per gli articoli della tabella. |
sysmergepublications | Contiene una riga per ogni pubblicazione di tipo merge. |
sysmergeschemaarticles | Tiene traccia di articoli solo dello schema, come le stored procedure. |
sysmergeschemachange | Contiene informazioni sugli articoli pubblicati generati dall'agente snapshot. |
sysmergesubscriptions | Contiene una riga per ogni Sottoscrittore. |
sysmergesubsetfilters | Contiene informazioni sul filtro join per gli articoli partizionati. |
Inoltre, la MSsnapshotdeliveryprogress
tabella viene creata in ogni database di sottoscrizione e la MSsubscription_properties
tabella viene creata in ogni database di sottoscrizione che usa una sottoscrizione pull:
Tabella | Descrizione |
---|---|
AvanzamentoConsegnaSnapshot | Tiene traccia dei file recapitati correttamente al Sottoscrittore quando viene applicato uno snapshot. Questi dati vengono usati per riprendere il recapito dei file nel caso in cui l'agente di merge non riesca a recapitare tutti i file durante la sessione. |
MSsubscription_properties | Contiene le informazioni sui parametri necessarie per eseguire gli agenti di replica nel Sottoscrittore |