[Sql Server 2005 Express] Replica del Database.

giovedì 30 aprile 2009 - 17.07

Jeremy Profilo | Guru

Buongiorno a tutti.

Premetto che mi sto avvicinando solo adesso al mondo Sql Server.
Sto scrivendo un' applicazione che deve girare su più Pc Client della mia rete LAN.
E fin qui, nessun problema.

Ho le mie belle tabelle, tutti scrivono dappertutto e tutti leggono dappertutto.

Il problema nasce dalla necessità di fare una cosa che molti riterranno sicuramente sbagliata e cioè ...... "Portarmi il lavoro a casa".

Avrei quindi bisogno di avere, a casa, la possibilità di connettermi ad una "Replica" del Database(Ovviamente coerente fino al momento in cui stacco il portatile dalla rete).
Ho letto sul Web, facendo qualche ricerca, che Sql Server, offre la possibilità di creare delle Repliche, ma non mi è molto chiaro il concetto.

Più specificatamente, il problema sta nel fatto che, quando tento di creare una "Sottoscrizione"(che a dire il vero non so ancora bene cosa sia), il management
mi dice che non è possibile creare una sottoscrizione in quanto, nell'istanza, non esiste nessuna pubblicazione.

Ho quindi "tentato" di creare questa pubblicazione ma senza risultato, o per meglio dire, mi viene generato un file con estensione .sql ma non so esattamente cosa farci.

Qualcuno potrebbe aiutarmi a fare luce su questo argomento?
O quantomeno a trovare un'alternativa (magari migliore ... visto che in molti non ne parlano bene della funzione di Replica di sql Server)?


Grazie a tutti.
Ciao

[Edit]
Chiedo scusa per il doppio post
[EndEdit]

Teo Profilo | Junior Member

Ciao!

Io no ho mai usato le repliche di Sql, pero' immagino che tra un po' il grande Lorenzo ti spieghera' tutto quanto ti serve.

Per fare cio' che chiedi, oltre all'ovvio backup/restore, potresti anche creare dei DTS appositi e poi lanciarli quando ti server.

Che versione di SQL usi, esattamente?

Cmq, dal client che usi (Enterprise Manager o Management Studio) devi fare una nuova registrazione SQL, in modo da vedere entrambe le istanze SQL che ti interessano, quella locale del portatile e quella del server.

lbenaglia Profilo | Guru

>Avrei quindi bisogno di avere, a casa, la possibilità di connettermi
>ad una "Replica" del Database(Ovviamente coerente fino al momento
>in cui stacco il portatile dalla rete).
>Ho letto sul Web, facendo qualche ricerca, che Sql Server, offre
>la possibilità di creare delle Repliche, ma non mi è molto chiaro
>il concetto.

Ciao Tiziano,

SQL Server 2005 Express è molto limitato per quanto concerne le funzionalità di replica (può fungere solo da sottoscrittore); inoltre un database va progettato per supportare correttamente le repliche quindi non credo sia questo il tuo caso.
Se la tua esigenza è semplicemente quella di crearti in locale sul portatile una copia consistente del database di produzione puoi eseguire un banale full backup, ripristinando tale backup sul portatile.
A questo punto però ci devi spiegare in cosa consiste il lavoro che farai a casa
Andrai a modificare (aggiungere, aggiornare ed eliminare) dei dati che poi intendi "travasare" sul db di produzione?
E se nel frattempo qualcuno ha lavorato sugli stessi dati sul db di produzione?
Come intendi gestire tale conflitto?

>Grazie a tutti.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Jeremy Profilo | Guru

Per Teo:
Ciao Matteo e grazie della risposta.
>Che versione di SQL usi, esattamente?
La versione che uso è Sql Sever 2005 versione Express.
Per il resto vedi la risposta a Lorenzo.

Per Lorenzo:
Ciao Lorenzo e grazie della risposta:
>A questo punto però ci devi spiegare in cosa consiste il lavoro che farai a casa
>Andrai a modificare (aggiungere, aggiornare ed eliminare) dei dati che poi intendi "travasare" sul db di produzione?
>E se nel frattempo qualcuno ha lavorato sugli stessi dati sul db di produzione?
Hai perfettamente centrato il punto, infatti, speravo che il servizio di Replica potesse risolvere questa parte del problema ma, evidentemente, non è così.(e comunque non è ho sentito parlare molto bene)

>Come intendi gestire tale conflitto?
A questo punto(e qui chiedo consiglio a voi) avrei pensato di adottare il sistema del full backup per quanto riguarda la disponibilità dei dati presenti nel Db fino al momento in cui stacco il portatile della rete.
Eventuali aggiunte,modifiche o cancellazioni dei record, gestirle salvandole su un Db 'mero' contenitore di informazioni(o scrivere in un file di testo solo le query generate dal DataAdapter) senza tener conto di campi identità etc... e, una volta ricollegato alla rete prendere questi dati e far si che, la mia applicazione, ripopoli tutti i controlli dei vari Form per chiedere conferma prima dell'inserimento nel db.
Mi verrebbero in mente anche altre soluzioni ma, tra tutte, credo che la migliore sia quella del WebService non tanto per spostare il Db su Hosting, ma da usare come 'postino' per l'invio dei dati direttamente al Db con la possibilità di ricevere l'esito dell'operazione che magari mi restituisca anche il numero Id generato dall'inserimento di un nuovo Record.
Come potrete notare, sono ancora un pò confuso, pertanto, rimango aperto a vostre eventuali possibili chiarimenti e/o soluzioni.

Grazie a tutti.
Ciao.

lbenaglia Profilo | Guru

>>Come intendi gestire tale conflitto?
>A questo punto(e qui chiedo consiglio a voi) avrei pensato di
>adottare il sistema del full backup per quanto riguarda la disponibilità
>dei dati presenti nel Db fino al momento in cui stacco il portatile
>della rete.
>Eventuali aggiunte,modifiche o cancellazioni dei record, gestirle
>salvandole su un Db 'mero' contenitore di informazioni(o scrivere
>in un file di testo solo le query generate dal DataAdapter) senza
>tener conto di campi identità etc... e, una volta ricollegato
>alla rete prendere questi dati e far si che, la mia applicazione,
>ripopoli tutti i controlli dei vari Form per chiedere conferma
>prima dell'inserimento nel db.
>Mi verrebbero in mente anche altre soluzioni ma, tra tutte, credo
>che la migliore sia quella del WebService non tanto per spostare
>il Db su Hosting, ma da usare come 'postino' per l'invio dei
>dati direttamente al Db con la possibilità di ricevere l'esito
>dell'operazione che magari mi restituisca anche il numero Id
>generato dall'inserimento di un nuovo Record.
>Come potrete notare, sono ancora un pò confuso, pertanto, rimango
>aperto a vostre eventuali possibili chiarimenti e/o soluzioni.

Hai provato a dare un'occhiata ai Synchronization Services for ADO.NET?
http://msdn.microsoft.com/en-us/sync/bb887608.aspx
http://msdn.microsoft.com/it-it/library/bb726002.aspx
http://blogs.msdn.com/sync/archive/2008/06/24/sample-sql-express-client-synchronization-using-sync-services-for-ado-net.aspx

>Grazie a tutti.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Jeremy Profilo | Guru

Ciao Lorenzo.
Grazie per la dritta ... gli ho dato una breve occhiata e sembra faccia al caso mio.
Approfondiro il discorso e poi magari ... vi faccio sapere.

Ciao e grazie ancora

Jeremy Profilo | Guru

Allora .... questi gli sviluppi della situazione.
Ho seguito il consiglio di Lorenzo riguardo all'uso del Microsoft Sync Framework.
E, da quello che sono riuscito a studiare da qualche manuale in rete e su qualche testo, è sicuramente ciò che fa al caso mio.
Ho quindi inserito un item LocalDataCache e configurato la sincronizzazione tramite il Wizard.
Il risultato è stata la creazione di un database .sdf il quale dovrebbe permettermi di avere i dati in locale sincronizzati in Upload e Download con il database sul Server.
Il problema stà nella connessione a tale Db.
La stringa generata dal Wizard è più o meno la seguente
Data Source=|DataDirectory|\dbMetodoProve;
Tentando di usare questa stringa di connessione in questo modo:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
ricevo un eccezione di tipo SqlException con questo messaggio:
Si è verificato un errore di rete o specifico dell'istanza mentre si cercava di stabilire una connessione con il server SQL. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e che il server SQL sia configurato in modo da consentire connessioni remote. (provider: Interfacce di rete SQL, error: 26 - Errore nell'individuazione del server/dell'istanza specificata)

Dove sbaglio?

Grazie dell'aiuto
Ciao

Jeremy Profilo | Guru

Allora .... il problema l'ho capito.
Devo usare le classi sotto il name space SqlServerCe
In questo modo:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Ora però si prospetta il problema di gestire l'uso di due diversi tipi di oggetti a seconda se sono collegato alla rete o meno ..... ma, questo, è un problema di programmazione e quindi penso di poterlo risolvere facilmente .... eventualmente posto nella sezione dedicata al .NET Framework.

Grazie ancora dell'aiuto.
Ciao.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5