Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Sincronizzare due database / transazione unica

    Salve a tutti, espongo subito il mio problema.

    Ho due gestionali identici (da me sviluppati) che funzionano su pc distanti tra di loro, ma collegati da una vpn su adsl. Ognuno lavora sul proprio database locale (si tratta di Firebird, ma è indifferente ai fini del problema).

    C'è la necessità di mantenere sincronizzata una tabella, quella dei clienti, in modo che da entrambe le sedi si possano eseguire modifiche/inserimenti/eliminazioni e la tabella rimanga di fatto univoca.

    Ho allora creato un software esterno che effetta periodicamente l'operazione di sincronizzazione (è sufficiente una volta al giorno) sulla base del confronto tra i dati presenti nella stessa tabella dei due database e di appositi marcatori di record lasciati dai due gestionali. Ho messo in funzione tale software su uno dei pc col gestionale, quindi la sincronizzazione avviene tramite connessione ad un database locale e l'altro remoto.
    La seconda connessione è ovviamente più lenta, ma il tutto funziona bene.

    A questo punto mi trovo a gestire i casi di caduta di linea/rete.
    Per la sincronizzazione di OGNI record, occorre eseguire modifiche su entrambi i database ed è chiaro che se la prima modifica va e buon fine, ma la seconda no, allora i dati diventano inconsistenti. Bisogna quindi evitare di aggiornare da una parte sola: o da tutte e due o niente.
    L'ideale sarebbe di poter disporre di un'unica transazione su entrambi i database, ma non mi risulta che sia esista.

    Avete qualche idea?

    Grazie, Marco M.

  2. #2
    Utente bannato
    Registrato dal
    Nov 2011
    Messaggi
    150
    Non ho idea di come fare operativamente, però predisporrei due database "ombra": in sostanza aggiorni quelli.
    Poi, se l'aggiornamento è andato bene, sostituisci in un "colpo" solo i database "veri".

    sito1: database1, ombra1
    sito2: database2, ombra2

    sincronizzi ombra1 con ombra2 (come? boh).
    quando sei sicuro sovrascrivi database1 con ombra1, e database2 con ombra2

  3. #3
    Duplicare e sostituire i database interi, non si può fare: sono troppo gradi, servirebbe troppo tempo, ma soprattutto per la sostituzione bisognerebbe sconnettere i gestionali, operazione non possibile.

    Però l'idea che suggerisci si potrebbe applicare a livello di tabelle, visto che è solo una tabella a dover essere sincronizzata. Quindi in ogni database dovrei tenere una tabella "ombra" della tabella clienti, far tentare l'aggiornamento di queste "ombre" e poi se va a buon fine, sostituire in un colpo solo le tabelle vere con le "ombre".

    Il problema però rimane, identico a prima, ed è in quel "colpo solo": come fare?
    Come eseguire due operazioni su due diversi database con la certezza che vengano applicate entrambe o nessuna delle due?
    In altre parole: bisogna eseguire la sostituzione sia sul database 1 che sul 2: se la caduta di linea si verifica dopo aver aggiornato il numero 1, come reagire?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.