Domanda

Esiste un incantesimo di mysqldump o uno strumento simile che produrrà un pezzo di codice SQL2003 per creare e riempire gli stessi database in un RDBMS arbitrario conforme a SQL2003?

(Quello che sto provando adesso è MonetDB)

È stato utile?

Soluzione

Le istruzioni DDL sono intrinsecamente specifiche del fornitore del database.Sebbene abbiano la stessa struttura di base, ogni fornitore ha il proprio approccio su come definire tipi, indici, vincoli, ecc.

Le istruzioni DML d'altro canto sono abbastanza portabili.Pertanto suggerisco:

  • Scarica il database senza dati (mysqldump --no-data) per ottenere lo schema
  • Apporta le modifiche necessarie per caricare lo schema sull'altro DB: queste devono essere eseguite manualmente (ma potrebbero essere possibili alcune ricerche/sostituzioni)
  • Scarica i dati con gli inserimenti estesi disattivati ​​e senza creare la tabella (--extended-insert=0 --no-create-info)
  • Esegui lo script risultante sull'altro DB.

Questo dovrebbe fare quello che vuoi.

Tuttavia, quando si esegue il porting di un'applicazione su un fornitore di database diverso, saranno necessarie molte altre cose;spostare lo schema e i dati è la parte più semplice.Verificare la presenza di bug introdotti, comportamenti diversi e testare le prestazioni è la parte difficile.

Per lo meno verifica la validità di ogni singola query nella tua applicazione sul nuovo database.Idealmente fare molto di più.

Altri suggerimenti

Questo è piuttosto difficile.A meno che tu non abbia una struttura DB molto semplice con tipi Vanilla (varchar, intero, ecc.), probabilmente otterrai i migliori risultati scrivendo uno strumento di migrazione.In un linguaggio come Perl (tramite DBI), questo è piuttosto semplice.Il programma è fondamentalmente un ciclo di eco che legge da un database e lo inserisce nell'altro.Ci sono esempi di questo tipo di codice che Google conosce.

A parte l'ovvio problema dello spostamento dei dati c'è il problema più sottile di come vengono rappresentati alcuni tipi di dati.Ad esempio, il campo datetime di MS SQL non è nello stesso formato di quello di MySQL.Altri tipi di dati come i BLOB possono avere una capacità diversa in un RDBM rispetto a un altro.È necessario assicurarsi di comprendere molto bene le definizioni dei tipi di dati del sistema DB di destinazione prima del porting.

L'ultimo problema, ovviamente, è far sì che le istruzioni SQL a livello di applicazione funzionino con il nuovo sistema.Nel mio lavoro, questa è di gran lunga la parte più difficile.La matematica delle date sembra particolarmente specifica per il DB, mentre cose fastidiose come le regole per quotare sono una costante fonte di irritazione.

Buona fortuna con il vostro progetto.

Da SQL Server 2000 o 2005 puoi fare in modo che generi script per i tuoi oggetti, ma non sono sicuro di quanto bene verranno trasferiti su altri RDBMS.

L'opzione di generazione dello script è probabilmente il modo più semplice per procedere.Tuttavia, dovrai senza dubbio eseguire qualche ricerca/sostituzione su alcuni tipi di dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top