CISA FotoGallery

Statistiche

Tot. visite contenuti : 914062
Home Articoli tecnici HowTo Struttura Oggetti di una Replica - II parte

Struttura Oggetti di una Replica - II parte

In un precedente articolo avevamo già dato una panoramica sulle Repliche di un database. Vediamo ora di approfondirne la struttura.

Quando andiamo a replicare un database, MS Jet 4.0 aggiunge (anche nella Replica Master) dei campi alle tabelle, ed aggiunge anche ulteriori tabelle che servono per gestire la replica. Un database replicato include:

-) Tabelle Utenti
-) Tabelle di sistema
-) GUID
-) Generation
-) Lineage
-) Column Lineage

Tabelle Utenti

Rimangono le tabelle utenti con le proprie definizioni. Vengono aggiunti però dei nuovi campi che serviranno ad MS Jet per gestire l'applicazione.

Tabelle di sistema

Parecchie tabelle di sistema supportano la funzionalità di un set di repliche. Alcune possono essere tabelle secondarie. MSysTableGuids memorizza i GUID per ogni nome tabella in una replica escludendo le tabelle di sistema e le tabelle dei conflitti nascoste. Eccone comunque l'elenco:

i) MSysConflicts Rileva ogni conflitto aggiunto nella sua propria tabella dei conflitti. Questa tabella si trova replicata in tutti i membri dei set di repliche;

ii) MSysExchangeLog E' una tabella locale che si trova in ogni membro del set di repliche e memorizza le informazioni sulla sincronizzazione tra una replica e i rimanenti membri del set di repliche.

iii) MSysGenHistory Memorizza le informazioni sulle sincronizzazioni. Contiene un record per ciascuna sincronizzazione. E' utilizzata per impedire di inviare creazioni precedenti durante le sincronizzazioni ed evita che le repliche si sincronizzino nuovamente dopo essere state ripristinate da copie di backup. Questa tabella si trova in tutti membri del set di repliche, ma è incorporata in maniera un pò differente da quella che è usata con le normali tabelle replicate.

iv) MSysOthersHistory Memorizza le informazioni sugli aggiornamenti da altri membri del set di repliche.

v) MSysRepInfo Contiene un solo record. Troviamo importanti informazioni sul set di repliche. Contiene inoltre l'identità della Replica Master. La tabella si trova replicata in ogni membro del set di repliche.

vi) MSysReplicas Memorizza le informazioni su tutte le repliche del set di repliche. La tabella è replicata in tutti i membri del set di repliche.

vii) MSysSchChange Troviamo le informazioni alle modifiche della struttura della Replica Master che verranno propagate agli altri membri del set di repliche. I record di questa tabella vengono periodicamente cancellati per ridurre al minimo la dimensione.

viii) MSysSchedule Memorizza le informazioni per programmare le sincronizzazioni. Il programma di Sincronia per un membro di un locale set di repliche utilizza questa tabella per stabilire quando avverrà una nuova sincronizzazione con un altro programma di Sincronia, e come sincronizzare dati e modifiche alla struttura con l'altro programma di Sincronia.

ix) MSysSideTables Identifica le tabelle che hanno avuto conflitti e i relativi record in conflitto. Questa tabella è visibile se avvengono conflitti tra una replica ed un'altra nel set di repliche. Questa è una speciale tabella replicabile, simile ad una tabella conflitto, che è replicata in tutte le repliche del set di repliche.

x) MSysTableGuids Mette in relazione i nomi tabella ai GUID. I GUID di tabella sono utilizzati nelle tabelle così come MSysTombstone, quale riferimento ad un nome di tabella memorizzato in questa tabella. Questo permette rinominare in maniera efficace una tabella. In aggiunta, questa tabella include il numero di livello utilizzato per ordinare le tabelle così che gli aggiornamenti possono essere trattati efficacemente. E' una tabella locale aggiornata dal rilevatore di traccia nella Replica master e, come parte di un processo di modifiche alla struttura, a tutti gli altri membri del set di repliche.

xi) MSysTombstone Contiene informazioni su i record eliminati, e permette che le eliminazioni siano propagate a tutte le altre repliche. Questa tabella compare in tutti i membri del set di repliche.

xii) MSysTranspAddress Memorizza le informazioni per il programma di Sincronia e definisce le impostazioni per il programma di Sincronia per il set di repliche. Compare in tutti i membri del set di repliche.

xiii) MSysContents Memorizza le informazioni riguardanti i record che potrebbe essere inclusi in repliche parziali. Questa tabella compare solo nelle repliche parziali.

xiv) MSysFilters Memorizza le informazioni riguardanti i filtri che sono applicati alle repliche parziali. E' una tabella che compare solo nelle repliche parziali.

xv) MSysTranspCoords Memorizza il layout del programma di Sincronia utilizzato da Replication Manager.

GUID

E' un campo con la proprietà "Dimensione campo" del tipo "Id replica" che identifica in maniera univoca ogni record delle tabelle di un set di repliche. Il campo s_GUID è chiamato GUID (Global Unique Identifier) oppure UUID (Universally Unique Identifier). Se il database contiene già un campo s_GUID, nella replica Microsoft Jet utilizza il GUID esistente. Lo stesso record della stessa tabella in due repliche diverse prenderanno un GUID diverso. Lo possiamo senz'altro considerare come una chiave primaria, e ci assicura che ogni record di una tabella sia unico: ha lo svantaggio però che è poco significativo per l'utente. I GUID sono stringhe a 16 byte globalmente uniche.

Nota: Se nella ns. tabella abbiamo inserito un campo ID contatore e chiave primaria, ci accorgeremo che il ns. ID è sempre un Intero lungo ma la proprietà "Nuovi Valori" si è trasformata da "Incrementale" a "Casuale".

Il processo di generazione dei GUID include numerosi controlli che assicura la sua unicità. I GUID sono creati da:

-) L'ID di un nodo di rete;
-) Un valore tempo;
-) Un valore di sequenza di clock;
-) Un valore della versione;
-) Il valore del contatore di esecuzione;
-) Lo stato della memoria di sistema;
-) Il totale dei byte e dei byte liberi nel disco C;
-) Il valore dello stack;
-) Un LUID (Local Unique ID)
-) Qualunque dato random che si trova nel buffer dell'ID del nodo nel momento di creazione.

Un esempio di GUID: 92994D96-BACF-420A-A2E9-7A027CEE6CE8

I trattini non fanno parte del GUID, ma servono solo per una maggiore leggibilità.

Generation

Il campo s_Generation controlla quali record sono trasmessi durante uno scambio. Questo è un tipo di campo Long. Quando un record è modificato o aggiunto esso viene impostato a zero (0). In generale tutti i record con il campo s-Generation impostato a 0 sono inviati durante uno scambio, ed il campo è incrementato di uno rispetto all'ultimo, che ora diventa il piu alto numero.
Quando avviene uno scambio, la replica che invia conosce l'ultimo inviato a quella specifica replica che sta ricevendo. Solo i record con il più alto s_Generation rispetto alla precedente o con 0 vengono inviati.

La replica ricevente non utilizzerà campi s_Generation ricevuti fuori sequenza.

In certi casi, la replica di Microsoft Jet può determinare che vi sono troppi record da inviare in un singolo scambio. In queste occasioni, il primo set di record per lo scambio sarà di un solo campo s_Generation e i successivi set di record saranno dei più alti s_Generation.

s_Lineage

Il campo s_Lineage tiene traccia delle modifiche di ciascun record di una tabella. E' del tipo Oggetto OLE. Il campo specifica quando un record viene inviato ad un'altra replica, evitando che vengano inviate ripetutamente le stesse modifiche. Specifica inoltre in caso di conflitto quale record ha avuto il sopravvento.

Column Lineage

Il campo s_ColLineage è un tipo di dati Oggetto OLE. Esso crea una traccia delle informazioni che consentono l'individuazione delle modifiche fatte a livello di colonna.

Infine i campi di tipo Memo o Oggetto OLE ricevono anch'essi un campo di creazione distinto.

Considerazioni sulla struttura di una Replica

Microsoft Jet supporta il limite di 255 campi e 4096 byte per ogni record. Questi limiti includono anche i campi che crea nella fase di creazione replica. Poichè in una replica ogni record riceve i campi s_GUID, s_Lineage, s_ColLineage, s_Generation che richiedono circa 32 byte i limiti si riducono a 251 campi (255-4) e 4064 byte (4096-32) per record. Nel caso poi di campi Memo o Oggetto OLE (campi BLOB) si debbono considerare altri 4 byte per BLOB.

Periodo di memorizzazione di una Replica

L'intervallo di tempo di memorizzazione dei cambiamenti avvenuti in un set di repliche (cancellazione di record, modifiche alla struttura, ed altre informazioni specifiche sul sistema) è misurato in giorni. Questo avviene per tutto il periodo che le repliche non sono state sincronizzate, e questo dato si trova nelle tabelle di sistema (tabella MSysRepInfo, campo "Retention"). Se un database viene replicato tramite Replication Manager, JRO (JET and Replication Objects) o DAO, il periodo predefinito è 60 gg. Se invece si replica un database tramite MS Access o con una cartella Nuova Sincronia, il periodo è di 1000 gg. L'eliminazione di questa informazione avviene tramite una compattazione o tramite un programma di Sincronia. Questo periodo può inoltre essere cambiato nella Replica Master tramite Replication Manager o tramite la proprietà RetentionPeriod in JRO.


I Parte - Le repliche dei database
qui