Trigger SQL Server -> MySQL

martedì 10 gennaio 2006 - 12.23

GePs Profilo | Newbie

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

>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

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

> 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

>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!

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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5