Ricerca
 Italiano (Italia) English (United States)
Register
Login
DotNetWork Forums
Database sincronizzati
Last Post 16 Feb 2010 11:58 by Marino. 5 Replies.
Printer Friendly
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
AuthorMessages

Posts:3

--
10 Feb 2010 11:22 
Buongiorno,
ho realizzato un'applicazione vb net che si appoggia ad un database su sql 2005 express.

Vorrei sapere se esiste un modo per tenere due database sempre sincronizzati con tale versione di sql server.(ad esempio due file mdf su due dischi diversi, o due istanza diverse)

Un modo sarebbe quello di eseguire doppie query di inserimento o update ma,
anzichè usare store procedure memorizzate nel server, le operazioni di insert ed update le ho memorizzate direttamente nel codice e quindi sarebbe un lavoro lunghissimo.

Grazie per l'aiuto

Posts:2

--
10 Feb 2010 11:44 
Se la replica del database ti serve solo come copia di sicurezza puoi tranquillamente agire dall'esterno e usare un programma come synctoy o syncback che ad intervalli che decidi tu, replica fisicamente i file mdf. I programmi che ho citato sono freeware ovviamente. Il primo è prodotto proprio da Microsoft ed è veramente semplicissimo da usare

Posts:609

--
10 Feb 2010 13:24 
le operazioni di insert ed update le ho memorizzate direttamente nel codice e quindi sarebbe un lavoro lunghissimo.
Se non devi avere aggiornamenti in tempo reale copiare i files è la cosa migliore, altrimenti puoi usare due approcci:
1) Da codice apri 2 connessioni ai 2 database. All'oggetto command passi prima una connessione e poi l'altra eseguendo esattamente lo stesso comando sql (occhio alle reference tra tabelle)
2) Sul DB principale implementi una sorta di replica "a manina" utilizzando i trigger, ovvero quando esegui un'operazione CRUD su una tabella fai eseguire un trigger al DB che esegue la stessa operazione sulla corrispondente tabella dell'altro DB. In questo caso l'altro server deve essere registrato sul e accessibile dal primo server.(Anche qua occhio alle reference e alla gestione dei campi identity)
Utilizzando questo tipo di approccio non sei obbligato ad interrompere il servizio di SQL in nessuno dei 2 db e scrivi esclusivamente quando ne hai effettivo bisogno.
HTH
Alberto.

Posts:3

--
11 Feb 2010 15:23 

Grazie a entrambi per le risposte.
 Ho optato per la soluzione dei trigger.
Se qualcuno fosse interessato posto la soluzione.
 
Per ogni tabella ho aggiunto un trigger per l'inserimento, la cancellazione e la modifica di una tupla.
Il trigger è questo:
    CREATE TRIGGER AggiornaTabella
    ON [DBmaster].[dbo].[tabella1]
    FOR update | inserted | deleted
    AS INSERT [DBslave].[dbo].[tabella1] 
    SELECT * FROM updated | inserted | deleted
   GO
 
Ora dovrò implementare la gestione degli errori.  (soprattutto per le tabelle che hanno come chiave primaria un campo incrementale calcolato).
Ovviamente se avete una soluzione migliore o dei suggerimenti sono ben accetti.
 Grazie


Posts:609

--
11 Feb 2010 16:58 
Ora dovrò implementare la gestione degli errori. (soprattutto per le tabelle che hanno come chiave primaria un campo incrementale calcolato).
Puoi usare l'istruzione SET IDENTITY_INSERT ON|OFF sulla tabella di destinazione nel caso in cui fai un insert... Puoi leggere i Book On Line di SQL per vedere la sintassi e gli esempi.
HTH
Alberto

Posts:3

--
16 Feb 2010 11:58 

Grazie alberto per la risposta.
 Ho un problema nella gestione dell'errore dei trigger.
 Questo è il trigger che uso per l'aggiornamento.
 
CREATE TRIGGER [Dbmaster].[dbo].[AggiornaTab]
ON [Dbmaster].[dbo].[table1]
after update
AS
begin try
 begin tran
delete from [DBslave].[dbo].[table1] where [DBslave_DB1].[dbo].[table1].ID in (select ID from deleted)
INSERT [DBslave_DB1].[dbo].[table1] SELECT * FROM inserted
end try
Begin Catch
End catch

Se per un qualsiasi motivo il database DBslve fosse irraggiungibile, viene interrotta la transazione di updte nel DBmaster, nonostante le operazioni siano in un blocco try catch. Come posso gestire gli errori con priorità minore di 10?

In pratica vorrei che nonostante il trigger di allineamento fallisse, la modifica della tupla nel DBmaster avvenga comunque.
Grazie

You are not authorized to post a reply.

Active Forums 4.1
       
Articoli Pubblicati
Miniguida alla OOP con il .NET Framework- Parte II
Le Classi e l'Incapsulamento.
2008/10/09 | Author: Alberto De Luca 
Our Dll's in the Add Reference .NET Tab
How to be able to show our DLLs in the Add reference Windows Under the .NET Tab.
2008/07/27 | Author: Sabrina Cosolo
Mixed Fry - General Purpouse classes (part 5)
Helper: Customized Exception and Composed Messages
2007/10/27 | Author: Sabrina Cosolo
Starting from Scratch with WPF (Part 3)
Rows, deities, brushes and refrigerators (second part)
2007/11/22 | Author: Sabrina Cosolo
Introduzione a Windows Presentation Foundation (parte 2)
La prima di una serie di traduzioni da articoli di MSDN o altre fonti che offrono un punto di partenza per iniziare a capire il WPF.
2007/07/29 | Author: Patrizia Cosolo
SQL Server base Notions (part 2)
How to create a database in SQL Server Using only SQL code
2008/03/09 | Author: Sabrina Cosolo
Installer Utility - Utilizzare le Azioni Personalizzate
Come creare automaticamente il DataBase durante il processo di installazione
2007/08/14 | Author: Alberto De luca
Starting from Scratch with WPF (Part 3)
Rows, deities, brushes and refrigerators (first part)
2007/11/22 | Author: Sabrina Cosolo
   Print     
Home|Community|Contenuti|Forums|Blogs|Workshops
© 2007-2010 by DotNetWork .:. Terms Of Use .:. Privacy Statement .:. Login .:.