Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Trigger SQL Server -> MySQL
martedì 10 gennaio 2006 - 12.23
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
GePs
Profilo
| Newbie
3
messaggi | Data Invio:
mar 10 gen 2006 - 12:23
Salve a tutti! Spero di non essere off topic su questo gruppo!
Ecco il mio problema: ho bisogno di esportare alcune colonne di una tabella su un db MS verso
un db MySQL.
Mi hanno suggerito che il modo migliore è farlo con un trigger sul SQL
Server, che replica la tebella in questione e quindi ogni successiva
modifica alla stessa sul db MySQL.
Il trigger di per se non dovrebbe essere un problema, ma mi trovo in
difficoltà sul come connettere i due DB: SQL è (of course) su una
macchina windows server 2003, mentre MySQL è su una maccina linux: si
potrebbe fare in modo che il trigger attivi in modo opportuno un client
installato sulla macchina windows?
Qualcuno ha qualche idea?
Grazie in anticipo, ciao!
GePs
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mar 10 gen 2006 - 14:19
>Il trigger di per se non dovrebbe essere un problema, ma mi trovo
>in difficoltà sul come connettere i due DB: SQL è (of course) su
>una macchina windows server 2003, mentre MySQL è su una maccina linux:
>si potrebbe fare in modo che il trigger attivi in modo opportuno
> un client installato sulla macchina windows?
Prima di darti una risposta ti chiedo alcune cose.
Allora, non ho capito se i due DB devono rimanere sincronizzati in tempo quasi reale oppure il lavoro che stai facendo è una migrazione per cui poi abbandonerai SQL Server in favore di MySQL.
La seconda domanda è, se i due database devono rimanere sincronizzati in tempo quasi reale, come definiremmo questo "quasi" ossia quanto può essere il ritardo massimo-minimo di aggiornamento fra i due DB ? 5 minuti, 10, mezz'ora, un'ora ?
ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
GePs
Profilo
| Newbie
3
messaggi | Data Invio:
mar 10 gen 2006 - 14:55
No, non è una migrazione, i due db dovranno essere entrambi in produzione. Per la precisione i due campi da mantenere allineati sono un nome utente e una password, presenti su una tabella di un db SQL Server: ho bisogno degli stessi campi su un'altra tabella, però sul db MySQL, che è su un'altra macchina, linux per giunta.
La questione tempi non dovrebbe essere cruciale, diciamo cinque minuti.
Grazie per la risposta!
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 10 gen 2006 - 20:45
> No, non è una migrazione, i due db dovranno essere entrambi in produzione.
> Per la precisione i due campi da mantenere allineati sono un nome utente e
> una password, presenti su una tabella di un db SQL Server:
> ho bisogno degli stessi campi su un'altra tabella, però sul db MySQL, che
> è su un'altra macchina, linux per giunta.
> La questione tempi non dovrebbe essere cruciale, diciamo cinque minuti.
Ciao GePs,
visto che non ti serve una sincronizzazione realtime e transazionale, abbandona l'idea dei triggers, in quanto non farebbero altro che diminuire in modo apprezzabile la scalabilità dell'intera soluzione.
Domanda: nel database SQL Server esiste una tabella (o una colonna) che tiene traccia delle UserID e Password già esportate verso MySQL?
Questo ti semplificherebbe enormemente la vita!
La soluzione che ti propongo è completamente disaccoppiata.
Sulla macchina SQL Server andrei a definire un DTS schedulato tramite un job ogni x minuti che genera un file di testo con un determinato tracciato record (banalmente le due colonne UserID e Password) tramite una operazione Bulk Copy (ad esempio con il Bulk Copy Task) contenente i nuovi dati non ancora esportati, e andrei a metterli su un sito FTP definito sul server Linux MySQL. Su questa macchina verrà eseguito ciclicamente un JOB che spazzola la directory, prende il file, lo inserisce nel database MySQL e poi lo elimina.
In questo modo i due mondi rimangono separati e non si creano conflitti con le eventuali operazioni già in essere sui due DBMS.
Come soluzione alternativa potresti definire un linked server a MySQL e tramite un job schedulato ogni x minuti effettuare una query distribuita che vada ad inserire i dati mancanti.
Questa soluzione non richiede la modifica dello schema del db SQL Server, ma risulterà molto più pesante. Inoltre sarà necessario installare e configurare il driver ODBC di MySQL sul server Windows.
Non conosco MySQL e non so se esistono particolari problemi con il suo driver ODBC, quindi c'è addirittura il rischio che non sia nemmeno possibile effettuare query distribuite, ma lascio parlare chi ne sa più di me.
> Grazie per la risposta!
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
GePs
Profilo
| Newbie
3
messaggi | Data Invio:
mar 10 gen 2006 - 21:16
>Domanda: nel database SQL Server esiste una tabella (o una colonna)
>che tiene traccia delle UserID e Password già esportate verso
>MySQL?
>Questo ti semplificherebbe enormemente la vita!
Il DB MySQL al momento non esiste, quindi la vita è ancora più semplificata. O no?
>La soluzione che ti propongo è completamente disaccoppiata.
>Sulla macchina SQL Server andrei a definire un DTS schedulato
>tramite un job ogni x minuti che genera un file di testo con
>un determinato tracciato record (banalmente le due colonne UserID
>e Password) tramite una operazione Bulk Copy (ad esempio con
>il Bulk Copy Task) contenente i nuovi dati non ancora esportati,
>e andrei a metterli su un sito FTP definito sul server Linux
>MySQL. Su questa macchina verrà eseguito ciclicamente un JOB
>che spazzola la directory, prende il file, lo inserisce nel
>database MySQL e poi lo elimina.
>
>In questo modo i due mondi rimangono separati e non si creano
>conflitti con le eventuali operazioni già in essere sui due
>DBMS.
Mi piace questa soluzione :)
>Come soluzione alternativa potresti definire un linked server
>a MySQL e tramite un job schedulato ogni x minuti effettuare
>Questa soluzione non richiede la modifica dello schema del db
>SQL Server, ma risulterà molto più pesante. Inoltre sarà necessario
>installare e configurare il driver ODBC di MySQL sul server
>Windows.
>Non conosco MySQL e non so se esistono particolari problemi con
>il suo driver ODBC, quindi c'è addirittura il rischio che non
>sia nemmeno possibile effettuare query distribuite, ma lascio
> parlare chi ne sa più di me.
Questo pomeriggio un collega mi ha suggerito la stessa cosa: non credo che possano esserci problemi con il dirver ODBC di MySQL, soprattutto perché la query è molto semplice (insert/update/delete di righe). Se poi non si possono fare query da remoto, il problema è strutturale, e quindi non risolvibile a meno di non riscrivere un driver ODBC ad hoc per MySQl, cosa di cui non sono in grado.
Grazie mille pe ril suggerimento, vi terrò aggiornati sugli esiti :)
ciao!
Torna su
Stanze Forum
Elenco Threads
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 !