Ne ho alcuni grandi .bak
file di dimensioni da un dump di SQL Server 2005.
Posso ripristinarli senza usare SQL Server, su PostgreSQL, MySQL o su file di testo semplici?
Una soluzione open source sarebbe molto utile.
Ne ho alcuni grandi .bak
file di dimensioni da un dump di SQL Server 2005.
Posso ripristinarli senza usare SQL Server, su PostgreSQL, MySQL o su file di testo semplici?
Una soluzione open source sarebbe molto utile.
Risposte:
Ecco cosa suggerisco:
se la VM ha spazio sufficiente per contenere il backup ma non abbastanza per ripristinarlo, è possibile eseguire un "ripristino virtuale" utilizzando la versione di prova di un prodotto di Red-Gate con lo stesso nome (che consente di interagire con file di backup come se fosse stato ripristinato). Altrimenti, ripristinare il database in modo normale .
Una volta che il database è disponibile (tramite un ripristino normale o virtuale), è possibile generare script per lo schema e i dati nel modo seguente:
In alternativa puoi provare a giocare con l' utilità bcp per estrarre i dati in file CSV o simili, ma dovrai farlo tabella per tabella o usare alcuni script intelligenti (PowerShell, T-SQL, C # / SMO, ecc. ) per generare tutti i comandi bcp per te. Una volta nei file CSV, dovrebbe essere banale caricare in blocco i dati in Postgres (ma avrai ancora del lavoro da fare per generare le tabelle).
Come ultimo suggerimento, se il file .bak non è enorme e i dati non sono confidenziali, sono più che disposto a provare a generare file per te nel formato che ti serve. Ho un sacco di macchine virtuali Windows con spazio, la sfida sarebbe quella di portare il file .BAK in un posto dove posso recuperarlo, specialmente se è più grande della maggior parte del supporto dei servizi di condivisione file.
Sfortunatamente non esiste un modo per accedere al contenuto di un file .bak senza avere una profonda conoscenza degli interni del file stesso. Posso pensare a una persona qui che potrebbe essere a conoscenza di queste informazioni, ma non posso dire se detta persona ti dirà o no come fare per farlo
Quindi, dovrai installare un'istanza di SQL Server. Dovrai anche assicurarti che questa istanza possa parlare con il tuo server Postgres (frigging con pg_hba.conf) Una volta lì, hai un paio di buoni percorsi per migrare i dati.
Il primo percorso sarebbe installare il driver ODBC di Postgres per Windows e impostare una connessione al server pg. Quindi è possibile utilizzare SSIS per eseguire lo script di una migrazione dei dati. Se hai intenzione di seguire questa strada, ti suggerisco di installare SSIS durante l'installazione del server di database.
L'altra opzione riguarda anche la connessione del driver ODBC, ma è possibile creare un server collegato in SQL Server ed eseguire inserimenti sull'istanza pg tramite SQL Server. Ho già risposto a questa esatta domanda qui, quindi non dovrebbe essere difficile da trovare.
MODIFICARE
Per incorporare il commento di Aaron, una volta avviato SQL Server, è possibile esportare i dati in file flat in diversi modi. Se scegli questo percorso fammelo sapere e posterò alcuni modi per farlo
MODIFICA (2):
Il processo del server collegato potrebbe non essere l'approccio migliore a meno che non si desideri creare le strutture in anticipo. È il mio metodo preferito, ma di solito ho già la struttura in atto su entrambi i lati.
Questo lascia la risposta di Aaron Bertrand come la migliore risposta. Si noti che oltre ai tipi di dati ( IDENTITY
vs. SEQUENCE
, postgres non sa nulla da NVARCHAR
quando si imposta la codifica sul database stesso). Postgres non ne sa nulla CREATE CLUSTERED INDEX
( CLUSTER
potrebbe funzionare per te). Infine, poiché vedo nei commenti che userete i dati spaziali, postgresql non sa nulla di CREATE SPATIAL INDEX
sintassi. Dovrai installare Postgis e usare la INDEXTYPE
parola chiave per creare indici spaziali. Infine, assicurati di gestire gli schemi in modo appropriato.
Per farla breve: