2012-09-13 18 views
7

Ho il seguente problema: Due istanze di un'applicazione su due sistemi diversi dovrebbero condividere un piccolo database. Il problema principale è che entrambi i sistemi possono scambiare dati solo attraverso una cartella di rete. Non ho la possibilità di configurare un server di database da qualche parte.H2 Database connessioni multiple

È possibile posizionare un database H2 sulla cartella di rete e lasciare che entrambe le istanze si connettano al database (anche contemporaneamente)?

Potrei connettere entrambe le istanze al db utilizzando la modalità incorporata se disattivo il blocco dei file, giusto? Le istanze possono eseguire operazioni READ o INSERT sul db. Rischio corruzioni dei dati utilizzando più connessioni integrate simultanee?

risposta

2

From H2 documentation:

E 'anche possibile aprire il database senza blocco dei file; in questo caso spetta all'applicazione proteggere i file del database. In caso contrario, si verificherà un database danneggiato.

Penso che se l'utilizzo dell'applicazione sempre la stessa configurazione (database file condiviso sulla cartella di rete), è necessario creare un livello di applicazione che gestisce la concorrenza

+0

ho letto questo già, ma ho anche letto qualcosa su supporto blocco a livello tavolo. Sono corretto che il blocco della tabella sia utilizzato solo in modalità client/server? Per più connessioni incorporate, l'implementazione del mio meccanismo di blocco è l'unica opzione? – Dirk

+0

se è possibile eseguire un server, gestisce il blocco a livello di tabella. Ma senza di essa, è necessario implementare un meccanismo proprio –

+1

In realtà, i blocchi a livello di tabella vengono utilizzati di default anche in modalità incorporata e in memoria, se si apre più di una connessione al database (all'interno dello stesso processo). –

21

ho avuto lo stesso problema e ho trovato la soluzione nella documentazione. Può essere trovato a; http://h2database.com/html/features.html#auto_mixed_mode

Più processi possono accedere allo stesso database senza dover avviare manualmente il server. Per fare ciò, aggiungi AUTO_SERVER = TRUE all'URL del database. È possibile utilizzare lo stesso URL del database indipendentemente dal fatto che il database sia già aperto o meno. Questa funzione non funziona con i database in memoria.

// Application 1: 
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE"); 

// Application 2: 
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE"); 
Problemi correlati